| [ Index ] |
PHP Cross Reference of Wordpress 2.9.1 |
[Summary view] [Print] [Text view]
1 /** 2 * WordPress plugin. 3 */ 4 5 (function() { 6 var DOM = tinymce.DOM; 7 8 tinymce.create('tinymce.plugins.WordPress', { 9 mceTout : 0, 10 11 init : function(ed, url) { 12 var t = this, tbId = ed.getParam('wordpress_adv_toolbar', 'toolbar2'), last = 0, moreHTML, nextpageHTML; 13 moreHTML = '<img src="' + url + '/img/trans.gif" class="mceWPmore mceItemNoResize" title="'+ed.getLang('wordpress.wp_more_alt')+'" />'; 14 nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+ed.getLang('wordpress.wp_page_alt')+'" />'; 15 16 if ( getUserSetting('hidetb', '0') == '1' ) 17 ed.settings.wordpress_adv_hidden = 0; 18 19 // Hides the specified toolbar and resizes the iframe 20 ed.onPostRender.add(function() { 21 var adv_toolbar = ed.controlManager.get(tbId); 22 if ( ed.getParam('wordpress_adv_hidden', 1) && adv_toolbar ) { 23 DOM.hide(adv_toolbar.id); 24 t._resizeIframe(ed, tbId, 28); 25 } 26 }); 27 28 // Register commands 29 ed.addCommand('WP_More', function() { 30 ed.execCommand('mceInsertContent', 0, moreHTML); 31 }); 32 33 ed.addCommand('WP_Page', function() { 34 ed.execCommand('mceInsertContent', 0, nextpageHTML); 35 }); 36 37 ed.addCommand('WP_Help', function() { 38 ed.windowManager.open({ 39 url : tinymce.baseURL + '/wp-mce-help.php', 40 width : 450, 41 height : 420, 42 inline : 1 43 }); 44 }); 45 46 ed.addCommand('WP_Adv', function() { 47 var cm = ed.controlManager, id = cm.get(tbId).id; 48 49 if ( 'undefined' == id ) 50 return; 51 52 if ( DOM.isHidden(id) ) { 53 cm.setActive('wp_adv', 1); 54 DOM.show(id); 55 t._resizeIframe(ed, tbId, -28); 56 ed.settings.wordpress_adv_hidden = 0; 57 setUserSetting('hidetb', '1'); 58 } else { 59 cm.setActive('wp_adv', 0); 60 DOM.hide(id); 61 t._resizeIframe(ed, tbId, 28); 62 ed.settings.wordpress_adv_hidden = 1; 63 setUserSetting('hidetb', '0'); 64 } 65 }); 66 67 // Register buttons 68 ed.addButton('wp_more', { 69 title : 'wordpress.wp_more_desc', 70 image : url + '/img/more.gif', 71 cmd : 'WP_More' 72 }); 73 74 ed.addButton('wp_page', { 75 title : 'wordpress.wp_page_desc', 76 image : url + '/img/page.gif', 77 cmd : 'WP_Page' 78 }); 79 80 ed.addButton('wp_help', { 81 title : 'wordpress.wp_help_desc', 82 image : url + '/img/help.gif', 83 cmd : 'WP_Help' 84 }); 85 86 ed.addButton('wp_adv', { 87 title : 'wordpress.wp_adv_desc', 88 image : url + '/img/toolbars.gif', 89 cmd : 'WP_Adv' 90 }); 91 92 // Add Media buttons 93 ed.addButton('add_media', { 94 title : 'wordpress.add_media', 95 image : url + '/img/media.gif', 96 onclick : function() { 97 tb_show('', tinymce.DOM.get('add_media').href); 98 tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' ); 99 } 100 }); 101 102 ed.addButton('add_image', { 103 title : 'wordpress.add_image', 104 image : url + '/img/image.gif', 105 onclick : function() { 106 tb_show('', tinymce.DOM.get('add_image').href); 107 tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' ); 108 } 109 }); 110 111 ed.addButton('add_video', { 112 title : 'wordpress.add_video', 113 image : url + '/img/video.gif', 114 onclick : function() { 115 tb_show('', tinymce.DOM.get('add_video').href); 116 tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' ); 117 } 118 }); 119 120 ed.addButton('add_audio', { 121 title : 'wordpress.add_audio', 122 image : url + '/img/audio.gif', 123 onclick : function() { 124 tb_show('', tinymce.DOM.get('add_audio').href); 125 tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' ); 126 } 127 }); 128 129 // Add Media buttons to fullscreen 130 ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) { 131 var DOM = tinymce.DOM; 132 if ( 'mceFullScreen' != cmd ) return; 133 if ( 'mce_fullscreen' != ed.id && DOM.get('add_audio') && DOM.get('add_video') && DOM.get('add_image') && DOM.get('add_media') ) 134 ed.settings.theme_advanced_buttons1 += ',|,add_image,add_video,add_audio,add_media'; 135 }); 136 137 // Add class "alignleft", "alignright" and "aligncenter" when selecting align for images. 138 ed.addCommand('JustifyLeft', function() { 139 var n = ed.selection.getNode(); 140 141 if ( n.nodeName != 'IMG' ) 142 ed.editorCommands.mceJustify('JustifyLeft', 'left'); 143 else ed.plugins.wordpress.do_align(n, 'alignleft'); 144 }); 145 146 ed.addCommand('JustifyRight', function() { 147 var n = ed.selection.getNode(); 148 149 if ( n.nodeName != 'IMG' ) 150 ed.editorCommands.mceJustify('JustifyRight', 'right'); 151 else ed.plugins.wordpress.do_align(n, 'alignright'); 152 }); 153 154 ed.addCommand('JustifyCenter', function() { 155 var n = ed.selection.getNode(), P = ed.dom.getParent(n, 'p'), DL = ed.dom.getParent(n, 'dl'); 156 157 if ( n.nodeName == 'IMG' && ( P || DL ) ) 158 ed.plugins.wordpress.do_align(n, 'aligncenter'); 159 else ed.editorCommands.mceJustify('JustifyCenter', 'center'); 160 }); 161 162 // Word count if script is loaded 163 if ( 'undefined' != typeof wpWordCount ) { 164 ed.onKeyUp.add(function(ed, e) { 165 if ( e.keyCode == last ) return; 166 if ( 13 == e.keyCode || 8 == last || 46 == last ) wpWordCount.wc( ed.getContent({format : 'raw'}) ); 167 last = e.keyCode; 168 }); 169 }; 170 171 ed.onSaveContent.add(function(ed, o) { 172 if ( typeof(switchEditors) == 'object' ) { 173 if ( ed.isHidden() ) 174 o.content = o.element.value; 175 else 176 o.content = switchEditors.pre_wpautop(o.content); 177 } 178 }); 179 180 /* disable for now 181 ed.onBeforeSetContent.add(function(ed, o) { 182 o.content = t._setEmbed(o.content); 183 }); 184 185 ed.onPostProcess.add(function(ed, o) { 186 if ( o.get ) 187 o.content = t._getEmbed(o.content); 188 }); 189 */ 190 191 // Add listeners to handle more break 192 t._handleMoreBreak(ed, url); 193 194 // Add custom shortcuts 195 ed.addShortcut('alt+shift+c', ed.getLang('justifycenter_desc'), 'JustifyCenter'); 196 ed.addShortcut('alt+shift+r', ed.getLang('justifyright_desc'), 'JustifyRight'); 197 ed.addShortcut('alt+shift+l', ed.getLang('justifyleft_desc'), 'JustifyLeft'); 198 ed.addShortcut('alt+shift+j', ed.getLang('justifyfull_desc'), 'JustifyFull'); 199 ed.addShortcut('alt+shift+q', ed.getLang('blockquote_desc'), 'mceBlockQuote'); 200 ed.addShortcut('alt+shift+u', ed.getLang('bullist_desc'), 'InsertUnorderedList'); 201 ed.addShortcut('alt+shift+o', ed.getLang('numlist_desc'), 'InsertOrderedList'); 202 ed.addShortcut('alt+shift+d', ed.getLang('striketrough_desc'), 'Strikethrough'); 203 ed.addShortcut('alt+shift+n', ed.getLang('spellchecker.desc'), 'mceSpellCheck'); 204 ed.addShortcut('alt+shift+a', ed.getLang('link_desc'), 'mceLink'); 205 ed.addShortcut('alt+shift+s', ed.getLang('unlink_desc'), 'unlink'); 206 ed.addShortcut('alt+shift+m', ed.getLang('image_desc'), 'mceImage'); 207 ed.addShortcut('alt+shift+g', ed.getLang('fullscreen.desc'), 'mceFullScreen'); 208 ed.addShortcut('alt+shift+z', ed.getLang('wp_adv_desc'), 'WP_Adv'); 209 ed.addShortcut('alt+shift+h', ed.getLang('help_desc'), 'WP_Help'); 210 ed.addShortcut('alt+shift+t', ed.getLang('wp_more_desc'), 'WP_More'); 211 ed.addShortcut('alt+shift+p', ed.getLang('wp_page_desc'), 'WP_Page'); 212 ed.addShortcut('ctrl+s', ed.getLang('save_desc'), function(){if('function'==typeof autosave)autosave();}); 213 214 if ( tinymce.isWebKit ) { 215 ed.addShortcut('alt+shift+b', ed.getLang('bold_desc'), 'Bold'); 216 ed.addShortcut('alt+shift+i', ed.getLang('italic_desc'), 'Italic'); 217 } 218 219 ed.onInit.add(function(ed) { 220 tinymce.dom.Event.add(ed.getWin(), 'scroll', function(e) { 221 ed.plugins.wordpress._hideButtons(); 222 }); 223 tinymce.dom.Event.add(ed.getBody(), 'dragstart', function(e) { 224 ed.plugins.wordpress._hideButtons(); 225 }); 226 }); 227 228 ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) { 229 ed.plugins.wordpress._hideButtons(); 230 }); 231 232 ed.onSaveContent.add(function(ed, o) { 233 ed.plugins.wordpress._hideButtons(); 234 }); 235 236 ed.onMouseDown.add(function(ed, e) { 237 if ( e.target.nodeName != 'IMG' ) 238 ed.plugins.wordpress._hideButtons(); 239 }); 240 }, 241 242 getInfo : function() { 243 return { 244 longname : 'WordPress Plugin', 245 author : 'WordPress', // add Moxiecode? 246 authorurl : 'http://wordpress.org', 247 infourl : 'http://wordpress.org', 248 version : '3.0' 249 }; 250 }, 251 252 // Internal functions 253 _setEmbed : function(c) { 254 return c.replace(/\[embed\]([\s\S]+?)\[\/embed\][\s\u00a0]*/g, function(a,b){ 255 return '<img width="300" height="200" src="' + tinymce.baseURL + '/plugins/wordpress/img/trans.gif" class="wp-oembed mceItemNoResize" alt="'+b+'" title="'+b+'" />'; 256 }); 257 }, 258 259 _getEmbed : function(c) { 260 return c.replace(/<img[^>]+>/g, function(a) { 261 if ( a.indexOf('class="wp-oembed') != -1 ) { 262 var u = a.match(/alt="([^\"]+)"/); 263 if ( u[1] ) 264 a = '[embed]' + u[1] + '[/embed]'; 265 } 266 return a; 267 }); 268 }, 269 270 _showButtons : function(n, id) { 271 var ed = tinyMCE.activeEditor, p1, p2, vp, DOM = tinymce.DOM, X, Y; 272 273 vp = ed.dom.getViewPort(ed.getWin()); 274 p1 = DOM.getPos(ed.getContentAreaContainer()); 275 p2 = ed.dom.getPos(n); 276 277 X = Math.max(p2.x - vp.x, 0) + p1.x; 278 Y = Math.max(p2.y - vp.y, 0) + p1.y; 279 280 DOM.setStyles(id, { 281 'top' : Y+5+'px', 282 'left' : X+5+'px', 283 'display' : 'block' 284 }); 285 286 if ( this.mceTout ) 287 clearTimeout(this.mceTout); 288 289 this.mceTout = setTimeout( function(){ed.plugins.wordpress._hideButtons();}, 5000 ); 290 }, 291 292 _hideButtons : function() { 293 if ( !this.mceTout ) 294 return; 295 296 if ( document.getElementById('wp_editbtns') ) 297 tinymce.DOM.hide('wp_editbtns'); 298 299 if ( document.getElementById('wp_gallerybtns') ) 300 tinymce.DOM.hide('wp_gallerybtns'); 301 302 clearTimeout(this.mceTout); 303 this.mceTout = 0; 304 }, 305 306 do_align : function(n, a) { 307 var P, DL, DIV, cls, c, ed = tinyMCE.activeEditor; 308 309 if ( /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className) ) 310 return; 311 312 P = ed.dom.getParent(n, 'p'); 313 DL = ed.dom.getParent(n, 'dl'); 314 DIV = ed.dom.getParent(n, 'div'); 315 316 if ( DL && DIV ) { 317 cls = ed.dom.hasClass(DL, a) ? 'alignnone' : a; 318 DL.className = DL.className.replace(/align[^ '"]+\s?/g, ''); 319 ed.dom.addClass(DL, cls); 320 c = (cls == 'aligncenter') ? ed.dom.addClass(DIV, 'mceIEcenter') : ed.dom.removeClass(DIV, 'mceIEcenter'); 321 } else if ( P ) { 322 cls = ed.dom.hasClass(n, a) ? 'alignnone' : a; 323 n.className = n.className.replace(/align[^ '"]+\s?/g, ''); 324 ed.dom.addClass(n, cls); 325 if ( cls == 'aligncenter' ) 326 ed.dom.setStyle(P, 'textAlign', 'center'); 327 else if (P.style && P.style.textAlign == 'center') 328 ed.dom.setStyle(P, 'textAlign', ''); 329 } 330 331 ed.execCommand('mceRepaint'); 332 }, 333 334 // Resizes the iframe by a relative height value 335 _resizeIframe : function(ed, tb_id, dy) { 336 var ifr = ed.getContentAreaContainer().firstChild; 337 338 DOM.setStyle(ifr, 'height', ifr.clientHeight + dy); // Resize iframe 339 ed.theme.deltaHeight += dy; // For resize cookie 340 }, 341 342 _handleMoreBreak : function(ed, url) { 343 var moreHTML, nextpageHTML; 344 345 moreHTML = '<img src="' + url + '/img/trans.gif" alt="$1" class="mceWPmore mceItemNoResize" title="'+ed.getLang('wordpress.wp_more_alt')+'" />'; 346 nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+ed.getLang('wordpress.wp_page_alt')+'" />'; 347 348 // Load plugin specific CSS into editor 349 ed.onInit.add(function() { 350 ed.dom.loadCSS(url + '/css/content.css'); 351 }); 352 353 // Display morebreak instead if img in element path 354 ed.onPostRender.add(function() { 355 if (ed.theme.onResolveName) { 356 ed.theme.onResolveName.add(function(th, o) { 357 if (o.node.nodeName == 'IMG') { 358 if ( ed.dom.hasClass(o.node, 'mceWPmore') ) 359 o.name = 'wpmore'; 360 if ( ed.dom.hasClass(o.node, 'mceWPnextpage') ) 361 o.name = 'wppage'; 362 } 363 364 }); 365 } 366 }); 367 368 // Replace morebreak with images 369 ed.onBeforeSetContent.add(function(ed, o) { 370 o.content = o.content.replace(/<!--more(.*?)-->/g, moreHTML); 371 o.content = o.content.replace(/<!--nextpage-->/g, nextpageHTML); 372 }); 373 374 // Replace images with morebreak 375 ed.onPostProcess.add(function(ed, o) { 376 if (o.get) 377 o.content = o.content.replace(/<img[^>]+>/g, function(im) { 378 if (im.indexOf('class="mceWPmore') !== -1) { 379 var m, moretext = (m = im.match(/alt="(.*?)"/)) ? m[1] : ''; 380 im = '<!--more'+moretext+'-->'; 381 } 382 if (im.indexOf('class="mceWPnextpage') !== -1) 383 im = '<!--nextpage-->'; 384 385 return im; 386 }); 387 }); 388 389 // Set active buttons if user selected pagebreak or more break 390 ed.onNodeChange.add(function(ed, cm, n) { 391 cm.setActive('wp_page', n.nodeName === 'IMG' && ed.dom.hasClass(n, 'mceWPnextpage')); 392 cm.setActive('wp_more', n.nodeName === 'IMG' && ed.dom.hasClass(n, 'mceWPmore')); 393 }); 394 } 395 }); 396 397 // Register plugin 398 tinymce.PluginManager.add('wordpress', tinymce.plugins.WordPress); 399 })();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Fri Jan 8 00:19:48 2010 | Cross-referenced by PHPXref 0.7 |