BxBaseEditorTinyMCE.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
  4. * CC-BY License - http://creativecommons.org/licenses/by/3.0/
  5. *
  6. * @defgroup DolphinCore Dolphin Core
  7. * @{
  8. */
  9. bx_import('BxDolEditor');
  10. /**
  11. * TinyMCE editor representation.
  12. * @see BxDolEditor
  13. */
  14. class BxBaseEditorTinyMCE extends BxDolEditor
  15. {
  16. /**
  17. * Common initialization params
  18. */
  19. protected static $CONF_COMMON = "
  20. jQuery('{bx_var_selector}').tinymce({
  21. {bx_var_custom_init}
  22. document_base_url: '{bx_url_root}',
  23. skin: '{bx_var_skin}',
  24. language: '{bx_var_lang}',
  25. content_css: '{bx_var_css_path}',
  26. entity_encoding: 'raw'
  27. });
  28. ";
  29. /**
  30. * Standard view initialization params
  31. */
  32. protected static $CONF_STANDARD = "
  33. plugins: 'autolink,autosave,lists,media,paste,fullscreen,hr,link,image,code',
  34. width: '100%',
  35. height: '270',
  36. theme: 'modern',
  37. toolbar: 'bold italic underline removeformat | bullist numlist | alignleft aligncenter alignright | undo redo pastetext | blockquote hr link unlink image media | fullscreen code',
  38. statusbar: true,
  39. resize: true,
  40. ";
  41. /**
  42. * Minimal view initialization params
  43. */
  44. protected static $CONF_MINI = "
  45. menubar: false,
  46. plugins: 'autolink,lists,paste,link,image',
  47. width: '100%',
  48. height: '150',
  49. theme: 'modern',
  50. toolbar: 'bold italic underline removeformat | bullist numlist | alignleft aligncenter alignright | blockquote | link unlink image',
  51. statusbar: false,
  52. ";
  53. /**
  54. * Full view initialization params
  55. */
  56. protected static $CONF_FULL = "
  57. plugins: 'autolink,autosave,lists,table,media,searchreplace,print,paste,fullscreen,hr,link,image,anchor,code,autoresize',
  58. width: '100%',
  59. height: '320',
  60. theme: 'modern',
  61. toolbar: [
  62. 'bold italic underline removeformat | subscript superscript | bullist numlist | alignleft aligncenter alignright alignjustify | undo redo pastetext | blockquote hr link unlink image media',
  63. 'outdent indent | anchor | searchreplace | print | fullscreen code'
  64. ],
  65. statusbar: true,
  66. resize: true,
  67. ";
  68. /**
  69. * Available editor languages
  70. */
  71. protected static $CONF_LANGS = array('ar' => 1, 'ar_SA' => 1, 'az' => 1, 'be' => 1, 'bg_BG' => 1, 'bn_BD' => 1, 'bs' => 1, 'ca' => 1, 'cs' => 1, 'cy' => 1, 'da' => 1, 'de' => 1, 'de_AT' => 1, 'dv' => 1, 'el' => 1, 'en_CA' => 1, 'en_GB' => 1, 'es' => 1, 'et' => 1, 'eu' => 1, 'fa' => 1, 'fi' => 1, 'fo' => 1, 'fr_FR' => 1, 'gd' => 1, 'gl' => 1, 'he_IL' => 1, 'hr' => 1, 'hu_HU' => 1, 'hy' => 1, 'id' => 1, 'is_IS' => 1, 'it' => 1, 'ja' => 1, 'ka_GE' => 1, 'kk' => 1, 'km_KH' => 1, 'ko_KR' => 1, 'lb' => 1, 'lt' => 1, 'lv' => 1, 'ml' => 1, 'ml_IN' => 1, 'mn_MN' => 1, 'nb_NO' => 1, 'nl' => 1, 'pl' => 1, 'pt_BR' => 1, 'pt_PT' => 1, 'ro' => 1, 'ru' => 1, 'si_LK' => 1, 'sk' => 1, 'sl_SI' => 1, 'sr' => 1, 'sv_SE' => 1, 'ta' => 1, 'ta_IN' => 1, 'tg' => 1, 'th_TH' => 1, 'tr_TR' => 1, 'tt' => 1, 'ug' => 1, 'uk' => 1, 'uk_UA' => 1, 'vi' => 1, 'vi_VN' => 1, 'zh_CN' => 1, 'zh_TW' => 1);
  72. protected $_oTemplate;
  73. protected $_bJsCssAdded = false;
  74. public function __construct ($aObject, $oTemplate)
  75. {
  76. parent::__construct ($aObject);
  77. if ($oTemplate)
  78. $this->_oTemplate = $oTemplate;
  79. else
  80. $this->_oTemplate = BxDolTemplate::getInstance();
  81. }
  82. /**
  83. * Attach editor to HTML element, in most cases - textarea.
  84. * @param $sSelector - jQuery selector to attach editor to.
  85. * @param $iViewMode - editor view mode: BX_EDITOR_STANDARD, BX_EDITOR_MINI, BX_EDITOR_FULL
  86. * @param $bDynamicMode - is AJAX mode or not, the HTML with editor area is loaded dynamically.
  87. */
  88. public function attachEditor ($sSelector, $iViewMode = BX_EDITOR_STANDARD, $bDynamicMode = false)
  89. {
  90. // set visual mode
  91. switch ($iViewMode) {
  92. case BX_EDITOR_MINI:
  93. $sToolsItems = self::$CONF_MINI;
  94. break;
  95. case BX_EDITOR_FULL:
  96. $sToolsItems = self::$CONF_FULL;
  97. break;
  98. case BX_EDITOR_STANDARD:
  99. default:
  100. $sToolsItems = self::$CONF_STANDARD;
  101. }
  102. // detect language
  103. bx_import('BxDolLanguages');
  104. $sLang = BxDolLanguages::getInstance()->detectLanguageFromArray (self::$CONF_LANGS);
  105. // initialize editor
  106. $sInitEditor = $this->_replaceMarkers(self::$CONF_COMMON, array(
  107. 'bx_var_custom_init' => $sToolsItems,
  108. 'bx_var_plugins_path' => bx_js_string(BX_DOL_URL_PLUGINS, BX_ESCAPE_STR_APOS),
  109. 'bx_var_css_path' => bx_js_string($this->_oTemplate->getCssUrl('editor.css'), BX_ESCAPE_STR_APOS),
  110. 'bx_var_skin' => bx_js_string($this->_aObject['skin'], BX_ESCAPE_STR_APOS),
  111. 'bx_var_lang' => bx_js_string($sLang, BX_ESCAPE_STR_APOS),
  112. 'bx_var_selector' => bx_js_string($sSelector, BX_ESCAPE_STR_APOS),
  113. 'bx_url_root' => bx_js_string(BX_DOL_URL_ROOT, BX_ESCAPE_STR_APOS),
  114. ));
  115. if ($bDynamicMode) {
  116. $sScript = "<script>
  117. if ('undefined' == typeof(jQuery(document).tinymce)) {
  118. $.getScript('" . bx_js_string(BX_DOL_URL_BASE . 'inc/js/editor.tinymce.js', BX_ESCAPE_STR_APOS) . "');
  119. $.getScript('" . bx_js_string(BX_DOL_URL_BASE . 'inc/js/tinymce.js', BX_ESCAPE_STR_APOS) . "', function(data, textStatus, jqxhr) {
  120. $.getScript('" . bx_js_string(BX_DOL_URL_PLUGINS . 'tinymce/jquery.tinymce.min.js', BX_ESCAPE_STR_APOS) . "', function(data, textStatus, jqxhr) {
  121. $sInitEditor
  122. });
  123. });
  124. } else {
  125. $sInitEditor
  126. }
  127. </script>";
  128. } else {
  129. $sScript = "
  130. <script>
  131. $(document).ready(function () {
  132. $sInitEditor
  133. });
  134. </script>";
  135. }
  136. return $this->_addJsCss($bDynamicMode) . $sScript;
  137. }
  138. /**
  139. * Add css/js files which are needed for editor display and functionality.
  140. */
  141. protected function _addJsCss($bDynamicMode = false, $sInitEditor = '')
  142. {
  143. if ($bDynamicMode)
  144. return '';
  145. if ($this->_bJsCssAdded)
  146. return '';
  147. $this->_oTemplate->addJs(array(BX_DOL_URL_PLUGINS . 'tinymce/tinymce.min.js', BX_DOL_URL_PLUGINS . 'tinymce/jquery.tinymce.min.js', 'editor.tinymce.js'));
  148. $this->_bJsCssAdded = true;
  149. return '';
  150. }
  151. }
  152. /** @} */