| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- /**
- * Ace Source Editor Plugin
- *
- * Events: OnManagerPageBeforeRender, OnRichTextEditorRegister, OnSnipFormPrerender,
- * OnTempFormPrerender, OnChunkFormPrerender, OnPluginFormPrerender,
- * OnFileCreateFormPrerender, OnFileEditFormPrerender, OnDocFormPrerender
- *
- * @author Danil Kostin <danya.postfactum(at)gmail.com>
- *
- * @package ace
- *
- * @var array $scriptProperties
- * @var Ace $ace
- */
- if ($modx->event->name == 'OnRichTextEditorRegister') {
- $modx->event->output('Ace');
- return;
- }
- if ($modx->getOption('which_element_editor', null, 'Ace') !== 'Ace') {
- return;
- }
- $ace = $modx->getService('ace', 'Ace', $modx->getOption('ace.core_path', null, $modx->getOption('core_path').'components/ace/').'model/ace/');
- $ace->initialize();
- $extensionMap = array(
- 'tpl' => 'text/x-smarty',
- 'htm' => 'text/html',
- 'html' => 'text/html',
- 'css' => 'text/css',
- 'scss' => 'text/x-scss',
- 'less' => 'text/x-less',
- 'svg' => 'image/svg+xml',
- 'xml' => 'application/xml',
- 'xsl' => 'application/xml',
- 'js' => 'application/javascript',
- 'json' => 'application/json',
- 'php' => 'application/x-php',
- 'sql' => 'text/x-sql',
- 'md' => 'text/x-markdown',
- 'txt' => 'text/plain',
- 'twig' => 'text/x-twig'
- );
- // Define default mime for html elements(templates, chunks and html resources)
- $html_elements_mime=$modx->getOption('ace.html_elements_mime',null,false);
- if(!$html_elements_mime){
- // this may deprecated in future because components may set ace.html_elements_mime option now
- switch (true) {
- case $modx->getOption('twiggy_class'):
- $html_elements_mime = 'text/x-twig';
- break;
- case $modx->getOption('pdotools_fenom_parser'):
- $html_elements_mime = 'text/x-smarty';
- break;
- default:
- $html_elements_mime = 'text/html';
- }
- }
- // Defines wether we should highlight modx tags
- $modxTags = false;
- switch ($modx->event->name) {
- case 'OnSnipFormPrerender':
- $field = 'modx-snippet-snippet';
- $mimeType = 'application/x-php';
- break;
- case 'OnTempFormPrerender':
- $field = 'modx-template-content';
- $modxTags = true;
- $mimeType = $html_elements_mime;
- break;
- case 'OnChunkFormPrerender':
- $field = 'modx-chunk-snippet';
- if ($modx->controller->chunk && $modx->controller->chunk->isStatic()) {
- $extension = pathinfo($modx->controller->chunk->name, PATHINFO_EXTENSION);
- if(!$extension||!isset($extensionMap[$extension])){
- $extension = pathinfo($modx->controller->chunk->getSourceFile(), PATHINFO_EXTENSION);
- }
- $mimeType = isset($extensionMap[$extension]) ? $extensionMap[$extension] : 'text/plain';
- } else {
- $mimeType = $html_elements_mime;
- }
- $modxTags = true;
- break;
- case 'OnPluginFormPrerender':
- $field = 'modx-plugin-plugincode';
- $mimeType = 'application/x-php';
- break;
- case 'OnFileCreateFormPrerender':
- $field = 'modx-file-content';
- $mimeType = 'text/plain';
- break;
- case 'OnFileEditFormPrerender':
- $field = 'modx-file-content';
- $extension = pathinfo($scriptProperties['file'], PATHINFO_EXTENSION);
- $mimeType = isset($extensionMap[$extension])
- ? $extensionMap[$extension]
- : 'text/plain';
- $modxTags = $extension == 'tpl';
- break;
- case 'OnDocFormPrerender':
- if (!$modx->controller->resourceArray) {
- return;
- }
- $field = 'ta';
- $mimeType = $modx->getObject('modContentType', $modx->controller->resourceArray['content_type'])->get('mime_type');
- if($mimeType == 'text/html')$mimeType = $html_elements_mime;
- if ($modx->getOption('use_editor')){
- $richText = $modx->controller->resourceArray['richtext'];
- $classKey = $modx->controller->resourceArray['class_key'];
- if ($richText || in_array($classKey, array('modStaticResource','modSymLink','modWebLink','modXMLRPCResource'))) {
- $field = false;
- }
- }
- $modxTags = true;
- break;
- default:
- return;
- }
- $modxTags = (int) $modxTags;
- $script = '';
- if ($field) {
- $script .= "MODx.ux.Ace.replaceComponent('$field', '$mimeType', $modxTags);";
- }
- if ($modx->event->name == 'OnDocFormPrerender' && !$modx->getOption('use_editor')) {
- $script .= "MODx.ux.Ace.replaceTextAreas(Ext.query('.modx-richtext'));";
- }
- if ($script) {
- $modx->controller->addHtml('<script>Ext.onReady(function() {' . $script . '});</script>');
- }
|