PageRenderTime 39ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/assets/plugins/codemirror/codemirror.plugin.php

https://github.com/good-web-master/modx.evo.custom
PHP | 204 lines | 113 code | 31 blank | 60 comment | 25 complexity | 4258934c77c2a22d02b9b0aa33dd8466 MD5 | raw file
Possible License(s): LGPL-2.1, AGPL-1.0, GPL-2.0, MIT, BSD-3-Clause
  1. <?php
  2. /**
  3. * @name CodeMirror
  4. * @description JavaScript library that can be used to create a relatively pleasant editor interface
  5. *
  6. * @released Apr 15, 2012
  7. * @CodeMirror 2.23 b
  8. *
  9. * @required MODx 0.9.6.3+
  10. * CodeMirror 2.23 : pl
  11. *
  12. * @confirmed MODx Evolution 1.0.6
  13. *
  14. * @author hansek from www.modxcms.cz <http://www.modxcms.cz>
  15. *
  16. * @see http://codemirror.net/
  17. */
  18. global $content;
  19. $textarea_name = 'post';
  20. $object_name = $content['name'];
  21. $obect_type = substr($evt->name, 2, 1);
  22. $mode = 'htmlmixed';
  23. /*
  24. * Default Plugin configuration
  25. */
  26. $theme = (isset($theme) ? $theme : 'default');
  27. $indentUnit = (isset($indentUnit) ? $indentUnit : 4);
  28. $tabSize = (isset($tabSize) ? $tabSize : 4);
  29. $lineWrapping = (isset($lineWrapping) ? $lineWrapping : false);
  30. /*
  31. * This plugin is only valid in "text" mode. So check for the current Editor
  32. */
  33. $prte = (isset($_POST['which_editor']) ? $_POST['which_editor'] : '');
  34. $srte = ($modx->config['use_editor'] ? $modx->config['which_editor'] : 'none');
  35. $xrte = $content['richtext'];
  36. switch($modx->Event->name) {
  37. case 'OnTempFormRender' :
  38. $object_name = $content['templatename'];
  39. case 'OnChunkFormRender' :
  40. $rte = ($prte ? $prte : 'none');
  41. break;
  42. case 'OnDocFormRender' :
  43. $textarea_name = 'ta';
  44. $object_name = $content['pagetitle'];
  45. $xrte = (('htmlmixed' == $mode) ? $xrte : 0);
  46. $rte = ($prte ? $prte : ($content['id'] ? ($xrte ? $srte : 'none') : $srte));
  47. break;
  48. case 'OnSnipFormRender' :
  49. case 'OnPluginFormRender' :
  50. case 'OnModFormRender' :
  51. $mode = 'application/x-httpd-php-open';
  52. $rte = ($prte ? $prte : 'none');
  53. break;
  54. case 'OnManagerPageRender':
  55. if ((31 == $action) && (('view' == $_REQUEST['mode']) || ('edit' == $_REQUEST['mode']))) {
  56. $textarea_name = 'content';
  57. $rte = 'none';
  58. }
  59. break;
  60. default:
  61. $this->logEvent(1, 2, 'Undefined event : <b>'.$modx->Event->name.'</b> in <b>'.$this->Event->activePlugin.'</b> Plugin', 'CodeMirror Plugin : '.$modx->Event->name);
  62. }
  63. // object identifier for cursor position save in cookie
  64. $object_id = md5($obect_type.'-'.$object_name);
  65. if (('none' == $rte) && $mode) {
  66. $output = '';
  67. if ($theme != 'default') {
  68. $output .= <<< HEREDOC
  69. <link rel="stylesheet" href="{$_CM_URL}cm/theme/{$theme}.css">
  70. HEREDOC;
  71. }
  72. $output .= <<< HEREDOC
  73. <script src="{$_CM_URL}cm/lib/codemirror.js"></script>
  74. <link rel="stylesheet" href="{$_CM_URL}cm/lib/codemirror.css">
  75. <script src="{$_CM_URL}cm/mode/xml/xml.js"></script>
  76. <script src="{$_CM_URL}cm/mode/javascript/javascript.js"></script>
  77. <script src="{$_CM_URL}cm/mode/css/css.js"></script>
  78. <script src="{$_CM_URL}cm/mode/clike/clike.js"></script>
  79. <script src="{$_CM_URL}cm/mode/htmlmixed/htmlmixed.js"></script>
  80. <script src="{$_CM_URL}cm/mode/php/php.js"></script>
  81. <link rel="stylesheet" href="{$_CM_URL}codemirror.plugin.css">
  82. <script src="{$_CM_URL}codemirror.plugin.js"></script>
  83. <script type="text/javascript">
  84. /*
  85. * Custom event handler
  86. */
  87. var myEventHandler = function(instance, event) {
  88. // CTRL + S
  89. if(event.ctrlKey == true && event.keyCode == 83) {
  90. try {
  91. if(document.getElementById('Button1')) {
  92. document.getElementById('Button1').getElementsByTagName('a')[0].onclick();
  93. }
  94. }
  95. catch(event) {}
  96. return event.stop();
  97. }
  98. // CTRL + E
  99. if(event.ctrlKey == true && event.keyCode == 69) {
  100. try {
  101. if(document.getElementById('Button1')) {
  102. document.getElementById('Button1').getElementsByTagName('select')[0].options[1].selected = true;
  103. document.getElementById('Button1').getElementsByTagName('a')[0].onclick();
  104. }
  105. }
  106. catch(event) {}
  107. return event.stop();
  108. }
  109. }
  110. /*
  111. * Save of cursor position
  112. */
  113. /*
  114. var positionHolder = function() {
  115. if(myCodeMirror) {
  116. myCodeMirror.setLineClass(hlLine, null);
  117. hlLine = myCodeMirror.setLineClass(myCodeMirror.getCursor().line, "activeline");
  118. position = myCodeMirror.getCursor(false).line +'|'+ myCodeMirror.getCursor(false).ch;
  119. setCookie('{$object_id}', position);
  120. }
  121. }
  122. */
  123. /*
  124. * Main CodeMirror initialization
  125. */
  126. var config = {
  127. mode: '{$mode}',
  128. theme: '{$theme}',
  129. indentUnit: {$indentUnit},
  130. tabSize: '{$tabSize}',
  131. lineNumbers: true,
  132. matchBrackets: true,
  133. onKeyEvent: myEventHandler,
  134. lineWrapping: '{$lineWrapping}',
  135. // onCursorActivity: positionHolder
  136. };
  137. var myCodeMirror = [];
  138. var myTextArea = document.getElementsByName('$textarea_name')[0];
  139. myCodeMirror.push(CodeMirror.fromTextArea(myTextArea, config));
  140. if (document.getElementById('tv_body') !== null) {
  141. var tv_textareas = $$('#tv_body textarea');
  142. if (tv_textareas.length != 0) {
  143. tv_textareas.each(function(el,t){
  144. myCodeMirror.push(CodeMirror.fromTextArea(el, config));
  145. });
  146. }
  147. }
  148. // check if tab was changed and then refresh codemirror instances
  149. $$('.tab-row .tab').addEvents({
  150. click: function() {
  151. myCodeMirror.each(function(el) {
  152. el.refresh();
  153. });
  154. }
  155. });
  156. // var hlLine = myCodeMirror.setLineClass(0, "activeline");
  157. /*
  158. * Restore of cursor position
  159. */
  160. /*
  161. pos = getCookie('{$object_id}');
  162. if(pos) {
  163. pos = pos.split('|');
  164. myCodeMirror.setCursor(pos[0] , pos[1]);
  165. }
  166. */
  167. </script>
  168. HEREDOC;
  169. $modx->Event->output($output);
  170. }