tinymce.panel.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. Tiny.Editor = function(config) {
  2. config = config || {};
  3. config.tinyConfig = config.tinyConfig || Tiny.config;
  4. config.tinyConfig = config.tinyConfig || {};
  5. Ext.applyIf(config.tinyConfig,{
  6. setup: (function(ed) {
  7. ed.onInit.add(this.onLoad);
  8. ed.onKeyUp.add(this.onChange);
  9. }).createDelegate(this)
  10. ,apply_source_formatting: true
  11. ,browserUrl: MODx.config.manager_url+'?a='+MODx.action['browser']
  12. ,button_tile_map: false
  13. ,cleanup: true
  14. ,compressor: ''
  15. ,convert_fonts_to_spans: true
  16. ,convert_newlines_to_brs: false
  17. ,element_format: 'xhtml'
  18. ,element_list: ''
  19. ,entities: ''
  20. ,entity_encoding: 'named'
  21. ,file_browser_callback: 'Tiny.loadBrowser'
  22. ,formats: 'p,h1,h2,h3,h4,h5,h6,div,blockquote,code,pre,address'
  23. ,frontend: false
  24. ,height: '400px'
  25. ,invalid_elements: ''
  26. ,language: MODx.config['manager_language']
  27. ,mode: 'none'
  28. ,nowrap: false
  29. ,path: Tiny.config.assets_path
  30. ,path_options: ''
  31. ,plugin_insertdate_dateFormat: '%Y-%m-%d'
  32. ,plugin_insertdate_timeFormat: '%H:%M:%S'
  33. ,relative_urls: true
  34. ,remove_line_breaks: false
  35. ,resource_browser_path: Tiny.config.manager_url+'controllers/browser/index.php?'
  36. ,width: '90%'
  37. ,buttons1: MODx.config['tiny.custom_buttons1']
  38. ,buttons2: MODx.config['tiny.custom_buttons2']
  39. ,buttons3: MODx.config['tiny.custom_buttons3']
  40. ,buttons4: MODx.config['tiny.custom_buttons4']
  41. ,css_path: MODx.config['editor_css_path'] || ''
  42. ,css_selectors: MODx.config['tinymce.css_selectors']
  43. ,plugins: MODx.config['tiny.custom_plugins']
  44. ,theme: MODx.config['tiny.editor_theme'] || 'advanced'
  45. ,theme_advanced_buttons1: MODx.config['tiny.custom_buttons1']
  46. ,theme_advanced_buttons2: MODx.config['tiny.custom_buttons2']
  47. ,theme_advanced_buttons3: MODx.config['tiny.custom_buttons3']
  48. ,theme_advanced_buttons4: MODx.config['tiny.custom_buttons4']
  49. ,theme_advanced_blockformats: MODx.config['tiny.blockformats']
  50. ,theme_advanced_resizing: false
  51. ,theme_advanced_resize_horizontal: false
  52. ,theme_advanced_statusbar_location: 'bottom'
  53. ,theme_advanced_toolbar_align: 'left'
  54. ,theme_advanced_disable: ''
  55. ,theme_advanced_toolbar_location: 'top'
  56. ,toolbar_align: MODx.config['manager_direction'] || 'rtl'
  57. ,use_browser: MODx.config['use_browser'] || true
  58. ,skin: MODx.config['tiny.skin']
  59. ,skin_variant: MODx.config['tiny.skin_variant']
  60. ,object_resizing: MODx.config['tiny.object_resizing'] || true
  61. ,table_inline_editing: MODx.config['tiny.table_inline_editing'] || true
  62. ,template_selected_content_classes: MODx.config['tiny.template_selected_content_classes']
  63. });
  64. Ext.applyIf(config,{
  65. width: '90%'
  66. });
  67. Tiny.Editor.superclass.constructor.call(this,config);
  68. this.config = config;
  69. this.addEvents({
  70. 'load': true
  71. ,'ajaxload': true
  72. });
  73. this.on('render',this.onTinyRender,this);
  74. this.on('ajaxload',this.onAjaxLoad,this);
  75. };
  76. Ext.extend(Tiny.Editor,Ext.form.TextArea,{
  77. editor: null
  78. ,getTinyId: function() {
  79. return this.getEl().dom.id;
  80. }
  81. ,setValue: function(v) {
  82. var c = tinyMCE.get(this.getTinyId());
  83. if (c) c.setContent(v);
  84. }
  85. ,onTinyRender: function() {
  86. var oid = Ext.get(this.getTinyId());
  87. if (!oid) return;
  88. var s = this.config.tinyConfig;
  89. s.mode = 'exact';
  90. tinyMCE.init(s);
  91. tinyMCE.execCommand('mceAddControl', false,this.getTinyId());
  92. this.fireEvent('load');
  93. }
  94. ,onChange: function() {}
  95. ,onLoad: function(ed) {
  96. return false;
  97. var el = Ext.get(ed.id+'_ifr');
  98. new MODx.load({
  99. xtype: 'modx-treedrop'
  100. ,target: el
  101. ,targetEl: el.dom
  102. ,iframe: true
  103. ,iframeEl: 'tinymce'
  104. ,onInsert: function(v) {
  105. tinyMCE.execCommand('mceInsertContent',false,v);
  106. }
  107. });
  108. }
  109. ,onAjaxLoad: function() {
  110. var els = Ext.query('.modx-richtext');
  111. Ext.each(els,function(el,i) {
  112. el = Ext.get(el);
  113. tinyMCE.execCommand('mceAddControl', false, el.dom.id);
  114. },this);
  115. this.fireEvent('ajaxload');
  116. }
  117. ,toggle: function(e,t) {
  118. t = t.id.replace(/-toggle/,'');
  119. ed = tinyMCE.get(t);
  120. if (ed) {
  121. ed.isHidden() ? ed.show() : ed.hide();
  122. }
  123. }
  124. ,loadBrowser: function(fld, url, type, win) {
  125. tinyMCE.activeEditor.windowManager.open({
  126. file: this.config.browserUrl || Tiny.config.browserUrl
  127. ,width: screen.width * 0.7
  128. ,height: screen.height * 0.7
  129. ,resizable: 'yes'
  130. ,inline: 'yes'
  131. ,close_previous: 'no'
  132. },{
  133. window: win
  134. ,input: fld
  135. });
  136. return false;
  137. }
  138. });
  139. Ext.reg('tinymce',Tiny.Editor);