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="<--break->" title="<--break-->" class="wysiwyg-break drupal-content" />';
|
danielebarchiesi@0
|
65 }
|
danielebarchiesi@0
|
66 };
|
danielebarchiesi@0
|
67
|
danielebarchiesi@0
|
68 })(jQuery);
|