XOOPS RMCommon Utilities  2.1.8.91RC
 All Classes Namespaces Files Functions Variables
editor-exmcode.php
Go to the documentation of this file.
1 
7 <?php
8  require '../../../../../mainfile.php';
9  XoopsLogger::getInstance()->activated = false;
10  XoopsLogger::getInstance()->renderingEnabled = false;
11  $lang = is_file(ABSPATH.'/api/editors/exmcode/language/'.EXMLANG.'.js') ? EXMLANG : 'en_US';
12  $id = rmc_server_var($_GET, 'id', '');
13 ?>
14 
15 /*
16  * jQuery plugin: fieldSelection - v0.1.0 - last change: 2006-12-16
17  * (c) 2006 Alex Brem <alex@0xab.cd> - http://blog.0xab.cd
18  */
19 (function() {
20 
21  var fieldSelection = {
22 
23  getSelection: function() {
24 
25  var e = this.jquery ? this[0] : this;
26 
27  return (
28 
29  /* mozilla / dom 3.0 */
30  ('selectionStart' in e && function() {
31  var l = e.selectionEnd - e.selectionStart;
32  return { start: e.selectionStart, end: e.selectionEnd, length: l, text: e.value.substr(e.selectionStart, l) };
33  }) ||
34 
35  /* exploder */
36  (document.selection && function() {
37 
38  e.focus();
39 
40  var r = document.selection.createRange();
41  if (r == null) {
42  return { start: 0, end: e.value.length, length: 0 }
43  }
44 
45  var re = e.createTextRange();
46  var rc = re.duplicate();
47  re.moveToBookmark(r.getBookmark());
48  rc.setEndPoint('EndToStart', re);
49 
50  return { start: rc.text.length, end: rc.text.length + r.text.length, length: r.text.length, text: r.text };
51  }) ||
52 
53  /* browser not supported */
54  function() {
55  return { start: 0, end: e.value.length, length: 0 };
56  }
57 
58  )();
59 
60  },
61 
62  replaceSelection: function() {
63 
64  var e = this.jquery ? this[0] : this;
65  var text = arguments[0] || '';
66 
67  return (
68 
69  /* mozilla / dom 3.0 */
70  ('selectionStart' in e && function() {
71  e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length);
72  return this;
73  }) ||
74 
75  /* exploder */
76  (document.selection && function() {
77  e.focus();
78  document.selection.createRange().text = text;
79  return this;
80  }) ||
81 
82  /* browser not supported */
83  function() {
84  e.value += text;
85  return this;
86  }
87 
88  )();
89 
90  }
91 
92  };
93 
94  jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; });
95 
96 })();
97 
98 
99 // Make the editor accesible from any location
100 var editor_path = '';
101 var top_buttons = '';
102 var bottom_buttons = '';
103 
104 var exmCode<?php echo ucfirst($id); ?> = {
105  // Init
106  init: function(path, lang){
107  var x = this;
108  x.url = '<?php echo RMCURL.'/api/editors/exmcode'; ?>';
109  x.editor_path = x.url;
110  x.ed = '<?php echo $id; ?>';
111  x.name = 'exmCode<?php echo ucfirst($id); ?>';
112  // Add plugins
113  <?php
114  // Cargamos los plugins
115  $path = RMCPATH.'/api/editors/exmcode/plugins';
116  $dir = opendir($path);
117  while(FALSE !== ($file = readdir($dir))){
118  if ($file=='.' || $file=='..') continue;
119  if (!is_dir($path.'/'.$file)) continue;
120  if (!is_file($path.'/'.$file.'/plugin.js')) continue;
121 
122  include $path.'/'.$file.'/plugin.js';
123 
124  }
125 
126  // New plugins from other components
127  RMEvents::get()->run_event('rmcommon.load.exmcode.plugins', $id);
128 
129  ?>
130 
131  //x.add_separator('top');
132  x.add_button('bottom', {
133  name : 'bottom',
134  title : 'Show bottom toolbar',
135  alt : 'Bottom toolbar',
136  icon : x.editor_path+'/images/show.png',
137  row : 'top',
138  cmd : function(x){
139  $("#<?php echo $id; ?>-ec-container .row_bottom").slideDown('fast');
140  $("#<?php echo $id; ?>-bottom").hide();
141  },
142  cmd_type : 'auto'
143  });
144  x.add_button('top', {
145  name : 'top',
146  title : 'Hide toolbar',
147  alt : 'Hide toolbar',
148  icon : x.editor_path+'/images/hide.png',
149  row : 'bottom',
150  cmd : function(x){
151  $("#<?php echo $id; ?>-ec-container .row_bottom").slideUp('fast');
152  $("#<?php echo $id; ?>-bottom").show();
153  },
154  cmd_type : 'auto'
155  });
156  //x.add_separator('bottom');
157 
158  var buttons = new Array();
159  buttons = buttons.concat(<?php echo $id; ?>_buttons.split(','));
160  plugs = <?php echo $id; ?>_plugins;
161 
162  for(i=0;i<buttons.length;i++){
163 
164  buttons[i] = buttons[i].replace(/^\s*|\s*$/g,"");
165 
166  if (buttons[i]=='separator_t' || buttons[i]=='separator_b'){
167  x.add_separator(buttons[i]=='separator_t'?'top':'bottom');
168  continue;
169  }
170 
171  if (x.buttons[buttons[i]]==undefined) continue;
172  d = x.buttons[buttons[i]];
173 
174  if (d.plugin!=undefined && plugs[d.plugin]==undefined) continue;
175 
176  var b = '<span class="buttons" id="<?php echo $id; ?>-'+d.name+'" accesskey="'+d.key+'" title="'+d.title+'" onclick="'+x.name+'.button_press(\''+d.name+'\');">';
177  b += "<span>";
178  if (d.icon!=undefined){
179  b += "<img src='"+d.icon+"' alt='' />";
180  }
181  if (d.type=='dropdown'){
182  b += "<span class='dropdown'><img src='"+x.editor_path+"/images/down.png' alt='' /></span>";
183  }
184  b += (d.text!=undefined ? d.text : '')+"</span>";
185  b += "</span>";
186 
187  if (d.row == 'top'){
188  $("#<?php echo $id; ?>-ec-container .row_top").append(b);
189  } else {
190  $("#<?php echo $id; ?>-ec-container .row_bottom").append(b);
191  }
192 
193  }
194 
195  },
196  add_button : function(n,d){
197 
198  var x = this;
199  x.buttons = x.buttons || {};
200  x.buttons[n] = d;
201 
202  },
203  add_separator : function(w){
204  if (w == 'top'){
205  $("#<?php echo $id; ?>-ec-container .row_top").append('<span class="separator"></span>');
206  } else {
207  $("#<?php echo $id; ?>-ec-container .row_bottom").append('<span class="separator"></span>');
208  }
209  },
210  add_plugin : function(n,d){
211  var x = this;
212  if (x[n]!=undefined) return;
213 
214  plugs = <?php echo $id; ?>_plugins;
215  if (plugs[n]==undefined) return;
216 
217  x[n] = d;
218 
219  if (x[n].init!=undefined) x[n].init(x);
220 
221  },
222  button_press : function(n){
223  var x = this;
224  if (x.buttons[n]=='undefined') return;
225 
226  if (x.buttons[n].cmd_type=='auto'){
227  x.buttons[n].cmd(x);
228  return;
229  }
230 
231  plugin = x.buttons[n].plugin;
232  x.command(plugin, x.buttons[n].cmd);
233 
234  },
235  command : function(n, c, p){
236  var x = this;
237 
238  if (x[n]==undefined) return;
239 
240  eval("x."+n+"."+c+"(x,p)");
241  },
242  execute : function(c){
243  x = this;
244  eval('x.'+c);
245  },
246  selection: function(){
247  x = this;
248  return $("#"+x.ed).getSelection();
249  },
250  insertText: function(what){
251  var x = this;
252  var e = document.getElementById(x.ed);
253  var scrollTop = e.scrollTop;
254  selected = $("#"+x.ed).getSelection();
255  if(selected.text==null)
256  selected.text = '';
257 
258  text = what.replace('%replace%', selected.text);
259  $("#"+x.ed).replaceSelection(text, true);
260 
261  var cursorPos = 0;
262  if (selected.text==''){
263  cursorPos = selected.start + what.indexOf("%replace%");
264  } else {
265  cursorPos = selected.start + text.length;
266  }
267 
268  cursorPos = cursorPos<0 || cursorPos<=selected.start ? (selected.start + text.length) : cursorPos;
269 
270  e.selectionEnd = cursorPos;
271  e.scrollTop = scrollTop;
272  $("#"+x.ed).focus();
273 
274  },
275  popup : function(d){
276  x = this;
277  if ($("#"+x.ed+"-ed-container .popup").length<=0){
278  var pop = '<div class="popblocker"></div><div class="popup">';
279  pop += '<div class="titlebar">';
280  pop += '<span class="buttons">';
281  pop += '<span class="close" onclick="'+x.name+'.closePopup()"><span>Close</span></span>';
282  pop += '<span class="maximize" onclick="'+x.name+'.maximize()"><span>Maximize</span></span>';
283  pop += '<span class="restore"><span>Restore</span></span>';
284  pop += '</span>';
285  pop += '<span class="title"></span></div>';
286  pop += '<div class="content"><iframe src=""></iframe></div></div>';
287  $("#"+x.ed+"-ed-container").append(pop);
288  }
289  var pn = "#"+x.ed+"-ed-container .popup";
290  var w = d.width!=undefined?d.width:300;
291  var h = d.height!=undefined?d.height:300;
292  $(pn).css('width', w+'px');
293  $(pn).css('height', h+'px');
294  $(pn).css({
295  top: '50%',
296  left: '50%',
297  'margin-left': '-'+(w/2)+'px',
298  'margin-top': '-'+(h/2)+'px',
299  'position': 'fixed'
300  });
301  $(pn+' .title').html(d.title!=undefined?d.title:'');
302  $(pn+' .content').css('height',(h-39)+'px');
303 
304  if (!d.single){
305  d.url = encodeURIComponent(d.url).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
306  var url = encodeURIComponent(x.url).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
307 
308  var params = '&id='+x.ed+'&name='+x.name+'&eurl='+url+'&lang=<?php echo _LANGCODE; ?>';
309  params += '&theme=<?php echo $rmc_config['theme']; ?>';
310  params += '&version=<?php echo RMCVERSION; ?>';
311 
312  $(pn+' iframe').attr('src', x.url+'/urls.php?url='+d.url+params);
313  } else {
314 
315  var con = d.url.indexOf('?') != -1 ? '&' : '?';
316 
317  $(pn+' iframe').attr('src', d.url+con+'type=exmcode&name='+x.name);
318  }
319  if (d.maximizable!=undefined&&d.maximizable) $(pn+' .maximize').show();
320 
321  $("#"+x.ed+"-ed-container .popblocker").show(10, function(){
322  $(pn).show();
323  });
324 
325  w = $(pn).width();
326  h = $(pn).height();
327 
328  $(pn+' .restore').click(function(){
329  x.restore(w,h);
330  });
331  },
332  closePopup: function(){
333  x = this;
334  var pn = "#"+x.ed+"-ed-container .popup";
335  $(pn+' iframe').attr('src', '');
336  $("#"+x.ed+"-ed-container .popup").hide();
337  $("#"+x.ed+"-ed-container .popblocker").hide();
338  },
339  maximize: function(){
340  x = this;
341  var pn = "#"+x.ed+"-ed-container .popup";
342  $(pn+' .maximize').hide();
343  $(pn+' .restore').show();
344 
345  $(pn).animate({
346  'width': '100%',
347  'height': '100%',
348  'left': 0,
349  'top': 0,
350  'margin': 0
351  }, 500, '', function(){
352  $(pn+' .content').css('height',$(window).height()-39+'px');
353  });
354  $(pn).addClass('maximized');
355 
356  },
357  restore: function(w,h){
358  x = this;
359  var pn = "#"+x.ed+"-ed-container .popup";
360  $(pn+' .maximize').show();
361  $(pn+' .restore').hide();
362 
363  $(pn).animate({
364  'width': w+'px',
365  'height': h+'px',
366  'left': '50%',
367  'top': '50%',
368  }, 500, '', function(){
369  $(pn+' .content').css('height',(h-39)+'px');
370  $(pn).css({'margin-left': '-'+(w/2)+'px',
371  'margin-top': '-'+(h/2)+'px', 'display':'fixed'});
372  });
373  $(pn).removeClass('maximized');
374  }
375 };
376 
377 $(document).ready(function(){
378  exmCode<?php echo ucfirst($id); ?>.init();
379  //exmCode.make_buttons('<?php echo rmc_server_var($_GET, 'id'); ?>');
380  $("#<?php echo rmc_server_var($_GET, 'id'); ?>").css('width', ($("#<?php echo rmc_server_var($_GET, 'id'); ?>-ec-container").width()-6)+'px');
381 });