ajaxgeteditorcontent.html.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. /**
  3. * The ajaxgeteditorcontent view file of repo module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  6. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author Ke Zhao<zhaoke@easycorp.ltd>
  8. * @package repo
  9. * @link http://www.zentao.net
  10. */
  11. namespace zin;
  12. include "header.review.html.php";
  13. $canLinkStory = common::hasPriv('repo', 'linkStory');
  14. $canLinkBug = common::hasPriv('repo', 'linkBug');
  15. $canLinkTask = common::hasPriv('repo', 'linkTask');
  16. $canUnlinkObject = common::hasPriv('repo', 'unlink');
  17. $canAddBug = common::hasPriv('repo', 'addBug');
  18. jsVar('unlinkTitle', $this->lang->repo->unlink);
  19. jsVar('addIssueTip', $lang->repo->addIssue);
  20. jsVar('canUnlinkObject', $canUnlinkObject);
  21. jsVar('fileExt', $this->config->repo->fileExt);
  22. jsVar('file', $pathInfo);
  23. jsVar('filePath', $entry);
  24. jsVar('blameTmpl', $lang->repo->blameTmpl);
  25. jsVar('repoID', $repoID);
  26. jsVar('showEditor', $showEditor);
  27. jsVar('canLinkStory', $canLinkStory);
  28. jsVar('canLinkBug', $canLinkBug);
  29. jsVar('canLinkTask', $canLinkTask);
  30. jsVar('objectID', 0);
  31. jsVar('objectType', 'story');
  32. jsVar('pageType', $type);
  33. jsVar('revision', $revision);
  34. jsVar('sourceRevision', $oldRevision);
  35. jsVar('encodePath', $this->repo->encodePath($entry));
  36. if($showEditor) jsVar('codeContent', $content);
  37. jsVar('canAddBug', $canAddBug);
  38. jsVar('canReview', !empty($canReview));
  39. jsVar('createLang', $lang->repo->addIssue);
  40. $lang = 'php';
  41. foreach($this->config->repo->fileExt as $langName => $exts)
  42. {
  43. foreach($exts as $ext) if(isset($pathInfo['extension']) && strpos('.' . $pathInfo['extension'], $ext) !== false) $lang = $langName;
  44. }
  45. if(strpos($config->repo->images, "|$suffix|") !== false)
  46. {
  47. $wg = div
  48. (
  49. set::className('image'),
  50. img(set::src('data:image/' . $suffix . ';base64,' . $content))
  51. );
  52. }
  53. elseif($suffix == 'binary')
  54. {
  55. $wg = div
  56. (
  57. set::className('binary'),
  58. a
  59. (
  60. set('data-link', $this->repo->createLink('download', "repoID=$repoID&path=" . $this->repo->encodePath($entry) . "&fromRevision=$revision")),
  61. icon('download'),
  62. on::click('downloadCode'),
  63. set::title($this->lang->repo->download)
  64. )
  65. );
  66. }
  67. else
  68. {
  69. $options = array(
  70. 'value' => $content,
  71. 'language' => $lang,
  72. 'readOnly' => true,
  73. 'autoIndent' => true,
  74. 'contextmenu' => true,
  75. 'automaticLayout' => true,
  76. 'EditorMinimapOptions' => array('enabled' => false)
  77. );
  78. if($type == 'diff') $options = array(
  79. 'language' => $lang,
  80. 'folding' => true,
  81. 'showFoldingControls' => 'never',
  82. 'readOnly' => true,
  83. 'autoIndent' => true,
  84. 'contextmenu' => true,
  85. 'automaticLayout' => true,
  86. 'renderSideBySide' => false,
  87. 'EditorMinimapOptions' => array('enabled' => false)
  88. );
  89. $wg = monaco
  90. (
  91. set::id('codeContainer'),
  92. set::options($options),
  93. set::action($type == 'diff' ? 'diff' : 'create'),
  94. $type == 'diff' ? set::diffContent(jsRaw('parent.getDiffs(filePath)')) : null,
  95. set::onMouseDown('window.onMouseDown'),
  96. set::onMouseMove('window.onMouseMove'),
  97. set::selectedLines(empty($lines) ? '' : $lines)
  98. );
  99. }
  100. $dropMenus = array();
  101. if($canLinkStory) $dropMenus[] = array('id' => 'linkStory', 'text' => $this->lang->repo->linkStory, 'icon' => 'lightbulb');
  102. if($canLinkBug) $dropMenus[] = array('id' => 'linkBug', 'text' => $this->lang->repo->linkBug, 'icon' => 'bug');
  103. if($canLinkTask) $dropMenus[] = array('id' => 'linkTask', 'text' => $this->lang->repo->linkTask, 'icon' => 'todo');
  104. $logWg = div
  105. (
  106. set::id('log'),
  107. div(set::className('history')),
  108. div
  109. (
  110. set::className('action-btn pull-right'),
  111. div(set::className('btn btn-close pull-right ghost text-black bg-light bg-opacity-50'), icon('close')),
  112. !empty($dropMenus) ? dropdown
  113. (
  114. set::arrow(false),
  115. set::staticMenu(true),
  116. btn
  117. (
  118. setClass('ghost text-black bg-light bg-opacity-50'),
  119. set::icon('ellipsis-v rotate-90')
  120. ),
  121. set::items
  122. (
  123. $dropMenus
  124. )
  125. ) : ''
  126. )
  127. );
  128. $relatedWg = div
  129. (
  130. set::id('related'),
  131. div(set::className('btn btn-left pull-left'), icon('chevron-left')),
  132. div(set::className('btn btn-right pull-right'), icon('chevron-right')),
  133. div
  134. (
  135. set::className('panel-title'),
  136. tabs
  137. (
  138. set::id('relationTabs'),
  139. tabPane
  140. (
  141. set::key('tab1'),
  142. set::title(''),
  143. tableData()
  144. )
  145. )
  146. ),
  147. div(set::className('table-empty-tip'), p($this->lang->repo->notRelated))
  148. );
  149. div
  150. (
  151. set::id('monacoEditor'),
  152. set::className('repoCode'),
  153. $wg,
  154. $logWg,
  155. $relatedWg
  156. );
  157. div
  158. (
  159. set::id('reviewBugContainer'),
  160. setStyle('display', 'none'),
  161. div($this->lang->repo->viewBugs)
  162. );
  163. set::zui(true);
  164. render('pageBase');