\r
ed.formatter.register(name, {\r
inline : 'span',\r
- classes : o['class']\r
+ attributes : {'class' : o['class']},\r
+ selector : '*'\r
});\r
\r
ctrl.add(o['class'], name);\r
ctrl = ctrlMan.createListBox('styleselect', {\r
title : 'advanced.style_select',\r
onselect : function(name) {\r
+ var matches, formatNames = [];\r
+\r
+ each(ctrl.items, function(item) {\r
+ formatNames.push(item.value);\r
+ });\r
+\r
ed.focus();\r
- ed.formatter.toggle(name);\r
+ ed.undoManager.add();\r
+\r
+ // Toggle off the current format\r
+ matches = ed.formatter.matchAll(formatNames);\r
+ if (!name || matches[0] == name)\r
+ ed.formatter.remove(matches[0]);\r
+ else\r
+ ed.formatter.apply(name);\r
+\r
+ ed.undoManager.add();\r
+ ed.nodeChanged();\r
\r
return false; // No auto select\r
}\r
\r
ed.formatter.register(name, {\r
inline : 'span',\r
- classes : val\r
+ classes : val,\r
+ selector : '*'\r
});\r
\r
ctrl.add(t.editor.translate(key), name);\r
c = ed.controlManager.createListBox('fontselect', {\r
title : 'advanced.fontdefault',\r
onselect : function(v) {\r
+ var cur = c.items[c.selectedIndex];\r
+\r
+ if (!v && cur) {\r
+ ed.execCommand('FontName', false, cur.value);\r
+ return;\r
+ }\r
+\r
ed.execCommand('FontName', false, v);\r
+\r
+ // Fake selection, execCommand will fire a nodeChange and update the selection\r
+ c.select(function(sv) {\r
+ return v == sv;\r
+ });\r
+\r
return false; // No auto select\r
}\r
});\r
var t = this, ed = t.editor, c, i = 0, cl = [];\r
\r
c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) {\r
- if (v.fontSize)\r
- ed.execCommand('FontSize', false, v.fontSize);\r
- else {\r
- each(t.settings.theme_advanced_font_sizes, function(v, k) {\r
- if (v['class'])\r
- cl.push(v['class']);\r
- });\r
+ var cur = c.items[c.selectedIndex];\r
+\r
+ if (!v && cur) {\r
+ cur = cur.value;\r
\r
- ed.editorCommands._applyInlineStyle('span', {'class' : v['class']}, {check_classes : cl});\r
+ if (cur['class']) {\r
+ ed.formatter.toggle('fontsize_class', {value : cur['class']});\r
+ ed.undoManager.add();\r
+ ed.nodeChanged();\r
+ } else {\r
+ ed.execCommand('FontSize', false, cur.fontSize);\r
+ }\r
+\r
+ return;\r
}\r
\r
+ if (v['class']) {\r
+ ed.focus();\r
+ ed.undoManager.add();\r
+ ed.formatter.toggle('fontsize_class', {value : v['class']});\r
+ ed.undoManager.add();\r
+ ed.nodeChanged();\r
+ } else\r
+ ed.execCommand('FontSize', false, v.fontSize);\r
+\r
+ // Fake selection, execCommand will fire a nodeChange and update the selection\r
+ c.select(function(sv) {\r
+ return v == sv;\r
+ });\r
+\r
return false; // No auto select\r
}});\r
\r
},\r
\r
resizeTo : function(w, h) {\r
- var ed = this.editor, s = ed.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'), dh;\r
+ var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr');\r
\r
// Boundery fix box\r
w = Math.max(s.theme_advanced_resizing_min_width || 100, w);\r
w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w);\r
h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h);\r
\r
- // Calc difference between iframe and container\r
- dh = e.clientHeight - ifr.clientHeight;\r
-\r
// Resize iframe and container\r
- DOM.setStyle(ifr, 'height', h - dh);\r
- DOM.setStyles(e, {width : w, height : h});\r
+ DOM.setStyle(e, 'height', '');\r
+ DOM.setStyle(ifr, 'height', h);\r
+\r
+ if (s.theme_advanced_resize_horizontal) {\r
+ DOM.setStyle(e, 'width', '');\r
+ DOM.setStyle(ifr, 'width', w);\r
+\r
+ // Make sure that the size is never smaller than the over all ui\r
+ if (w < e.clientWidth)\r
+ DOM.setStyle(ifr, 'width', e.clientWidth);\r
+ }\r
},\r
\r
destroy : function() {\r
if (!o)\r
return;\r
\r
- if (s.theme_advanced_resize_horizontal)\r
- c.style.width = Math.max(10, o.cw) + 'px';\r
-\r
- c.style.height = Math.max(10, o.ch) + 'px';\r
- DOM.get(ed.id + '_ifr').style.height = Math.max(10, parseInt(o.ch) + t.deltaHeight) + 'px';\r
+ t.resizeTo(o.cw, o.ch);\r
});\r
}\r
\r
ed.onPostRender.add(function() {\r
Event.add(ed.id + '_resize', 'mousedown', function(e) {\r
- var c, p, w, h, n, pa;\r
-\r
- // Measure container\r
- c = DOM.get(ed.id + '_tbl');\r
- w = c.clientWidth;\r
- h = c.clientHeight;\r
-\r
- miw = s.theme_advanced_resizing_min_width || 100;\r
- mih = s.theme_advanced_resizing_min_height || 100;\r
- maw = s.theme_advanced_resizing_max_width || 0xFFFF;\r
- mah = s.theme_advanced_resizing_max_height || 0xFFFF;\r
-\r
- // Setup placeholder\r
- p = DOM.add(DOM.get(ed.id + '_parent'), 'div', {'class' : 'mcePlaceHolder'});\r
- DOM.setStyles(p, {width : w, height : h});\r
-\r
- // Replace with placeholder\r
- DOM.hide(c);\r
- DOM.show(p);\r
-\r
- // Create internal resize obj\r
- r = {\r
- x : e.screenX,\r
- y : e.screenY,\r
- w : w,\r
- h : h,\r
- dx : null,\r
- dy : null\r
- };\r
+ var mouseMoveHandler1, mouseMoveHandler2,\r
+ mouseUpHandler1, mouseUpHandler2,\r
+ startX, startY, startWidth, startHeight, width, height, ifrElm;\r
\r
- // Start listening\r
- mf = Event.add(DOM.doc, 'mousemove', function(e) {\r
- var w, h;\r
-\r
- // Calc delta values\r
- r.dx = e.screenX - r.x;\r
- r.dy = e.screenY - r.y;\r
-\r
- // Boundery fix box\r
- w = Math.max(miw, r.w + r.dx);\r
- h = Math.max(mih, r.h + r.dy);\r
- w = Math.min(maw, w);\r
- h = Math.min(mah, h);\r
-\r
- // Resize placeholder\r
- if (s.theme_advanced_resize_horizontal)\r
- p.style.width = w + 'px';\r
-\r
- p.style.height = h + 'px';\r
-\r
- return Event.cancel(e);\r
- });\r
+ function resizeOnMove(e) {\r
+ width = startWidth + (e.screenX - startX);\r
+ height = startHeight + (e.screenY - startY);\r
\r
- me = Event.add(DOM.doc, 'mouseup', function(e) {\r
- var ifr;\r
+ t.resizeTo(width, height);\r
+ };\r
\r
+ function endResize(e) {\r
// Stop listening\r
- Event.remove(DOM.doc, 'mousemove', mf);\r
- Event.remove(DOM.doc, 'mouseup', me);\r
-\r
- c.style.display = '';\r
- DOM.remove(p);\r
-\r
- if (r.dx === null)\r
- return;\r
-\r
- ifr = DOM.get(ed.id + '_ifr');\r
-\r
- if (s.theme_advanced_resize_horizontal)\r
- c.style.width = Math.max(10, r.w + r.dx) + 'px';\r
-\r
- c.style.height = Math.max(10, r.h + r.dy) + 'px';\r
- ifr.style.height = Math.max(10, ifr.clientHeight + r.dy) + 'px';\r
+ Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1);\r
+ Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2);\r
+ Event.remove(DOM.doc, 'mouseup', mouseUpHandler1);\r
+ Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2);\r
\r
+ // Store away the size\r
if (s.theme_advanced_resizing_use_cookie) {\r
Cookie.setHash("TinyMCE_" + ed.id + "_size", {\r
- cw : r.w + r.dx,\r
- ch : r.h + r.dy\r
+ cw : width,\r
+ ch : height\r
});\r
}\r
- });\r
+ };\r
+\r
+ e.preventDefault();\r
\r
- return Event.cancel(e);\r
+ // Get the current rect size\r
+ startX = e.screenX;\r
+ startY = e.screenY;\r
+ ifrElm = DOM.get(t.editor.id + '_ifr');\r
+ startWidth = width = ifrElm.clientWidth;\r
+ startHeight = height = ifrElm.clientHeight;\r
+\r
+ // Register envent handlers\r
+ mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove);\r
+ mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove);\r
+ mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize);\r
+ mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize);\r
});\r
});\r
}\r
},\r
\r
_nodeChanged : function(ed, cm, n, co, ob) {\r
- var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn;\r
+ var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, formatNames, matches;\r
\r
tinymce.each(t.stateControls, function(c) {\r
cm.setActive(c, ed.queryCommandState(t.controls[c][1]));\r
if (c = cm.get('styleselect')) {\r
t._importClasses();\r
\r
- // Check each format and update\r
- c.select(function(fmt) {\r
- return !!ed.formatter.match(fmt);\r
+ formatNames = [];\r
+ each(c.items, function(item) {\r
+ formatNames.push(item.value);\r
});\r
+\r
+ matches = ed.formatter.matchAll(formatNames);\r
+ c.select(matches[0]);\r
}\r
\r
if (c = cm.get('formatselect')) {\r