mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Move helpers to be prefixed with gt- (#22879)
				
					
				
			As discussed in #22847 the helpers in helpers.less need to have a separate prefix as they are causing conflicts with fomantic styles This will allow us to have the `.gt-hidden { display:none !important; }` style that is needed to for the reverted PR. Of note in doing this I have noticed that there was already a conflict with at least one chroma style which this PR now avoids. I've also added in the `gt-hidden` style that matches the tailwind one and switched the code that needed it to use that. Signed-off-by: Andrew Thornton <art27@cantab.net> --------- Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		@@ -1,19 +1,19 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <ol class="diff-detail-box diff-stats m-0" ref="root" v-if="fileListIsVisible">
 | 
			
		||||
  <ol class="diff-detail-box diff-stats gt-m-0" ref="root" v-if="fileListIsVisible">
 | 
			
		||||
    <li v-for="file in files" :key="file.NameHash">
 | 
			
		||||
      <div class="bold df ac pull-right">
 | 
			
		||||
        <span v-if="file.IsBin" class="ml-1 mr-3">{{ binaryFileMessage }}</span>
 | 
			
		||||
      <div class="gt-bold gt-df gt-ac pull-right">
 | 
			
		||||
        <span v-if="file.IsBin" class="gt-ml-1 gt-mr-3">{{ binaryFileMessage }}</span>
 | 
			
		||||
        {{ file.IsBin ? '' : file.Addition + file.Deletion }}
 | 
			
		||||
        <span v-if="!file.IsBin" class="diff-stats-bar tooltip mx-3" :data-content="statisticsMessage.replace('%d', (file.Addition + file.Deletion)).replace('%d', file.Addition).replace('%d', file.Deletion)">
 | 
			
		||||
        <span v-if="!file.IsBin" class="diff-stats-bar tooltip gt-mx-3" :data-content="statisticsMessage.replace('%d', (file.Addition + file.Deletion)).replace('%d', file.Addition).replace('%d', file.Deletion)">
 | 
			
		||||
          <div class="diff-stats-add-bar" :style="{ 'width': diffStatsWidth(file.Addition, file.Deletion) }" />
 | 
			
		||||
        </span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <!-- todo finish all file status, now modify, add, delete and rename -->
 | 
			
		||||
      <span :class="['status', diffTypeToString(file.Type), 'tooltip']" :data-content="diffTypeToString(file.Type)" data-position="right center"> </span>
 | 
			
		||||
      <a class="file mono" :href="'#diff-' + file.NameHash">{{ file.Name }}</a>
 | 
			
		||||
      <a class="file gt-mono" :href="'#diff-' + file.NameHash">{{ file.Name }}</a>
 | 
			
		||||
    </li>
 | 
			
		||||
    <li v-if="isIncomplete" id="diff-too-many-files-stats" class="pt-2">
 | 
			
		||||
      <span class="file df ac sb">{{ tooManyFilesMessage }}
 | 
			
		||||
    <li v-if="isIncomplete" id="diff-too-many-files-stats" class="gt-pt-2">
 | 
			
		||||
      <span class="file gt-df gt-ac gt-sb">{{ tooManyFilesMessage }}
 | 
			
		||||
        <a :class="['ui', 'basic', 'tiny', 'button', isLoadingNewData === true ? 'disabled' : '']" id="diff-show-more-files-stats" @click.stop="loadMoreData">{{ showMoreMessage }}</a>
 | 
			
		||||
      </span>
 | 
			
		||||
    </li>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,14 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div
 | 
			
		||||
    v-if="fileTreeIsVisible"
 | 
			
		||||
    class="mr-3 mt-3 diff-detail-box"
 | 
			
		||||
    class="gt-mr-3 gt-mt-3 diff-detail-box"
 | 
			
		||||
  >
 | 
			
		||||
    <!-- only render the tree if we're visible. in many cases this is something that doesn't change very often -->
 | 
			
		||||
    <div class="ui list">
 | 
			
		||||
      <DiffFileTreeItem v-for="item in fileTree" :key="item.name" :item="item" />
 | 
			
		||||
    </div>
 | 
			
		||||
    <div v-if="isIncomplete" id="diff-too-many-files-stats" class="pt-2">
 | 
			
		||||
      <span class="mr-2">{{ tooManyFilesMessage }}</span><a :class="['ui', 'basic', 'tiny', 'button', isLoadingNewData === true ? 'disabled' : '']" id="diff-show-more-files-stats" @click.stop="loadMoreData">{{ showMoreMessage }}</a>
 | 
			
		||||
    <div v-if="isIncomplete" id="diff-too-many-files-stats" class="gt-pt-2">
 | 
			
		||||
      <span class="gt-mr-2">{{ tooManyFilesMessage }}</span><a :class="['ui', 'basic', 'tiny', 'button', isLoadingNewData === true ? 'disabled' : '']" id="diff-show-more-files-stats" @click.stop="loadMoreData">{{ showMoreMessage }}</a>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div v-show="show">
 | 
			
		||||
    <div class="item" :class="item.isFile ? 'filewrapper p-1' : ''">
 | 
			
		||||
    <div class="item" :class="item.isFile ? 'filewrapper gt-p-1' : ''">
 | 
			
		||||
      <!-- Files -->
 | 
			
		||||
      <SvgIcon
 | 
			
		||||
        v-if="item.isFile"
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
      />
 | 
			
		||||
      <a
 | 
			
		||||
        v-if="item.isFile"
 | 
			
		||||
        class="file ellipsis muted"
 | 
			
		||||
        class="file gt-ellipsis muted"
 | 
			
		||||
        :href="item.isFile ? '#diff-' + item.file.NameHash : ''"
 | 
			
		||||
      >{{ item.name }}</a>
 | 
			
		||||
      <SvgIcon
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
      />
 | 
			
		||||
 | 
			
		||||
      <!-- Directories -->
 | 
			
		||||
      <div v-if="!item.isFile" class="directory p-1" @click.stop="handleClick(item.isFile)">
 | 
			
		||||
      <div v-if="!item.isFile" class="directory gt-p-1" @click.stop="handleClick(item.isFile)">
 | 
			
		||||
        <SvgIcon
 | 
			
		||||
          class="svg-icon"
 | 
			
		||||
          :name="collapsed ? 'octicon-chevron-right' : 'octicon-chevron-down'"
 | 
			
		||||
@@ -30,7 +30,7 @@
 | 
			
		||||
          class="svg-icon directory"
 | 
			
		||||
          name="octicon-file-directory-fill"
 | 
			
		||||
        />
 | 
			
		||||
        <span class="ellipsis">{{ item.name }}</span>
 | 
			
		||||
        <span class="gt-ellipsis">{{ item.name }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div v-show="!collapsed">
 | 
			
		||||
        <DiffFileTreeItem v-for="childItem in item.children" :key="childItem.name" :item="childItem" class="list" />
 | 
			
		||||
 
 | 
			
		||||
@@ -47,14 +47,14 @@
 | 
			
		||||
          {{ mergeForm.textCancel }}
 | 
			
		||||
        </button>
 | 
			
		||||
 | 
			
		||||
        <div class="ui checkbox ml-2" v-if="mergeForm.isPullBranchDeletable && !autoMergeWhenSucceed">
 | 
			
		||||
        <div class="ui checkbox gt-ml-2" v-if="mergeForm.isPullBranchDeletable && !autoMergeWhenSucceed">
 | 
			
		||||
          <input name="delete_branch_after_merge" type="checkbox" v-model="deleteBranchAfterMerge" id="delete-branch-after-merge">
 | 
			
		||||
          <label for="delete-branch-after-merge">{{ mergeForm.textDeleteBranch }}</label>
 | 
			
		||||
        </div>
 | 
			
		||||
      </form>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div v-if="!showActionForm" class="df">
 | 
			
		||||
    <div v-if="!showActionForm" class="gt-df">
 | 
			
		||||
      <!-- the merge button -->
 | 
			
		||||
      <div class="ui buttons merge-button" :class="[mergeForm.emptyCommit ? 'grey' : mergeForm.allOverridableChecksOk ? 'green' : 'red']" @click="toggleActionForm(true)" >
 | 
			
		||||
        <button class="ui button">
 | 
			
		||||
@@ -95,7 +95,7 @@
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <!-- the cancel auto merge button -->
 | 
			
		||||
      <form v-if="mergeForm.hasPendingPullRequestMerge" :action="mergeForm.baseLink+'/cancel_auto_merge'" method="post" class="ml-4">
 | 
			
		||||
      <form v-if="mergeForm.hasPendingPullRequestMerge" :action="mergeForm.baseLink+'/cancel_auto_merge'" method="post" class="gt-ml-4">
 | 
			
		||||
        <input type="hidden" name="_csrf" :value="csrfToken">
 | 
			
		||||
        <button class="ui button">
 | 
			
		||||
          {{ mergeForm.textAutoMergeCancelSchedule }}
 | 
			
		||||
 
 | 
			
		||||
@@ -42,15 +42,15 @@
 | 
			
		||||
        <div class="job-step-container">
 | 
			
		||||
          <div class="job-step-section" v-for="(jobStep, i) in currentJob.steps" :key="i">
 | 
			
		||||
            <div class="job-step-summary" @click.stop="toggleStepLogs(i)">
 | 
			
		||||
              <SvgIcon name="octicon-chevron-down" class="mr-3" v-show="currentJobStepsStates[i].expanded"/>
 | 
			
		||||
              <SvgIcon name="octicon-chevron-right" class="mr-3" v-show="!currentJobStepsStates[i].expanded"/>
 | 
			
		||||
              <SvgIcon name="octicon-chevron-down" class="gt-mr-3" v-show="currentJobStepsStates[i].expanded"/>
 | 
			
		||||
              <SvgIcon name="octicon-chevron-right" class="gt-mr-3" v-show="!currentJobStepsStates[i].expanded"/>
 | 
			
		||||
 | 
			
		||||
              <SvgIcon name="octicon-check-circle-fill" class="green mr-3" v-if="jobStep.status === 'success'"/>
 | 
			
		||||
              <SvgIcon name="octicon-skip" class="ui text grey mr-3" v-else-if="jobStep.status === 'skipped'"/>
 | 
			
		||||
              <SvgIcon name="octicon-clock" class="ui text yellow mr-3" v-else-if="jobStep.status === 'waiting'"/>
 | 
			
		||||
              <SvgIcon name="octicon-blocked" class="ui text yellow mr-3" v-else-if="jobStep.status === 'blocked'"/>
 | 
			
		||||
              <SvgIcon name="octicon-meter" class="ui text yellow mr-3" class-name="job-status-rotate" v-else-if="jobStep.status === 'running'"/>
 | 
			
		||||
              <SvgIcon name="octicon-x-circle-fill" class="red mr-3 " v-else/>
 | 
			
		||||
              <SvgIcon name="octicon-check-circle-fill" class="green gt-mr-3" v-if="jobStep.status === 'success'"/>
 | 
			
		||||
              <SvgIcon name="octicon-skip" class="ui text grey gt-mr-3" v-else-if="jobStep.status === 'skipped'"/>
 | 
			
		||||
              <SvgIcon name="octicon-clock" class="ui text yellow gt-mr-3" v-else-if="jobStep.status === 'waiting'"/>
 | 
			
		||||
              <SvgIcon name="octicon-blocked" class="ui text yellow gt-mr-3" v-else-if="jobStep.status === 'blocked'"/>
 | 
			
		||||
              <SvgIcon name="octicon-meter" class="ui text yellow gt-mr-3" class-name="job-status-rotate" v-else-if="jobStep.status === 'running'"/>
 | 
			
		||||
              <SvgIcon name="octicon-x-circle-fill" class="red gt-mr-3 " v-else/>
 | 
			
		||||
 | 
			
		||||
              <span class="step-summary-msg">{{ jobStep.summary }}</span>
 | 
			
		||||
              <span class="step-summary-dur">{{ jobStep.duration }}</span>
 | 
			
		||||
 
 | 
			
		||||
@@ -172,7 +172,7 @@ export function initGlobalDropzone() {
 | 
			
		||||
          // Create a "Copy Link" element, to conveniently copy the image
 | 
			
		||||
          // or file link as Markdown to the clipboard
 | 
			
		||||
          const copyLinkElement = document.createElement('div');
 | 
			
		||||
          copyLinkElement.className = 'tc';
 | 
			
		||||
          copyLinkElement.className = 'gt-tc';
 | 
			
		||||
          // The a element has a hardcoded cursor: pointer because the default is overridden by .dropzone
 | 
			
		||||
          copyLinkElement.innerHTML = `<a href="#" style="cursor: pointer;">${svg('octicon-copy', 14, 'copy link')} Copy link</a>`;
 | 
			
		||||
          copyLinkElement.addEventListener('click', (e) => {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ async function receiveUpdateCount(event) {
 | 
			
		||||
    const data = JSON.parse(event.data);
 | 
			
		||||
 | 
			
		||||
    for (const count of document.querySelectorAll('.notification_count')) {
 | 
			
		||||
      count.classList.toggle('hidden', data.Count === 0);
 | 
			
		||||
      count.classList.toggle('gt-hidden', data.Count === 0);
 | 
			
		||||
      count.textContent = `${data.Count}`;
 | 
			
		||||
    }
 | 
			
		||||
    await updateNotificationTable();
 | 
			
		||||
@@ -165,9 +165,9 @@ async function updateNotificationCount() {
 | 
			
		||||
 | 
			
		||||
  const notificationCount = $('.notification_count');
 | 
			
		||||
  if (data.new === 0) {
 | 
			
		||||
    notificationCount.addClass('hidden');
 | 
			
		||||
    notificationCount.addClass('gt-hidden');
 | 
			
		||||
  } else {
 | 
			
		||||
    notificationCount.removeClass('hidden');
 | 
			
		||||
    notificationCount.removeClass('gt-hidden');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  notificationCount.text(`${data.new}`);
 | 
			
		||||
 
 | 
			
		||||
@@ -54,8 +54,8 @@ export function initRepoCloneLink() {
 | 
			
		||||
 | 
			
		||||
  // restore animation after first init
 | 
			
		||||
  setTimeout(() => {
 | 
			
		||||
    $repoCloneSsh.removeClass('no-transition');
 | 
			
		||||
    $repoCloneHttps.removeClass('no-transition');
 | 
			
		||||
    $repoCloneSsh.removeClass('gt-no-transition');
 | 
			
		||||
    $repoCloneHttps.removeClass('gt-no-transition');
 | 
			
		||||
  }, 100);
 | 
			
		||||
 | 
			
		||||
  $repoCloneSsh.on('click', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -88,7 +88,7 @@ function filterRepoFiles(filter) {
 | 
			
		||||
    const $row = $(tmplRow);
 | 
			
		||||
    const $a = $row.find('a');
 | 
			
		||||
    $a.attr('href', `${treeLink}/${escapePath(r.matchResult.join(''))}`);
 | 
			
		||||
    const $octiconFile = $(svg('octicon-file')).addClass('mr-3');
 | 
			
		||||
    const $octiconFile = $(svg('octicon-file')).addClass('gt-mr-3');
 | 
			
		||||
    $a.append($octiconFile);
 | 
			
		||||
    // if the target file path is "abc/xyz", to search "bx", then the matchResult is ['a', 'b', 'c/', 'x', 'yz']
 | 
			
		||||
    // the matchResult[odd] is matched and highlighted to red.
 | 
			
		||||
 
 | 
			
		||||
@@ -14,16 +14,16 @@ function showContentHistoryDetail(issueBaseUrl, commentId, historyId, itemTitleH
 | 
			
		||||
  $dialog = $(`
 | 
			
		||||
<div class="ui modal content-history-detail-dialog">
 | 
			
		||||
  ${svg('octicon-x', 16, 'close icon inside')}
 | 
			
		||||
  <div class="header df ac sb">
 | 
			
		||||
  <div class="header gt-df gt-ac gt-sb">
 | 
			
		||||
    <div>${itemTitleHtml}</div>
 | 
			
		||||
    <div class="ui dropdown dialog-header-options df ac mr-5 hide">
 | 
			
		||||
    <div class="ui dropdown dialog-header-options gt-df gt-ac gt-mr-5 hide">
 | 
			
		||||
      ${i18nTextOptions}${svg('octicon-triangle-down', 14, 'dropdown icon')}
 | 
			
		||||
      <div class="menu">
 | 
			
		||||
        <div class="item red text" data-option-item="delete">${i18nTextDeleteFromHistory}</div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="comment-diff-data tl p-3 is-loading"></div>
 | 
			
		||||
  <div class="comment-diff-data gt-tl gt-p-3 is-loading"></div>
 | 
			
		||||
</div>`);
 | 
			
		||||
  $dialog.appendTo($('body'));
 | 
			
		||||
  $dialog.find('.dialog-header-options').dropdown({
 | 
			
		||||
@@ -76,7 +76,7 @@ function showContentHistoryMenu(issueBaseUrl, $item, commentId) {
 | 
			
		||||
  const $headerLeft = $item.find('.comment-header-left');
 | 
			
		||||
  const menuHtml = `
 | 
			
		||||
  <div class="ui pointing dropdown top left content-history-menu" data-comment-id="${commentId}">
 | 
			
		||||
    • <a>${i18nTextEdited}${svg('octicon-triangle-down', 14, 'dropdown icon ml-1 mt-1')}</a>
 | 
			
		||||
    • <a>${i18nTextEdited}${svg('octicon-triangle-down', 14, 'dropdown icon gt-ml-1 gt-mt-1')}</a>
 | 
			
		||||
    <div class="menu">
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>`;
 | 
			
		||||
 
 | 
			
		||||
@@ -219,11 +219,11 @@ export function initRepoCommentForm() {
 | 
			
		||||
 | 
			
		||||
      let icon = '';
 | 
			
		||||
      if (input_id === '#milestone_id') {
 | 
			
		||||
        icon = svg('octicon-milestone', 18, 'mr-3');
 | 
			
		||||
        icon = svg('octicon-milestone', 18, 'gt-mr-3');
 | 
			
		||||
      } else if (input_id === '#project_id') {
 | 
			
		||||
        icon = svg('octicon-project', 18, 'mr-3');
 | 
			
		||||
        icon = svg('octicon-project', 18, 'gt-mr-3');
 | 
			
		||||
      } else if (input_id === '#assignee_id') {
 | 
			
		||||
        icon = `<img class="ui avatar image mr-3" src=${$(this).data('avatar')}>`;
 | 
			
		||||
        icon = `<img class="ui avatar image gt-mr-3" src=${$(this).data('avatar')}>`;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      $list.find('.selected').html(`
 | 
			
		||||
 
 | 
			
		||||
@@ -125,7 +125,7 @@ function updateStopwatchData(data) {
 | 
			
		||||
  const btnEl = $('.active-stopwatch-trigger');
 | 
			
		||||
  if (!watch) {
 | 
			
		||||
    clearStopwatchTimer();
 | 
			
		||||
    btnEl.addClass('hidden');
 | 
			
		||||
    btnEl.addClass('gt-hidden');
 | 
			
		||||
  } else {
 | 
			
		||||
    const {repo_owner_name, repo_name, issue_index, seconds} = watch;
 | 
			
		||||
    const issueUrl = `${appSubUrl}/${repo_owner_name}/${repo_name}/issues/${issue_index}`;
 | 
			
		||||
@@ -134,7 +134,7 @@ function updateStopwatchData(data) {
 | 
			
		||||
    $('.stopwatch-cancel').attr('action', `${issueUrl}/times/stopwatch/cancel`);
 | 
			
		||||
    $('.stopwatch-issue').text(`${repo_owner_name}/${repo_name}#${issue_index}`);
 | 
			
		||||
    updateStopwatchTime(seconds);
 | 
			
		||||
    btnEl.removeClass('hidden');
 | 
			
		||||
    btnEl.removeClass('gt-hidden');
 | 
			
		||||
  }
 | 
			
		||||
  return Boolean(data.length);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ function displayError(el, err) {
 | 
			
		||||
  const target = targetElement(el);
 | 
			
		||||
  target.classList.remove('is-loading');
 | 
			
		||||
  const errorNode = document.createElement('div');
 | 
			
		||||
  errorNode.setAttribute('class', 'ui message error markup-block-error mono');
 | 
			
		||||
  errorNode.setAttribute('class', 'ui message error markup-block-error gt-mono');
 | 
			
		||||
  errorNode.textContent = err.str || err.message || String(err);
 | 
			
		||||
  target.before(errorNode);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ const iframeCss = `
 | 
			
		||||
function displayError(el, err) {
 | 
			
		||||
  el.closest('pre').classList.remove('is-loading');
 | 
			
		||||
  const errorNode = document.createElement('div');
 | 
			
		||||
  errorNode.setAttribute('class', 'ui message error markup-block-error mono');
 | 
			
		||||
  errorNode.setAttribute('class', 'ui message error markup-block-error gt-mono');
 | 
			
		||||
  errorNode.textContent = err.str || err.message || String(err);
 | 
			
		||||
  el.closest('pre').before(errorNode);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user