| 1 | Index: tiny_mce.js |
|---|
| 2 | =================================================================== |
|---|
| 3 | --- tiny_mce.js (revision 6633) |
|---|
| 4 | +++ tiny_mce.js (working copy) |
|---|
| 5 | @@ -4,7 +4,7 @@ |
|---|
| 6 | var tinymce = { |
|---|
| 7 | majorVersion : '3', |
|---|
| 8 | minorVersion : '0rc2', |
|---|
| 9 | - releaseDate : '2008-01-xx', |
|---|
| 10 | + releaseDate : '2008-01-18', |
|---|
| 11 | |
|---|
| 12 | _init : function() { |
|---|
| 13 | var t = this, ua = navigator.userAgent, i, nl, n, base; |
|---|
| 14 | @@ -919,7 +919,8 @@ |
|---|
| 15 | |
|---|
| 16 | this.settings = s = tinymce.extend({ |
|---|
| 17 | keep_values : false, |
|---|
| 18 | - hex_colors : 1 |
|---|
| 19 | + hex_colors : 1, |
|---|
| 20 | + process_html : 1 |
|---|
| 21 | }, s); |
|---|
| 22 | |
|---|
| 23 | // Fix IE6SP2 flicker and check it failed for pre SP2 |
|---|
| 24 | @@ -1203,7 +1204,7 @@ |
|---|
| 25 | if (h.nodeType) |
|---|
| 26 | e.appendChild(h); |
|---|
| 27 | else |
|---|
| 28 | - e.innerHTML = h; |
|---|
| 29 | + t.setHTML(e, h); |
|---|
| 30 | } |
|---|
| 31 | |
|---|
| 32 | return !c ? p.appendChild(e) : e; |
|---|
| 33 | @@ -1498,7 +1499,7 @@ |
|---|
| 34 | }, |
|---|
| 35 | |
|---|
| 36 | getPos : function(n) { |
|---|
| 37 | - var t = this, x = 0, y = 0, e, d = t.doc; |
|---|
| 38 | + var t = this, x = 0, y = 0, e, d = t.doc, r; |
|---|
| 39 | |
|---|
| 40 | n = t.get(n); |
|---|
| 41 | |
|---|
| 42 | @@ -1513,14 +1514,25 @@ |
|---|
| 43 | return {x : n.left + e.scrollLeft - x, y : n.top + e.scrollTop - x}; |
|---|
| 44 | } |
|---|
| 45 | |
|---|
| 46 | - while (n) { |
|---|
| 47 | - x += n.offsetLeft || 0; |
|---|
| 48 | - y += n.offsetTop || 0; |
|---|
| 49 | - x -= n.scrollLeft || 0; |
|---|
| 50 | - y -= n.scrollTop || 0; |
|---|
| 51 | - n = n.offsetParent; |
|---|
| 52 | + r = n; |
|---|
| 53 | + while (r) { |
|---|
| 54 | + x += r.offsetLeft || 0; |
|---|
| 55 | + y += r.offsetTop || 0; |
|---|
| 56 | + |
|---|
| 57 | + r = r.offsetParent; |
|---|
| 58 | } |
|---|
| 59 | |
|---|
| 60 | + r = n; |
|---|
| 61 | + while (r) { |
|---|
| 62 | + x -= r.scrollLeft || 0; |
|---|
| 63 | + y -= r.scrollTop || 0; |
|---|
| 64 | + |
|---|
| 65 | + r = r.parentNode; |
|---|
| 66 | + |
|---|
| 67 | + if (r == d.body) |
|---|
| 68 | + break; |
|---|
| 69 | + } |
|---|
| 70 | + |
|---|
| 71 | return {x : x, y : y}; |
|---|
| 72 | }, |
|---|
| 73 | |
|---|
| 74 | @@ -1722,13 +1734,28 @@ |
|---|
| 75 | var t = this; |
|---|
| 76 | |
|---|
| 77 | return this.run(e, function(e) { |
|---|
| 78 | - var r; |
|---|
| 79 | + var x; |
|---|
| 80 | |
|---|
| 81 | h = t.processHTML(h); |
|---|
| 82 | |
|---|
| 83 | if (isIE) { |
|---|
| 84 | - e.innerHTML = '<br />' + h; |
|---|
| 85 | - e.removeChild(e.firstChild); |
|---|
| 86 | + try { |
|---|
| 87 | + // IE will remove comments from the beginning |
|---|
| 88 | + // unless you padd the contents with something |
|---|
| 89 | + e.innerHTML = '<br />' + h; |
|---|
| 90 | + e.removeChild(e.firstChild); |
|---|
| 91 | + } catch (ex) { |
|---|
| 92 | + // IE sometimes produces an unknown runtime error on innerHTML |
|---|
| 93 | + // This seems to fix this issue, don't know why. |
|---|
| 94 | + x = t.create('div'); |
|---|
| 95 | + x.innerHTML = '<br />' + h; |
|---|
| 96 | + |
|---|
| 97 | + each (x.childNodes, function(n, i) { |
|---|
| 98 | + // Skip the BR |
|---|
| 99 | + if (i > 1) |
|---|
| 100 | + e.appendChild(n); |
|---|
| 101 | + }); |
|---|
| 102 | + } |
|---|
| 103 | } else |
|---|
| 104 | e.innerHTML = h; |
|---|
| 105 | |
|---|
| 106 | @@ -1739,6 +1766,9 @@ |
|---|
| 107 | processHTML : function(h) { |
|---|
| 108 | var t = this, s = t.settings; |
|---|
| 109 | |
|---|
| 110 | + if (!s.process_html) |
|---|
| 111 | + return h; |
|---|
| 112 | + |
|---|
| 113 | // Convert strong and em to b and i in FF since it can't handle them |
|---|
| 114 | if (tinymce.isGecko) { |
|---|
| 115 | h = h.replace(/<(\/?)strong>|<strong( [^>]+)>/gi, '<$1b$2>'); |
|---|
| 116 | @@ -2059,7 +2089,7 @@ |
|---|
| 117 | }); |
|---|
| 118 | |
|---|
| 119 | // Setup page DOM |
|---|
| 120 | - tinymce.DOM = new tinymce.dom.DOMUtils(document); |
|---|
| 121 | + tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0}); |
|---|
| 122 | })(); |
|---|
| 123 | |
|---|
| 124 | /* file:jscripts/tiny_mce/classes/dom/Event.js */ |
|---|
| 125 | @@ -3147,10 +3177,10 @@ |
|---|
| 126 | }, |
|---|
| 127 | |
|---|
| 128 | setEntities : function(s) { |
|---|
| 129 | - var a, i, l = {}, re = '', v; |
|---|
| 130 | + var t = this, a, i, l = {}, re = '', v; |
|---|
| 131 | |
|---|
| 132 | // No need to setup more than once |
|---|
| 133 | - if (this.entityLookup) |
|---|
| 134 | + if (t.entityLookup) |
|---|
| 135 | return; |
|---|
| 136 | |
|---|
| 137 | // Build regex and lookup array |
|---|
| 138 | @@ -3168,8 +3198,13 @@ |
|---|
| 139 | re += '\\u' + '0000'.substring(v.length) + v; |
|---|
| 140 | } |
|---|
| 141 | |
|---|
| 142 | - this.entitiesRE = new RegExp('[' + re + ']', 'g'); |
|---|
| 143 | - this.entityLookup = l; |
|---|
| 144 | + if (!re) { |
|---|
| 145 | + t.settings.entity_encoding = 'raw'; |
|---|
| 146 | + return; |
|---|
| 147 | + } |
|---|
| 148 | + |
|---|
| 149 | + t.entitiesRE = new RegExp('[' + re + ']', 'g'); |
|---|
| 150 | + t.entityLookup = l; |
|---|
| 151 | }, |
|---|
| 152 | |
|---|
| 153 | setValidChildRules : function(s) { |
|---|
| 154 | @@ -4115,7 +4150,7 @@ |
|---|
| 155 | }, |
|---|
| 156 | |
|---|
| 157 | renderTo : function(n) { |
|---|
| 158 | - n.innerHTML = this.renderHTML(); |
|---|
| 159 | + DOM.setHTML(n, this.renderHTML()); |
|---|
| 160 | }, |
|---|
| 161 | |
|---|
| 162 | postRender : function() { |
|---|
| 163 | @@ -4318,6 +4353,10 @@ |
|---|
| 164 | s.offset_y = s.offset_y || 0; |
|---|
| 165 | s.vp_offset_x = s.vp_offset_x || 0; |
|---|
| 166 | s.vp_offset_y = s.vp_offset_y || 0; |
|---|
| 167 | + |
|---|
| 168 | + if (is(s.icons) && !s.icons) |
|---|
| 169 | + s['class'] += ' noIcons'; |
|---|
| 170 | + |
|---|
| 171 | this.parent(id, s); |
|---|
| 172 | this.onHideMenu = new tinymce.util.Dispatcher(this); |
|---|
| 173 | this.classPrefix = 'mceMenu'; |
|---|
| 174 | @@ -4460,7 +4499,7 @@ |
|---|
| 175 | } |
|---|
| 176 | }, |
|---|
| 177 | |
|---|
| 178 | - hideMenu : function() { |
|---|
| 179 | + hideMenu : function(c) { |
|---|
| 180 | var t = this, co = DOM.get('menu_' + t.id), e; |
|---|
| 181 | |
|---|
| 182 | if (!t.isMenuVisible) |
|---|
| 183 | @@ -4471,6 +4510,9 @@ |
|---|
| 184 | DOM.hide(co); |
|---|
| 185 | t.isMenuVisible = 0; |
|---|
| 186 | |
|---|
| 187 | + if (!c) |
|---|
| 188 | + t.collapse(1); |
|---|
| 189 | + |
|---|
| 190 | if (t.element) |
|---|
| 191 | t.element.hide(); |
|---|
| 192 | |
|---|
| 193 | @@ -4493,7 +4535,7 @@ |
|---|
| 194 | |
|---|
| 195 | collapse : function(d) { |
|---|
| 196 | this.parent(d); |
|---|
| 197 | - this.hideMenu(); |
|---|
| 198 | + this.hideMenu(1); |
|---|
| 199 | }, |
|---|
| 200 | |
|---|
| 201 | remove : function(o) { |
|---|
| 202 | @@ -4942,7 +4984,8 @@ |
|---|
| 203 | |
|---|
| 204 | m = t.settings.control_manager.createDropMenu(t.id + '_menu', { |
|---|
| 205 | menu_line : 1, |
|---|
| 206 | - 'class' : this.classPrefix + 'Menu' |
|---|
| 207 | + 'class' : this.classPrefix + 'Menu', |
|---|
| 208 | + icons : t.settings.icons |
|---|
| 209 | }); |
|---|
| 210 | |
|---|
| 211 | m.onHideMenu.add(t.hideMenu, t); |
|---|
| 212 | @@ -6182,6 +6225,18 @@ |
|---|
| 213 | }); |
|---|
| 214 | } |
|---|
| 215 | |
|---|
| 216 | + if (isGecko) { |
|---|
| 217 | + try { |
|---|
| 218 | + // Design mode must be set here once again to fix a bug where |
|---|
| 219 | + // Ctrl+A/Delete/Backspace didn't work if the editor was added using mceAddControl then removed then added again |
|---|
| 220 | + d.designMode = 'Off'; |
|---|
| 221 | + d.designMode = 'On'; |
|---|
| 222 | + } catch (ex) { |
|---|
| 223 | + // Will fail on Gecko if the editor is placed in an hidden container element |
|---|
| 224 | + // The design mode will be set ones the editor is focused |
|---|
| 225 | + } |
|---|
| 226 | + } |
|---|
| 227 | + |
|---|
| 228 | // A small timeout was needed since firefox will remove. Bug: #1838304 |
|---|
| 229 | setTimeout(function () { |
|---|
| 230 | if (t.removed) |
|---|
| 231 | @@ -6216,7 +6271,7 @@ |
|---|
| 232 | }, 100); |
|---|
| 233 | } |
|---|
| 234 | }, 1); |
|---|
| 235 | - |
|---|
| 236 | + |
|---|
| 237 | e = null; |
|---|
| 238 | }, |
|---|
| 239 | |
|---|
| 240 | @@ -6897,20 +6952,45 @@ |
|---|
| 241 | function tabHandler(ed, e) { |
|---|
| 242 | var v, f, el; |
|---|
| 243 | |
|---|
| 244 | + function find(d) { |
|---|
| 245 | + f = DOM.getParent(ed.id, 'form'), el = f.elements; |
|---|
| 246 | + |
|---|
| 247 | + if (f) { |
|---|
| 248 | + each(f.elements, function(e, i) { |
|---|
| 249 | + if (e.id == ed.id) { |
|---|
| 250 | + i = i + d; |
|---|
| 251 | + |
|---|
| 252 | + if (i < 0 || i > el.length) |
|---|
| 253 | + return; |
|---|
| 254 | + |
|---|
| 255 | + el = el[i]; |
|---|
| 256 | + } |
|---|
| 257 | + }); |
|---|
| 258 | + } |
|---|
| 259 | + |
|---|
| 260 | + return el; |
|---|
| 261 | + }; |
|---|
| 262 | + |
|---|
| 263 | if (e.keyCode === 9) { |
|---|
| 264 | - v = ed.getParam('tab_focus'); |
|---|
| 265 | + v = ed.getParam('tab_focus').split(','); |
|---|
| 266 | |
|---|
| 267 | - if (v == ':next') { |
|---|
| 268 | - f = DOM.getParent(ed.id, 'form'); |
|---|
| 269 | + if (v.length == 1) { |
|---|
| 270 | + v[1] = v[0]; |
|---|
| 271 | + v[0] = ':prev'; |
|---|
| 272 | + } |
|---|
| 273 | |
|---|
| 274 | - if (f) { |
|---|
| 275 | - each(f.elements, function(e, i) { |
|---|
| 276 | - if (e.id == ed.id) |
|---|
| 277 | - el = f.elements[i + 1]; |
|---|
| 278 | - }); |
|---|
| 279 | - } |
|---|
| 280 | - } else |
|---|
| 281 | - el = DOM.get(v); |
|---|
| 282 | + // Find element to focus |
|---|
| 283 | + if (e.shiftKey) { |
|---|
| 284 | + if (v[0] == ':prev') |
|---|
| 285 | + el = find(-1); |
|---|
| 286 | + else |
|---|
| 287 | + el = DOM.get(v[0]); |
|---|
| 288 | + } else { |
|---|
| 289 | + if (v[1] == ':next') |
|---|
| 290 | + el = find(1); |
|---|
| 291 | + else |
|---|
| 292 | + el = DOM.get(v[1]); |
|---|
| 293 | + } |
|---|
| 294 | |
|---|
| 295 | if (el) { |
|---|
| 296 | window.setTimeout(function() {window.focus();el.focus();}, 10); |
|---|