XOOPS RMCommon Utilities  2.1.8.91RC
 All Classes Namespaces Files Functions Variables
editor_plugin.php
Go to the documentation of this file.
1 <?php
2 // $Id: editor_plugin.php 1015 2012-08-23 05:36:42Z i.bitcero $
6 include_once '../../../../../../../mainfile.php';
7 require_once XOOPS_ROOT_PATH.'/modules/rmcommon/loader.php';
8 global $xoopsLogger;
9 $xoopsLogger->activated = false;
10 ?>
14 (function() {
15  var DOM = tinymce.DOM;
16 
17  tinymce.PluginManager.requireLangPack('exmsystem');
18 
19  tinymce.create('tinymce.plugins.EXMSystem', {
20 
21  <?php RMEvents::get()->run_event('rmcommon.tiny.plugin.controls'); ?>
22 
23  init : function(ed, url){
24  var t = this;
25  var tbId1 = ed.getParam('exmsystem_adv_toolbar1','toolbar2');
26  var tbId2 = ed.getParam('exmsystem_adv_toolbar2','toolbar3');
27  var tbId3 = ed.getParam('exmsystem_adv_toolbar3','toolbar4');
28  var moreHTML = '<img src="' + url + '/img/trans.gif" class="mceEXMmore mceItemNoResize" title="'+ed.getLang('exmsystem.exm_more_alt')+'" />';
29  var nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceEXMnextpage mceItemNoResize" title="'+ed.getLang('exmsystem.exm_page_alt')+'" />';
30 
31  /*if ( getUserSetting('hidetb', '0') == '1' )
32  ed.settings.exmsystem_adv_hidden = 0;*/
33 
34  // Hides the specified toolbar and resizes the iframe
35  ed.onPostRender.add(function() {
36  if ( ed.getParam('exmsystem_adv_hidden', 1) ) {
37  DOM.hide(ed.controlManager.get(tbId1).id);
38  if(ed.controlManager.get(tbId2)!=undefined)
39  DOM.hide(ed.controlManager.get(tbId2).id);
40  if(ed.controlManager.get(tbId3)!=undefined)
41  DOM.hide(ed.controlManager.get(tbId3).id);
42 
43  t._resizeIframe(ed, tbId1, 28);
44  t._resizeIframe(ed, tbId2, 28);
45  t._resizeIframe(ed, tbId3, 28);
46  }
47  });
48 
49  // Register commands
50  ed.addCommand('EXM_More', function() {
51  ed.execCommand('mceInsertContent', 0, moreHTML);
52  });
53  // Page
54  ed.addCommand('EXM_Page', function() {
55  ed.execCommand('mceInsertContent', 0, nextpageHTML);
56  });
57  // Advanced Toolbar
58  ed.addCommand('EXM_Adv', function() {
59  var cm = ed.controlManager;
60 
61  if (DOM.isHidden(ed.controlManager.get(tbId1).id)) {
62  cm.setActive('exm_adv', 1);
63  DOM.show(ed.controlManager.get(tbId1).id);
64  if(ed.controlManager.get(tbId2)!=undefined)
65  DOM.show(ed.controlManager.get(tbId2).id);
66  if(ed.controlManager.get(tbId3)!=undefined);
67  DOM.show(ed.controlManager.get(tbId3).id);
68  t._resizeIframe(ed, tbId, -28);
69  ed.settings.exmsystem_adv_hidden = 0;
70  } else {
71  cm.setActive('exm_adv', 0);
72  DOM.hide(ed.controlManager.get(tbId1).id);
73  if(ed.controlManager.get(tbId2)!=undefined)
74  DOM.hide(ed.controlManager.get(tbId2).id);
75  if(ed.controlManager.get(tbId3)!=undefined);
76  DOM.hide(ed.controlManager.get(tbId3).id);
77 
78  t._resizeIframe(ed, tbId1, 28);
79  t._resizeIframe(ed, tbId2, 28);
80  t._resizeIframe(ed, tbId3, 28);
81  ed.settings.exmsystem_adv_hidden = 1;
82  }
83  });
84 
85  // EXM Image Manager
86  ed.addCommand('mceEXMImg', function() {
87  ed.windowManager.open({
88  file : '<?php echo RMCURL; ?>/include/tiny-images.php',
89  width : 600 + parseInt(ed.getLang('exmsystem.delta_width', 0)),
90  height : 600 + parseInt(ed.getLang('exmsystem.delta_height', 0)),
91  inline : 1,
92  title: '<?php _e('Insert Image','rmcommon'); ?>',
93  maximizable: 'true'
94  }, {
95  plugin_url : url
96  });
97  });
98 
99  // EXM Icons plugin
100  // Register commands
101  ed.addCommand('mceExmIcons', function() {
102  ed.windowManager.open({
103  file : '<?php echo RMCURL; ?>/include/emotions.php',
104  width : 300 + parseInt(ed.getLang('exmsystem.delta_width', 0)),
105  height : 250 + parseInt(ed.getLang('exmsystem.delta_height', 0)),
106  inline : 1
107  }, {
108  plugin_url : url
109  });
110  });
111 
112  // Register buttons
113  ed.addButton('exm_more', {
114  title : 'exmsystem.exm_more_desc',
115  image : url + '/img/more.gif',
116  cmd : 'EXM_More'
117  });
118 
119  ed.addButton('exm_page', {
120  title : 'exmsystem.exm_page_desc',
121  image : url + '/img/page.gif',
122  cmd : 'EXM_Page'
123  });
124 
125  ed.addButton('exm_adv', {
126  title : 'exmsystem.exm_adv_desc',
127  image : url + '/img/toolbars.gif',
128  cmd : 'EXM_Adv'
129  });
130 
131  // Image Manager
132  ed.addButton('exm_img', {
133  title : 'exmsystem.exm_img_desc',
134  cmd : 'mceEXMImg',
135  image : url+'/img/exmimg.png'
136  });
137 
138  // Icons plugin
139  // Register buttons
140  ed.addButton('exm_icons', {
141  title : 'exmsystem.exm_icons_desc',
142  cmd : 'mceExmIcons',
143  image : url+'/img/icon.png'
144  });
145 
146  // Add class "alignleft", "alignright" and "aligncenter" when selecting align for images.
147  ed.addCommand('JustifyLeft', function() {
148  var n = ed.selection.getNode();
149 
150  if ( n.nodeName != 'IMG' )
151  ed.editorCommands.mceJustify('JustifyLeft', 'left');
152  else ed.plugins.exmsystem.do_align(n, 'alignleft');
153  });
154 
155  ed.addCommand('JustifyRight', function() {
156  var n = ed.selection.getNode();
157 
158  if ( n.nodeName != 'IMG' )
159  ed.editorCommands.mceJustify('JustifyRight', 'right');
160  else ed.plugins.exmsystem.do_align(n, 'alignright');
161  });
162 
163  ed.addCommand('JustifyCenter', function() {
164  var n = ed.selection.getNode(), P = ed.dom.getParent(n, 'p'), DL = ed.dom.getParent(n, 'dl');
165 
166  if ( n.nodeName == 'IMG' && ( P || DL ) )
167  ed.plugins.exmsystem.do_align(n, 'aligncenter');
168  else ed.editorCommands.mceJustify('JustifyCenter', 'center');
169  });
170 
171  // Add listeners to handle more break
172  t._handleMoreBreak(ed, url);
173 
174  <?php
175  // Incluimos los plugins y datos de otros módulos
176  // para crear botones y comandos en TinyMCE
177  // Los métodos registrados deben retornar código javascript
178  // funcional en el método init de tinymce
179  RMEvents::get()->run_event('rmcommon.tinymce.plugin.loading');
180  ?>
181 
182  },
183 
184 
185  getInfo : function() {
186  return {
187  longname : 'EXMSystem Plugin',
188  author : 'BitC3R0', // add Moxiecode?
189  authorurl : 'http://redmexico.com.mx',
190  infourl : 'http://redmexico.com.mx',
191  version : '3.0'
192  };
193  },
194 
195  // Internal functions
196  do_align : function(n, a) {
197  var P, DL, DIV, cls, c, ed = tinyMCE.activeEditor;
198 
199  if ( /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className) )
200  return;
201 
202  P = ed.dom.getParent(n, 'p');
203  DL = ed.dom.getParent(n, 'dl');
204  DIV = ed.dom.getParent(n, 'div');
205 
206  if ( DL && DIV ) {
207  cls = ed.dom.hasClass(DL, a) ? 'alignnone' : a;
208  DL.className = DL.className.replace(/align[^ '"]+\s?/g, '');
209  ed.dom.addClass(DL, cls);
210  c = (cls == 'aligncenter') ? ed.dom.addClass(DIV, 'mceIEcenter') : ed.dom.removeClass(DIV, 'mceIEcenter');
211  } else if ( P ) {
212  cls = ed.dom.hasClass(n, a) ? 'alignnone' : a;
213  n.className = n.className.replace(/align[^ '"]+\s?/g, '');
214  ed.dom.addClass(n, cls);
215  if ( cls == 'aligncenter' )
216  ed.dom.setStyle(P, 'textAlign', 'center');
217  else if (P.style && P.style.textAlign == 'center')
218  ed.dom.setStyle(P, 'textAlign', '');
219  }
220 
221  ed.execCommand('mceRepaint');
222  },
223 
224  // Resizes the iframe by a relative height value
225  _resizeIframe : function(ed, tb_id, dy) {
226  var ifr = ed.getContentAreaContainer().firstChild;
227 
228  DOM.setStyle(ifr, 'height', ifr.clientHeight + dy); // Resize iframe
229  ed.theme.deltaHeight += dy; // For resize cookie
230  },
231 
232  _handleMoreBreak : function(ed, url) {
233  var moreHTML = '<img src="' + url + '/img/trans.gif" alt="$1" class="mceEXMmore mceItemNoResize" title="'+ed.getLang('exmsystem.exm_more_alt')+'" />';
234  var nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceEXMnextpage mceItemNoResize" title="'+ed.getLang('exmsystem.exm_page_alt')+'" />';
235 
236  // Load plugin specific CSS into editor
237  ed.onInit.add(function() {
238  ed.dom.loadCSS(url + '/css/content.css');
239  });
240 
241  // Display morebreak instead if img in element path
242  ed.onPostRender.add(function() {
243  if (ed.theme.onResolveName) {
244  ed.theme.onResolveName.add(function(th, o) {
245  if (o.node.nodeName == 'IMG') {
246  if ( ed.dom.hasClass(o.node, 'mceEXMmore') )
247  o.name = 'exmmore';
248  if ( ed.dom.hasClass(o.node, 'mceEXMnextpage') )
249  o.name = 'exmpage';
250  }
251 
252  });
253  }
254  });
255 
256  // Replace morebreak with images
257  ed.onBeforeSetContent.add(function(ed, o) {
258  o.content = o.content.replace(/<!--more(.*?)-->/g, moreHTML);
259  o.content = o.content.replace(/<!--nextpage-->/g, nextpageHTML);
260  });
261 
262  // Replace images with morebreak
263  ed.onPostProcess.add(function(ed, o) {
264  if (o.get)
265  o.content = o.content.replace(/<img[^>]+>/g, function(im) {
266  if (im.indexOf('class="mceEXMmore') !== -1) {
267  var m, moretext = (m = im.match(/alt="(.*?)"/)) ? m[1] : '';
268  im = '<!--more'+moretext+'-->';
269  }
270  if (im.indexOf('class="mceEXMnextpage') !== -1)
271  im = '<!--nextpage-->';
272 
273  return im;
274  });
275  });
276 
277  // Set active buttons if user selected pagebreak or more break
278  ed.onNodeChange.add(function(ed, cm, n) {
279  cm.setActive('exm_page', n.nodeName === 'IMG' && ed.dom.hasClass(n, 'mceEXMnextpage'));
280  cm.setActive('exm_more', n.nodeName === 'IMG' && ed.dom.hasClass(n, 'mceEXMmore'));
281  });
282  }
283 
284  });
285 
286  <?php
287  // Evento para registrar nuevas funciones en el plugin exmsystem
288  RMEvents::get()->run_event('rmcommon.tinymce.plugin.functions','');
289  ?>
290 
291  // Register plugin
292  tinymce.PluginManager.add('exmsystem', tinymce.plugins.EXMSystem);
293 
294 })();