annotate sites/all/modules/wysiwyg/plugins/break/break.js @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1 (function ($) {
danielebarchiesi@0 2
danielebarchiesi@0 3 // @todo Array syntax required; 'break' is a predefined token in JavaScript.
danielebarchiesi@0 4 Drupal.wysiwyg.plugins['break'] = {
danielebarchiesi@0 5
danielebarchiesi@0 6 /**
danielebarchiesi@0 7 * Return whether the passed node belongs to this plugin.
danielebarchiesi@0 8 */
danielebarchiesi@0 9 isNode: function(node) {
danielebarchiesi@0 10 return ($(node).is('img.wysiwyg-break'));
danielebarchiesi@0 11 },
danielebarchiesi@0 12
danielebarchiesi@0 13 /**
danielebarchiesi@0 14 * Execute the button.
danielebarchiesi@0 15 */
danielebarchiesi@0 16 invoke: function(data, settings, instanceId) {
danielebarchiesi@0 17 if (data.format == 'html') {
danielebarchiesi@0 18 // Prevent duplicating a teaser break.
danielebarchiesi@0 19 if ($(data.node).is('img.wysiwyg-break')) {
danielebarchiesi@0 20 return;
danielebarchiesi@0 21 }
danielebarchiesi@0 22 var content = this._getPlaceholder(settings);
danielebarchiesi@0 23 }
danielebarchiesi@0 24 else {
danielebarchiesi@0 25 // Prevent duplicating a teaser break.
danielebarchiesi@0 26 // @todo data.content is the selection only; needs access to complete content.
danielebarchiesi@0 27 if (data.content.match(/<!--break-->/)) {
danielebarchiesi@0 28 return;
danielebarchiesi@0 29 }
danielebarchiesi@0 30 var content = '<!--break-->';
danielebarchiesi@0 31 }
danielebarchiesi@0 32 if (typeof content != 'undefined') {
danielebarchiesi@0 33 Drupal.wysiwyg.instances[instanceId].insert(content);
danielebarchiesi@0 34 }
danielebarchiesi@0 35 },
danielebarchiesi@0 36
danielebarchiesi@0 37 /**
danielebarchiesi@0 38 * Replace all <!--break--> tags with images.
danielebarchiesi@0 39 */
danielebarchiesi@0 40 attach: function(content, settings, instanceId) {
danielebarchiesi@0 41 content = content.replace(/<!--break-->/g, this._getPlaceholder(settings));
danielebarchiesi@0 42 return content;
danielebarchiesi@0 43 },
danielebarchiesi@0 44
danielebarchiesi@0 45 /**
danielebarchiesi@0 46 * Replace images with <!--break--> tags in content upon detaching editor.
danielebarchiesi@0 47 */
danielebarchiesi@0 48 detach: function(content, settings, instanceId) {
danielebarchiesi@0 49 var $content = $('<div>' + content + '</div>'); // No .outerHTML() in jQuery :(
danielebarchiesi@0 50 // #404532: document.createComment() required or IE will strip the comment.
danielebarchiesi@0 51 // #474908: IE 8 breaks when using jQuery methods to replace the elements.
danielebarchiesi@0 52 // @todo Add a generic implementation for all Drupal plugins for this.
danielebarchiesi@0 53 $.each($('img.wysiwyg-break', $content), function (i, elem) {
danielebarchiesi@0 54 elem.parentNode.insertBefore(document.createComment('break'), elem);
danielebarchiesi@0 55 elem.parentNode.removeChild(elem);
danielebarchiesi@0 56 });
danielebarchiesi@0 57 return $content.html();
danielebarchiesi@0 58 },
danielebarchiesi@0 59
danielebarchiesi@0 60 /**
danielebarchiesi@0 61 * Helper function to return a HTML placeholder.
danielebarchiesi@0 62 */
danielebarchiesi@0 63 _getPlaceholder: function (settings) {
danielebarchiesi@0 64 return '<img src="' + settings.path + '/images/spacer.gif" alt="&lt;--break-&gt;" title="&lt;--break--&gt;" class="wysiwyg-break drupal-content" />';
danielebarchiesi@0 65 }
danielebarchiesi@0 66 };
danielebarchiesi@0 67
danielebarchiesi@0 68 })(jQuery);