Ticket #21812: 21812-4.patch
File 21812-4.patch, 10.6 KB (added by , 13 years ago) |
---|
-
wp-includes/js/tinymce/plugins/wordpress/editor_plugin_src.js
7 7 8 8 tinymce.create('tinymce.plugins.WordPress', { 9 9 mceTout : 0, 10 previews : {i: 0}, 11 reg_previews : [], 10 12 11 13 init : function(ed, url) { 12 14 var t = this, tbId = ed.getParam('wordpress_adv_toolbar', 'toolbar2'), last = 0, moreHTML, nextpageHTML, closeOnClick, mod_key; 15 13 16 moreHTML = '<img src="' + url + '/img/trans.gif" class="mceWPmore mceItemNoResize" title="'+ed.getLang('wordpress.wp_more_alt')+'" />'; 14 17 nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+ed.getLang('wordpress.wp_page_alt')+'" />'; 15 18 16 if ( getUserSetting('hidetb', '0') == '1' ) 19 t.ed = ed; 20 21 if ( typeof(getUserSetting) == 'function' && getUserSetting('hidetb', '0') == '1' ) 17 22 ed.settings.wordpress_adv_hidden = 0; 18 23 19 24 // Hides the specified toolbar and resizes the iframe … … 251 256 // Add custom shortcuts 252 257 mod_key = 'alt+shift'; 253 258 254 // if ( tinymce.isGecko ) // disable for mow, too many shortcuts conflicts255 // mod_key = 'ctrl+alt';256 257 259 ed.addShortcut(mod_key + '+c', 'justifycenter_desc', 'JustifyCenter'); 258 260 ed.addShortcut(mod_key + '+r', 'justifyright_desc', 'JustifyRight'); 259 261 ed.addShortcut(mod_key + '+l', 'justifyleft_desc', 'JustifyLeft'); … … 313 315 // close popups when clicking on the background 314 316 tinymce.dom.Event.remove(document.body, 'click', closeOnClick); 315 317 tinymce.dom.Event.add(document.body, 'click', closeOnClick); 318 319 320 // previews 321 ed.onPreInit.add( function(ed){ 322 ed.schema.addValidElements('div[*],span[*]'); // so we can set contenteditable=false 323 324 // add custom jQuery event so plugins can do: 325 // jQuery(document).on( 'wp_add_mce_previews', function(e, ed){ ed.wpPreviewRegister(args) } ); 326 if ( typeof(jQuery) != 'undefined' ) 327 jQuery(document).trigger( 'wp_add_mce_previews', ed ); 328 }); 329 330 // scan on paste and on inserting nodes/html (on send_to_editor) 331 ed.onInit.add(function(ed) { 332 ed.selection.onSetContent.add(function(sel, o) { 333 var node; 334 335 if ( o.context && t.reg_previews.length ) { 336 node = sel.getNode(); 337 338 if ( node.innerHTML ) { 339 node.innerHTML = t.previews_step_1(node.innerHTML); 340 t.previews_step_2( ed.dom.select('.wp-preview-wrap', node) ); 341 } 342 } 343 }); 344 }); 345 346 // scan the last paragraph on enter 347 ed.onKeyDown.add(function(ed, e){ 348 var node, html; 349 350 if ( e.keyCode == 13 ) { 351 node = ed.selection.getNode(); 352 353 if ( node.innerHTML ) { 354 html = t.previews_step_1(node.innerHTML); 355 356 setTimeout(function(){ // delay so all other keydown events run 357 node.innerHTML = html; 358 359 if ( ed.dom.is(node.lastChild, 'br') ) 360 ed.dom.remove(node.lastChild); 361 362 t.previews_step_2( ed.dom.select('.wp-preview-wrap', node) ); 363 }, 50); 364 } 365 } 366 }); 367 368 // runs every time content (html string) is loaded in the editor 369 ed.onBeforeSetContent.add(function(ed, o) { 370 t.previews = {i: 0}; 371 372 if ( o.content ) 373 o.content = t.previews_step_1(o.content); 374 }); 375 376 // runs when the DOM is ready every time content is loaded in the editor 377 ed.onLoadContent.add(function(ed, o){ 378 t.previews_step_2( ed.dom.select('.wp-preview-wrap') ); 379 }); 380 381 ed.onPostProcess.add(function(ed, o) { 382 if ( ( o.get || o.save ) && o.content.indexOf('data-wp-preview="') > -1 ) { 383 o.content = o.content.replace(/(<(div|span)[^>]+data-wp-preview="([^"]+)"[^>]*>)[\s\S]+?<\2 data-wp-preview-blocker="1">.*?<\/\2><\/\2>/g, function(a, b, c, d){ 384 var previews = t.previews, str = decodeURIComponent(d), div_id = c.replace(/.+id="([^"]+)".+/, '$1'); 385 386 if ( b == 'div' ) 387 str = '<p>'+ str +'</p>'; 388 389 if ( previews[div_id] && previews[div_id].cleanup_callback ) 390 str = previews[div_id].cleanup_callback.call( t, { ed: ed, original: str } ); 391 392 return str; 393 }); 394 } 395 }); 396 397 /* 398 store all preview args 399 args = { 400 ref_name: 'my_preview', 401 tag: 'span', // html tag for the wrapper elements div|span, default = div 402 preview_regexp: /\[gallery[^\]]*\]/, 403 str_callback: function(obj){ console.log('str_callback'); console.log(obj); return obj.original+' 123 ' }, 404 node_callback: function(obj){ console.log('node_callback'); console.log(obj) }, 405 cleanup_callback: function(obj){ console.log('cleanup_callback'); console.log(obj); return obj.original } 406 } 407 */ 408 ed.wpPreviewRegister = function(args) { 409 t.reg_previews.push(args); 410 }; 316 411 }, 317 412 318 413 getInfo : function() { … … 418 513 419 514 // Replace images with morebreak 420 515 ed.onPostProcess.add(function(ed, o) { 421 if ( o.get)516 if ( o.get ) { 422 517 o.content = o.content.replace(/<img[^>]+>/g, function(im) { 423 if ( im.indexOf('class="mceWPmore') !== -1) {424 var m, moretext = ( m = im.match(/alt="(.*?)"/)) ? m[1] : '';518 if ( im.indexOf('class="mceWPmore') !== -1 ) { 519 var m, moretext = ( m = im.match(/alt="(.*?)"/) ) ? m[1] : ''; 425 520 im = '<!--more'+moretext+'-->'; 426 521 } 427 if ( im.indexOf('class="mceWPnextpage') !== -1)522 if ( im.indexOf('class="mceWPnextpage') !== -1 ) 428 523 im = '<!--nextpage-->'; 429 524 430 525 return im; 431 526 }); 527 } 432 528 }); 433 529 434 530 // Set active buttons if user selected pagebreak or more break … … 436 532 cm.setActive('wp_page', n.nodeName === 'IMG' && ed.dom.hasClass(n, 'mceWPnextpage')); 437 533 cm.setActive('wp_more', n.nodeName === 'IMG' && ed.dom.hasClass(n, 'mceWPmore')); 438 534 }); 535 }, 536 537 previews_step_1: function(content) { 538 var self = this, previews = self.previews; 539 540 if ( self.reg_previews.length ) { 541 tinymce.each( self.reg_previews, function(args){ 542 if ( !args.preview_regexp ) 543 return; 544 545 var regex = new RegExp( '(?:<p>\\s*)?(' + args.preview_regexp.source + ')(?:\\s*</p>)?', 'g' ), 546 tag = 'div'; 547 548 if ( args.tag && args.tag == 'span' ) 549 tag = 'span'; 550 551 content = content.replace(regex, function(a, orig_str){ 552 var html, div_id, new_str; 553 554 previews.i++; 555 div_id = 'wp_mce_preview_' + previews.i; 556 557 new_str = args.str_callback.call( self, { ed: self.ed, original: orig_str, div_id: div_id } ); 558 previews[div_id] = args; 559 560 html = '<'+tag+' id="'+ div_id +'" data-wp-preview="'+ encodeURIComponent(orig_str) +'" class="wp-preview-wrap" contenteditable="false">' + 561 '<'+tag+' class="wp-preview">'+ new_str +'</'+tag+'>' + // add inner wrapper so the preview node(s) can be appended there without disturbing the blocker and end divs? 562 '<'+tag+' data-wp-preview-blocker="1">\uFEFF</'+tag+'></'+tag+'>'; 563 564 return html; 565 }); 566 }); 567 } 568 569 return content; 570 }, 571 572 // go through the previews added in step_1 and fire node callback 573 previews_step_2: function(nodes) { 574 var self = this, events = self.ed.dom.events; 575 576 tinymce.each( nodes, function(node){ 577 var div_id = node.id, args; 578 579 if ( !div_id || !self.previews.hasOwnProperty(div_id) ) // no reference for this preview? Remove it? 580 return; 581 582 args = self.previews[div_id]; 583 events.add( node, ['mousedown'], function(e){ events.prevent(e); } ); // prevent FF from highlighting the non-editable element 584 585 if ( args.node_callback ) { // use the inner wrapper as node in the callback 586 args.node_callback.call( self, { ed: self.ed, node: node.firstChild, div_id: div_id } ); 587 } 588 }); 439 589 } 440 590 }); 441 591 -
wp-includes/js/tinymce/plugins/wpgallery/editor_plugin_src.js
26 26 if ( e.target.nodeName == 'IMG' && ed.dom.hasClass(e.target, 'wpGallery') ) 27 27 ed.plugins.wordpress._showButtons(e.target, 'wp_gallerybtns'); 28 28 }); 29 29 /* 30 30 ed.onBeforeSetContent.add(function(ed, o) { 31 31 o.content = t._do_gallery(o.content); 32 32 }); … … 35 35 if (o.get) 36 36 o.content = t._get_gallery(o.content); 37 37 }); 38 */ 38 39 }, 39 40 40 41 _do_gallery : function(co) { -
wp-includes/js/tinymce/themes/advanced/skins/wp_theme/content.css
141 141 height: 250px; 142 142 } 143 143 144 /* Previews */ 145 div[data-wp-preview-blocker], 146 span[data-wp-preview-blocker] { 147 height: 100%; 148 width: 100%; 149 position: absolute; 150 background: #fff; 151 opacity: 0.01; 152 filter: alpha(opacity=1); 153 top: 0; 154 left: 0; 155 bottom: 0; 156 right: 0; 157 z-index: 5; 158 } 159 160 div.wp-preview-wrap, 161 span.wp-preview-wrap { 162 margin: 10px auto; 163 position: relative; 164 } 165 166 span.wp-preview-wrap, 167 span[data-wp-preview-blocker] { 168 display: inline-block; 169 } 170 171 div.wp-preview-wrap, 172 span.wp-preview-wrap, 173 div[data-wp-preview-blocker], 174 span[data-wp-preview-blocker] { 175 -ms-user-select: none; 176 -moz-user-select: none; /* doesn't work */ 177 -webkit-user-select: none; 178 user-select: none; 179 } 180 181 div.wp-preview-wrap .gallery-icon { 182 margin: 0; 183 } 184 185 div.wp-preview-wrap .gallery-icon img { 186 display: block; 187 margin: 0 auto; 188 padding: 0; 189 max-width: 90%; 190 height: auto; 191 border: 0; 192 } 193 194 div.wp-preview-wrap dd.gallery-caption { 195 margin: 0 6%; 196 font-size: 12px; 197 } 198 199 div.wp-preview-wrap div.gallery { 200 clear: both; 201 } 202 203 div.wp-preview-wrap div.gallery dl.gallery-item { 204 float: left; 205 margin: 10px 0; 206 padding: 0; 207 } 208 209 div.wp-preview-wrap div.gallery-columns-1 dl.gallery-item { 210 width: 99%; 211 } 212 213 div.wp-preview-wrap div.gallery-columns-2 dl.gallery-item { 214 width: 49.5%; 215 } 216 217 div.wp-preview-wrap div.gallery-columns-3 dl.gallery-item { 218 width: 33%; 219 } 220 221 div.wp-preview-wrap div.gallery-columns-4 dl.gallery-item { 222 width: 24.75%; 223 } 224 225 div.wp-preview-wrap div.gallery-columns-5 dl.gallery-item { 226 width: 19.8%; 227 } 228 229 div.wp-preview-wrap div.gallery-columns-6 dl.gallery-item { 230 width: 16.5%; 231 } 232 233 div.wp-preview-wrap div.gallery-columns-7 dl.gallery-item { 234 width: 14.2%; 235 } 236 237 div.wp-preview-wrap div.gallery-columns-8 dl.gallery-item { 238 width: 12.45%; 239 } 240 241 div.wp-preview-wrap div.gallery-columns-9 dl.gallery-item { 242 width: 11.1%; 243 } 244 245 div.wp-preview-wrap div.gallery-columns-10 dl.gallery-item { 246 width: 9.99%; 247 } 248 249 250