17 |
20 |
18 I : function(e) { |
21 I : function(e) { |
19 return document.getElementById(e); |
22 return document.getElementById(e); |
20 }, |
23 }, |
21 |
24 |
22 edInit : function() { |
25 _wp_Nop : function(content) { |
23 }, |
|
24 |
|
25 saveCallback : function(el, content, body) { |
|
26 |
|
27 if ( tinyMCE.activeEditor.isHidden() ) |
|
28 content = this.I(el).value; |
|
29 else |
|
30 content = this.pre_wpautop(content); |
|
31 |
|
32 return content; |
|
33 }, |
|
34 |
|
35 pre_wpautop : function(content) { |
|
36 var blocklist1, blocklist2; |
26 var blocklist1, blocklist2; |
37 |
27 |
38 // Protect pre|script tags |
28 // Protect pre|script tags |
39 content = content.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) { |
29 content = content.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) { |
40 a = a.replace(/<br ?\/?>[\r\n]*/g, '<wp_temp>'); |
30 a = a.replace(/<br ?\/?>[\r\n]*/g, '<wp_temp>'); |
41 return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, '<wp_temp>'); |
31 return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, '<wp_temp>'); |
42 }); |
32 }); |
43 |
33 |
44 // Pretty it up for the source editor |
34 // Pretty it up for the source editor |
45 blocklist1 = 'blockquote|ul|ol|li|table|thead|tbody|tr|th|td|div|h[1-6]|p'; |
35 blocklist1 = 'blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|div|h[1-6]|p|fieldset'; |
46 content = content.replace(new RegExp('\\s*</('+blocklist1+')>\\s*', 'mg'), '</$1>\n'); |
36 content = content.replace(new RegExp('\\s*</('+blocklist1+')>\\s*', 'g'), '</$1>\n'); |
47 content = content.replace(new RegExp('\\s*<(('+blocklist1+')[^>]*)>', 'mg'), '\n<$1>'); |
37 content = content.replace(new RegExp('\\s*<(('+blocklist1+')[^>]*)>', 'g'), '\n<$1>'); |
48 |
38 |
49 // Mark </p> if it has any attributes. |
39 // Mark </p> if it has any attributes. |
50 content = content.replace(new RegExp('(<p [^>]+>.*?)</p>', 'mg'), '$1</p#>'); |
40 content = content.replace(/(<p [^>]+>.*?)<\/p>/g, '$1</p#>'); |
51 |
41 |
52 // Sepatate <div> containing <p> |
42 // Sepatate <div> containing <p> |
53 content = content.replace(new RegExp('<div([^>]*)>\\s*<p>', 'mgi'), '<div$1>\n\n'); |
43 content = content.replace(/<div([^>]*)>\s*<p>/gi, '<div$1>\n\n'); |
54 |
44 |
55 // Remove <p> and <br /> |
45 // Remove <p> and <br /> |
56 content = content.replace(new RegExp('\\s*<p>', 'mgi'), ''); |
46 content = content.replace(/\s*<p>/gi, ''); |
57 content = content.replace(new RegExp('\\s*</p>\\s*', 'mgi'), '\n\n'); |
47 content = content.replace(/\s*<\/p>\s*/gi, '\n\n'); |
58 content = content.replace(new RegExp('\\n\\s*\\n', 'mgi'), '\n\n'); |
48 content = content.replace(/\n[\s\u00a0]+\n/g, '\n\n'); |
59 content = content.replace(new RegExp('\\s*<br ?/?>\\s*', 'gi'), '\n'); |
49 content = content.replace(/\s*<br ?\/?>\s*/gi, '\n'); |
60 |
50 |
61 // Fix some block element newline issues |
51 // Fix some block element newline issues |
62 content = content.replace(new RegExp('\\s*<div', 'mg'), '\n<div'); |
52 content = content.replace(/\s*<div/g, '\n<div'); |
63 content = content.replace(new RegExp('</div>\\s*', 'mg'), '</div>\n'); |
53 content = content.replace(/<\/div>\s*/g, '</div>\n'); |
64 content = content.replace(new RegExp('\\s*\\[caption([^\\[]+)\\[/caption\\]\\s*', 'gi'), '\n\n[caption$1[/caption]\n\n'); |
54 content = content.replace(/\s*\[caption([^\[]+)\[\/caption\]\s*/gi, '\n\n[caption$1[/caption]\n\n'); |
65 content = content.replace(new RegExp('caption\\]\\n\\n+\\[caption', 'g'), 'caption]\n\n[caption'); |
55 content = content.replace(/caption\]\n\n+\[caption/g, 'caption]\n\n[caption'); |
66 |
56 |
67 blocklist2 = 'blockquote|ul|ol|li|table|thead|tr|th|td|h[1-6]|pre'; |
57 blocklist2 = 'blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|h[1-6]|pre|fieldset'; |
68 content = content.replace(new RegExp('\\s*<(('+blocklist2+') ?[^>]*)\\s*>', 'mg'), '\n<$1>'); |
58 content = content.replace(new RegExp('\\s*<(('+blocklist2+') ?[^>]*)\\s*>', 'g'), '\n<$1>'); |
69 content = content.replace(new RegExp('\\s*</('+blocklist2+')>\\s*', 'mg'), '</$1>\n'); |
59 content = content.replace(new RegExp('\\s*</('+blocklist2+')>\\s*', 'g'), '</$1>\n'); |
70 content = content.replace(new RegExp('<li([^>]*)>', 'g'), '\t<li$1>'); |
60 content = content.replace(/<li([^>]*)>/g, '\t<li$1>'); |
71 |
61 |
72 if ( content.indexOf('<object') != -1 ) { |
62 if ( content.indexOf('<object') != -1 ) { |
73 content = content.replace(/<object[\s\S]+?<\/object>/g, function(a){ |
63 content = content.replace(/<object[\s\S]+?<\/object>/g, function(a){ |
74 return a.replace(/[\r\n]+/g, ''); |
64 return a.replace(/[\r\n]+/g, ''); |
75 }); |
65 }); |
76 } |
66 } |
77 |
67 |
78 // Unmark special paragraph closing tags |
68 // Unmark special paragraph closing tags |
79 content = content.replace(new RegExp('</p#>', 'g'), '</p>\n'); |
69 content = content.replace(/<\/p#>/g, '</p>\n'); |
80 content = content.replace(new RegExp('\\s*(<p [^>]+>.*</p>)', 'mg'), '\n$1'); |
70 content = content.replace(/\s*(<p [^>]+>[\s\S]*?<\/p>)/g, '\n$1'); |
81 |
71 |
82 // Trim whitespace |
72 // Trim whitespace |
83 content = content.replace(new RegExp('^\\s*', ''), ''); |
73 content = content.replace(/^\s+/, ''); |
84 content = content.replace(new RegExp('[\\s\\u00a0]*$', ''), ''); |
74 content = content.replace(/[\s\u00a0]+$/, ''); |
85 |
75 |
86 // put back the line breaks in pre|script |
76 // put back the line breaks in pre|script |
87 content = content.replace(/<wp_temp>/g, '\n'); |
77 content = content.replace(/<wp_temp>/g, '\n'); |
88 |
78 |
89 // Hope. |
|
90 return content; |
79 return content; |
91 }, |
80 }, |
92 |
81 |
93 go : function(id, mode) { |
82 go : function(id, mode) { |
94 id = id || 'content'; |
83 id = id || 'content'; |
147 |
139 |
148 pee = pee.replace(/<[^<>]+>/g, function(a){ |
140 pee = pee.replace(/<[^<>]+>/g, function(a){ |
149 return a.replace(/[\r\n]+/g, ' '); |
141 return a.replace(/[\r\n]+/g, ' '); |
150 }); |
142 }); |
151 |
143 |
152 pee = pee + "\n\n"; |
144 pee = pee + '\n\n'; |
153 pee = pee.replace(new RegExp('<br />\\s*<br />', 'gi'), "\n\n"); |
145 pee = pee.replace(/<br \/>\s*<br \/>/gi, '\n\n'); |
154 pee = pee.replace(new RegExp('(<(?:'+blocklist+')[^>]*>)', 'gi'), "\n$1"); |
146 pee = pee.replace(new RegExp('(<(?:'+blocklist+')[^>]*>)', 'gi'), '\n$1'); |
155 pee = pee.replace(new RegExp('(</(?:'+blocklist+')>)', 'gi'), "$1\n\n"); |
147 pee = pee.replace(new RegExp('(</(?:'+blocklist+')>)', 'gi'), '$1\n\n'); |
156 pee = pee.replace(new RegExp("\\r\\n|\\r", 'g'), "\n"); |
148 pee = pee.replace(/\r\n|\r/g, '\n'); |
157 pee = pee.replace(new RegExp("\\n\\s*\\n+", 'g'), "\n\n"); |
149 pee = pee.replace(/\n\s*\n+/g, '\n\n'); |
158 pee = pee.replace(new RegExp('([\\s\\S]+?)\\n\\n', 'mg'), "<p>$1</p>\n"); |
150 pee = pee.replace(/([\s\S]+?)\n\n/g, '<p>$1</p>\n'); |
159 pee = pee.replace(new RegExp('<p>\\s*?</p>', 'gi'), ''); |
151 pee = pee.replace(/<p>\s*?<\/p>/gi, ''); |
160 pee = pee.replace(new RegExp('<p>\\s*(</?(?:'+blocklist+')[^>]*>)\\s*</p>', 'gi'), "$1"); |
152 pee = pee.replace(new RegExp('<p>\\s*(</?(?:'+blocklist+')[^>]*>)\\s*</p>', 'gi'), "$1"); |
161 pee = pee.replace(new RegExp("<p>(<li.+?)</p>", 'gi'), "$1"); |
153 pee = pee.replace(/<p>(<li.+?)<\/p>/gi, '$1'); |
162 pee = pee.replace(new RegExp('<p>\\s*<blockquote([^>]*)>', 'gi'), "<blockquote$1><p>"); |
154 pee = pee.replace(/<p>\s*<blockquote([^>]*)>/gi, '<blockquote$1><p>'); |
163 pee = pee.replace(new RegExp('</blockquote>\\s*</p>', 'gi'), '</p></blockquote>'); |
155 pee = pee.replace(/<\/blockquote>\s*<\/p>/gi, '</p></blockquote>'); |
164 pee = pee.replace(new RegExp('<p>\\s*(</?(?:'+blocklist+')[^>]*>)', 'gi'), "$1"); |
156 pee = pee.replace(new RegExp('<p>\\s*(</?(?:'+blocklist+')[^>]*>)', 'gi'), "$1"); |
165 pee = pee.replace(new RegExp('(</?(?:'+blocklist+')[^>]*>)\\s*</p>', 'gi'), "$1"); |
157 pee = pee.replace(new RegExp('(</?(?:'+blocklist+')[^>]*>)\\s*</p>', 'gi'), "$1"); |
166 pee = pee.replace(new RegExp('\\s*\\n', 'gi'), "<br />\n"); |
158 pee = pee.replace(/\s*\n/gi, '<br />\n'); |
167 pee = pee.replace(new RegExp('(</?(?:'+blocklist+')[^>]*>)\\s*<br />', 'gi'), "$1"); |
159 pee = pee.replace(new RegExp('(</?(?:'+blocklist+')[^>]*>)\\s*<br />', 'gi'), "$1"); |
168 pee = pee.replace(new RegExp('<br />(\\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)', 'gi'), '$1'); |
160 pee = pee.replace(/<br \/>(\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)/gi, '$1'); |
169 pee = pee.replace(new RegExp('(?:<p>|<br ?/?>)*\\s*\\[caption([^\\[]+)\\[/caption\\]\\s*(?:</p>|<br ?/?>)*', 'gi'), '[caption$1[/caption]'); |
161 pee = pee.replace(/(?:<p>|<br ?\/?>)*\s*\[caption([^\[]+)\[\/caption\]\s*(?:<\/p>|<br ?\/?>)*/gi, '[caption$1[/caption]'); |
|
162 |
|
163 pee = pee.replace(/(<(?:div|th|td|form|fieldset|dd)[^>]*>)(.*?)<\/p>/g, function(a, b, c) { |
|
164 if ( c.match(/<p( [^>]+)?>/) ) |
|
165 return a; |
|
166 |
|
167 return b + '<p>' + c + '</p>'; |
|
168 }); |
170 |
169 |
171 // Fix the pre|script tags |
170 // Fix the pre|script tags |
172 pee = pee.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) { |
171 pee = pee.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) { |
173 a = a.replace(/<br ?\/?>[\r\n]*/g, '\n'); |
172 a = a.replace(/<br ?\/?>[\r\n]*/g, '\n'); |
174 return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, '\n'); |
173 return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, '\n'); |
175 }); |
174 }); |
176 |
175 |
177 return pee; |
176 return pee; |
|
177 }, |
|
178 |
|
179 pre_wpautop : function(content) { |
|
180 var t = this, o = { o: t, data: content, unfiltered: content }; |
|
181 |
|
182 jQuery('body').trigger('beforePreWpautop', [o]); |
|
183 o.data = t._wp_Nop(o.data); |
|
184 jQuery('body').trigger('afterPreWpautop', [o]); |
|
185 return o.data; |
|
186 }, |
|
187 |
|
188 wpautop : function(pee) { |
|
189 var t = this, o = { o: t, data: pee, unfiltered: pee }; |
|
190 |
|
191 jQuery('body').trigger('beforeWpautop', [o]); |
|
192 o.data = t._wp_Autop(o.data); |
|
193 jQuery('body').trigger('afterWpautop', [o]); |
|
194 return o.data; |
178 } |
195 } |
179 }; |
196 }; |