continue;
}
if (ar[i].name == 'id') { // always keep ids?
- continue;
+ continue;
+ }
+ if (ar[i].name == 'style') {
+ throw "style removed?";
}
+ Roo.log("removeAttribute" + ar[i].name);
from.removeAttribute(ar[i].name);
}
ar = to.attributes;
if (from.getAttribute(ar[i].name) == to.getAttribute(ar[i].name)) {
continue;
}
+ Roo.log("updateAttribute " + from.getAttribute(ar[i].name) + '=>' + to.getAttribute(ar[i].name));
from.setAttribute(ar[i].name, to.getAttribute(ar[i].name));
}
// children
-/**
- * Originally based of this code... - refactored for Roo...
- * https://github.com/aaalsaleh/undo-manager
-
- * undo-manager.js
- * @author Abdulrahman Alsaleh
- * @copyright 2015 Abdulrahman Alsaleh
- * @license MIT License (c)
- *
- * Hackily modifyed by alan@roojs.com
- *
- *
- * usage:
- * document.undoManager = new UndoManager(limit, document)
- *
- *
- * TOTALLY UNTESTED...
- *
- * Documentation to be done....
- */
-
-function UndoManager(limit, undoScopeHost) {
- var stack = [];
- var fireEvent = typeof CustomEvent != 'undefined' && undoScopeHost && undoScopeHost.dispatchEvent;
-
- this.position = 0;
- this.length = 0;
-
-}
-
-Roo.UndoManager.prototype = {
- transact : function (transaction, merge)
- {
- if (arguments.length < 2)
- throw new TypeError('Not enough arguments to UndoManager.transact.');
-
- transaction.execute();
-
- stack.splice(0, this.position);
- if (merge && this.length)
- stack[0].push(transaction);
- else
- stack.unshift([transaction]);
- this.position = 0;
-
- if (limit && stack.length > limit)
- this.length = stack.length = limit;
- else
- this.length = stack.length;
-
- if (fireEvent)
- undoScopeHost.dispatchEvent(new CustomEvent('DOMTransaction', {detail: {transactions: stack[0].slice()}, bubbles: true, cancelable: false}));
- },
-
- undo : function ()
- {
- if (this.position < this.length) {
- for (var i = stack[this.position].length - 1; i >= 0; i--)
- stack[this.position][i].undo();
- this.position++;
-
- if (fireEvent)
- undoScopeHost.dispatchEvent(new CustomEvent('undo', {detail: {transactions: stack[this.position - 1].slice()}, bubbles: true, cancelable: false}));
- }
- },
-
- redo : function () {
- if (this.position > 0) {
- for (var i = 0, n = stack[this.position - 1].length; i < n; i++)
- stack[this.position - 1][i].redo();
- this.position--;
-
- if (fireEvent)
- undoScopeHost.dispatchEvent(new CustomEvent('redo', {detail: {transactions: stack[this.position].slice()}, bubbles: true, cancelable: false}));
- }
- },
-
- item : function (index)
- {
- if (index >= 0 && index < this.length)
- return stack[index].slice();
- return null;
- },
-
- clearUndo : function () {
- stack.length = this.length = this.position;
- },
-
- clearRedo : function () {
- stack.splice(0, this.position);
- this.position = 0;
- this.length = stack.length;
- }
-}
\ No newline at end of file
return Roo.htmleditor.Block.cache[id];
}
- var cls = Roo.htmleditor['Block' + Roo.get(node).attr('data-block')];
+ var cls = Roo.htmleditor['Block' + node.getAttribute('data-block')];
if (typeof(cls) == 'undefined') {
- Roo.log("OOps missing block : " + 'Block' + Roo.get(node).attr('data-block'));
+ Roo.log("OOps missing block : " + 'Block' + node.getAttribute('data-block'));
return false;
}
Roo.htmleditor.Block.cache[id] = new cls({ node: node });
return n.innerHTML;
}
if (attr == 'style') {
- return Roo.get(n).getStyle(style);
+ return n.style[style]
}
return Roo.get(n).attr(attr);
tag : 'td',
contenteditable : 'true',
'data-block' : 'Td',
- html : cell.html
+ html : cell.html,
+ style : cell.style
};
if (cell.colspan > 1) {
td.colspan = cell.colspan ;
td.rowspan = cell.rowspan ;
}
- if (cell.textAlign != '') {
- td.style = {
- 'text-align' : cell.textAlign,
- border : '1px solid #000'
- };
- }
+
// widths ?
tr.cn.push(td);
if (Roo.get(td).hasClass('roo-html-editor-el')) { // ??? this is for our 'row' selection'
return;
}
- var add ={
+ var add = {
colspan : td.hasAttribute('colspan') ? td.getAttribute('colspan') : 1,
rowspan : td.hasAttribute('rowspan') ? td.getAttribute('rowspan') : 1,
- textAlign : this.getVal(node, true, 'style', 'text-align'),
+ style : td.hasAttribute('style') ? td.getAttribute('style') : '',
html : td.innerHTML
}
no_column += add.colspan;
this.updateElement();
},
-
- joinCells: function(sels)
- {
-
-
- if (sels.length < 0 ) {
- Roo.MessageBox.alert("Select something to join");
- return;
- }
- if (sels.length < 1 ) {
- if (sels[i].type == 'cell') {
- Roo.MessageBox.alert("You must select more than 1 cell to join");
- return;
- }
- if (sels[i].type == 'row' ) {
- this.joinRow(sels[i].row);
- return;
- }
-
- this.joinCol(sels[i].col, 0, -1);
- return;
-
- }
- // how to tell if we are joining a row of cells or colums.
- var r = sels[0].row , c = sels[0].col ;
- for (var i = 1 ; i < sels.length; i++) {
-
- if (sels[i].type != 'cell') {
- Roo.MessageBox.alert("you can only join cells to join");
- return;
- }
-
- if (sels[i].colspan > 1 || sels[i].rowspan > 1 ) {
- Roo.MessageBox.alert("you can only join un-joined cells (unjoin them first)");
- return;
- }
- if (typeof(r) != 'object' && r == sels[i].row ) {
- if (typeof(c) === 'object') {
- c.push(sels[i].col);
- continue;
- }
- c = [ c ];
- c.push(sels[i].col);
- continue;
- }
- if (typeof(c) != 'object' && c == sels[i].col) {
- if (typeof(r) === 'object') {
- r.push(sels[i].row);
- continue;
- }
- r = [ r ];
- r.push(sels[i].row);
- continue;
- }
- Roo.MessageBox.alert("you can only join a row or column, not both");
- return;
-
- }
-
-
- // at this point either r or c is an array
- if (typeof(r) === 'object') {
- // c contins column
- // r is a list of arrays.
- r.sort();
- var html = grid[r[0]][c].html;
- for (var i = 1; i < r.length; i++) {
- if (r[i] != r[0]+1) {
- Roo.MessageBox.alert("Cells have to be next to each other");
- return;
- }
-
- }
- this.joinCol(c, r[0], r[r.length-1]);
-
- }
- if (typeof(rc) === 'object') {
- // c contins column
- // r is a list of arrays.
- c.sort();
- for (var i = 1; i < r.length; i++) {
- if (c[i] != c[0]+1) {
- Roo.MessageBox.alert("Cells have to be next to each other");
- return;
- }
-
- }
- this.joinRow(r, c[0], c[r.length-1]);
-
- }
-
-
- },
-
- joinCol : function(col, s, e)
- {
- var grid = this.normalizeRows();
- if (s === -1) {
- s = 0;
- e = grid.length;
- }
- var tg = grid[s][col].html;
- for (var i = s+1; i < e+1; i++) {
- html += '<br/>' + grid[i][col].html;
-
- this.rows[i].remove(grid[i][col]);
- }
- grid[s][col].html = html;
- grid[s][col].colspan = (e-s)+1; //???
-
- this.updateElement();
-
- },
- joinRow: function(row, s, e)
- {
- var grid = this.normalizeRows();
- if (s === -1) {
- s = 0;
- e = grid[row].length;
- }
- var html = grid[row][s].html;
- for (var i = s+1; i < e+1; i++) {
- html += ' ' + grid[row][i].html;
- this.rows[row].remove(grid[row][i]);
- }
- grid[r[0]][c].html = html;
- grid[r[0]][c].rowspan = (e-s)+1; //???
- this.updateElement();
- },
-
-
- splitCells : function(sel)
- {
- if (sels.type != 'cell') {
- Roo.MessageBox.alert("you can only join cells to join");
- return;
- }
- if (cell.colspan > 1 && cell.rowspan > 1) {
- Roo.MessageBox.alert("splitting a merged row+cel is not supported yet.");
- return;
- }
- var grid = this.normalizeRows();
- var cell = grid[sel.row][sel.col];
- if (cell.colspan ==1 && cell.rowspan == 1) {
- Roo.MessageBox.alert("select a merged cell to join");
- return;
- }
- var ix = this.rows[sel.row].indexOf(cell);
- if (cell.rowspan > 1) {
- this.splitCellsRow(sel.row, sel.col, cell.rowspan);
- } else {
- this.splitCellsCol(sel.row, sel.col, cell.colspan);
- }
-
- },
- splitCellsRow : function(row, col, num)
- {
- /// this means we have to look at each row below, and insert a cell after the first cell
- var grid = this.normalizeRows();
- grid[row][col].rowspan = 1;
- for(var r = row+1; r < num+1;r++) {
- var nrow = [];
- var added = false;
- for(c = 0; c < this.rows[r].length;c++) {
- if (!added && this.rows[r][c].col > col) {
- nrow.push(this.emptyCell());
- added = true;
- }
- nrow.push(this.rows[r][c])
- }
- if (!added) {
- nrow.push(this.emptyCell());
- }
- this.row[r] = nrow;
-
- }
- this.updateElement();
-
- },
-
- splitCellsCol: function(row, col, num)
- {
- /// this means we have to look at each row below, and insert a cell after the first cell
- var grid = this.normalizeRows();
- grid[row][col].colspan = 1;
-
- var pos = this.rows[row].indexOf(grid[row][col]);
- var nrow = this.rows[row].slice(0, pos);
- var right = this.rows[row].slice(pos);
-
- for (var i = 1; i < num; i++) {
- nrow.push(this.emptyCell());
- }
-
- this.row[row] = nrow.concat(right);
- this.updateElement();
-
- },
+
// the default cell object... at present...
emptyCell : function() {
- return {
- colspan : 1,
- rowspan : 1,
- textAlign : 'left',
- html : " " // is this going to be editable now?
- };
+ return (new Roo.htmleditor.BlockTd({})).toObject();
+
},
};
var table = function() {
- return Roo.htmleditor.Block.factory(Roo.get(toolbar.tb.selectedNode).findParent('table'));
+ return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode.closest('table'));
};
var lr = false;
text : 'Edit Table',
listeners : {
click : function() {
- var t = Roo.get(toolbar.tb.selectedNode).findParent('table');
+ var t = toolbar.tb.selectedNode.closest('table');
toolbar.editorcore.selectNode(t);
toolbar.editorcore.onEditorEvent();
}
click : function (_self, e)
{
saveSel();
- block().shrinkColumn();
+ cell().shrinkColumn();
syncValue();
restoreSel();
}
click : function (_self, e)
{
saveSel();
- block().growColumn();
+ cell().growColumn();
syncValue();
restoreSel();
}
tag : 'td',
contenteditable : 'true', // this stops cell selection from picking the table.
'data-block' : 'Td',
- style : {
+ width: this.width,
+ style : {
width: this.width,
'text-align' : this.textAlign,
- border : 'solid 1px #000', // ??? hard coded?
+ border : 'solid 1px rgb(0, 0, 0)', // ??? hard coded?
'border-collapse' : 'collapse',
},
html : this.html
readElement : function(node)
{
node = node ? node : this.node ;
- this.width = this.getVal(node, true, 'style', 'width');
+ this.width = node.style.width;
+
this.html = node.innerHTML;
removeNode : function()
{
- return Roo.get(this.node).findParent('table');
+ return this.node.closest('table');
},
cellData : false,
+ colWidths : false,
+
toTableArray : function()
{
var ret = [];
ret[ri] = [];
});
var rn = 0;
-
+ this.colWidths = [];
+ var all_auto = true;
Array.from(tab.rows).forEach(function(r, ri){
var cn = 0;
}
c.col = cn;
}
-
+
+ if (typeof(this.colWidths[cn]) == 'undefined') {
+ this.colWidths[cn] = ce.style.width;
+ if (this.colWidths[cn] != '') {
+ all_auto = false;
+ }
+ }
+
if (c.colspan < 2 && c.rowspan < 2 ) {
ret[rn][cn] = c;
}, this);
rn++;
}, this);
+
+ // initalize widths.?
+ // either all widths or no widths..
+ if (all_auto) {
+ this.colWidths[0] = false; // no widths flag.
+ }
+
+
return ret;
},
+
+
+
mergeRight: function()
{
var cd = this.cellData;
this.rowspan = 1;
this.colspan = 1;
+
for(var r = cd.row; r < cd.row + cd.rowspan; r++) {
- for(var c = cd.col; r < cd.col+ cd.colspan; c++) {
+
+
+
+ for(var c = cd.col; c < cd.col + cd.colspan; c++) {
if (r == cd.row && c == cd.col) {
- this.node.setAttribute('rowspan',this.rowspan);
- this.node.setAttribute('colspan',this.colspan);
+ this.node.removeAttribute('rowspan');
+ this.node.removeAttribute('colspan');
+ continue;
+ }
+
+ var ntd = this.node.cloneNode(); // which col/row should be 0..
+ ntd.removeAttribute('id'); //
+ //ntd.style.width = '';
+ ntd.innerHTML = '';
+ table[r][c] = { cell : ntd, col : c, row: r , colspan : 1 , rowspan : 1 };
+ }
+
+ }
+ this.redrawAllCells(table);
+
+
+
+ },
+
+
+
+ redrawAllCells: function(table)
+ {
+
+
+ var tab = this.node.closest('tr').closest('table');
+ Array.from(tab.rows).forEach(function(r, ri){
+ Array.from(r.cells).forEach(function(ce, ci){
+ ce.parentNode.removeChild(ce);
+ });
+ });
+ for(var r = 0 ; r < table.length; r++) {
+ var re = tab.rows[r];
+ for(var c = 0 ; c < table[r].length; c++) {
+ if (table[r][c].cell === false) {
continue;
}
- // create a cell. = need the left most cell.
-
- var l = { r: r , c: c - 1 };
- while(table[l.r][l.c].row != r && l.c > -1) {
- l.c--;
+ re.appendChild(table[r][c].cell);
+
+ table[r][c].cell = false;
+ }
+ }
+
+ },
+ updateWidths : function(table)
+ {
+ for(var r = 0 ; r < table.length; r++) {
+
+ for(var c = 0 ; c < table[r].length; c++) {
+ if (table[r][c].cell === false) {
+ continue;
}
- if (l.c < 0) { //?? will this happen?
- throw "cant find left cell?";
+
+ if (this.colWidths[0] != false && table[r][c].colspan < 2) {
+ var el = Roo.htmleditor.Block.factory(table[r][c].cell);
+ el.width = Math.floor(this.colWidths[c]) +'%';
+ el.updateElement(el.node);
}
- var ntd = this.node.ownerDocument.createElement('td');
- table[l.r][l.c].cell.parentNode.insertBefore(ntd, table[l.r][l.c].cell.nextSibling);
- table[r][c] = { cell : ntd, col : c, row: r , colspan : 1 , rowspan : 1 };
+ table[r][c].cell = false; // done
}
+ }
+ },
+ normalizeWidths : function(table)
+ {
+
+ if (this.colWidths[0] === false) {
+ var nw = 100.0 / this.colWidths.length;
+ this.colWidths.forEach(function(w,i) {
+ this.colWidths[i] = nw;
+ },this);
+ return;
+ }
+
+ var t = 0, missing = [];
+
+ this.colWidths.forEach(function(w,i) {
+ //if you mix % and
+ this.colWidths[i] = this.colWidths[i] == '' ? 0 : (this.colWidths[i]+'').replace(/[^0-9]+/g,'')*1;
+ var add = this.colWidths[i];
+ if (add > 0) {
+ t+=add;
+ return;
+ }
+ missing.push(i);
+ },this);
+ var nc = this.colWidths.length;
+ if (missing.length) {
+ var mult = (nc - missing.length) / (1.0 * nc);
+ var t = mult * t;
+ var ew = (100 -t) / (1.0 * missing.length);
+ this.colWidths.forEach(function(w,i) {
+ if (w > 0) {
+ this.colWidths[i] = w * mult;
+ return;
+ }
+
+ this.colWidths[i] = ew;
+ }, this);
+ // have to make up numbers..
+
}
+ // now we should have all the widths..
-
-
-
- }
+ },
+
+ shrinkColumn : function()
+ {
+ var table = this.toTableArray();
+ this.normalizeWidths(table);
+ var col = this.cellData.col;
+ var nw = this.colWidths[col] * 0.8;
+ if (nw < 5) {
+ return;
+ }
+ var otherAdd = (this.colWidths[col] * 0.2) / (this.colWidths.length -1);
+ this.colWidths.forEach(function(w,i) {
+ if (i == col) {
+ this.colWidths[i] = nw;
+ return;
+ }
+ this.colWidths[i] += otherAdd
+ }, this);
+ this.updateWidths(table);
+
+ },
+ growColumn : function()
+ {
+ var table = this.toTableArray();
+ this.normalizeWidths(table);
+ var col = this.cellData.col;
+ var nw = this.colWidths[col] * 1.2;
+ if (nw > 90) {
+ return;
+ }
+ var otherSub = (this.colWidths[col] * 0.2) / (this.colWidths.length -1);
+ this.colWidths.forEach(function(w,i) {
+ if (i == col) {
+ this.colWidths[i] = nw;
+ return;
+ }
+ this.colWidths[i] -= otherSub
+ }, this);
+ this.updateWidths(table);
+
+ }
})
var sel = this.core.win.getSelection();
sel.removeAllRanges();
sel.addRange(range);
+ this.core.undoManager.addEvent();
return false;
//add the br, or p, or something else
newEle = doc.createElement('br');
docFragment.appendChild(newEle);
-
- //make the br replace selection
-
range.deleteContents();
-
range.insertNode(docFragment);
- range = range.cloneRange();
- range.collapse(true);
+
+ var ns = newEle.nextSibling
+ while (ns && ns.nodeType == 3) {
+ ns = ns.nextSibling;
+ }
+
+ if (!ns) {
+ ns = doc.createElement('br');
+ newEle.parentNode.appendChild(ns);
+ }
+
+
+ range = doc.createRange();
+ range.setStart(ns, 0);
+ range.setEnd(ns, 0);
+ range.collapse(false);
+
var sel = this.core.win.getSelection();
sel.removeAllRanges();
sel.addRange(range);
- sel.collapseToEnd();
-
+ this.core.undoManager.addEvent();
return false;
}
Roo.lib.Easing
Roo.lib.Motion
Roo.lib.Scroll
+Roo.lib.UndoManager
// --- end if base ---
{
"name" : "getFieldValues",
"type" : "function",
- "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.",
- "sig" : "()\n{\n\n}",
+ "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.\nNormally this will not return readOnly data",
+ "sig" : "(with_readonly)",
"static" : false,
"memberOf" : "",
"isStatic" : false,
"see" : "",
"exceptions" : "",
"requires" : "",
- "params" : [],
+ "params" : [
+ {
+ "name" : "with_readonly",
+ "type" : "Boolean",
+ "desc" : "return readonly field data.",
+ "isOptional" : false
+ }
+ ],
"returns" : [
{
"name" : "",
{
"name" : "getFieldValues",
"type" : "function",
- "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.",
- "sig" : "()\n{\n\n}",
+ "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.\nNormally this will not return readOnly data",
+ "sig" : "(with_readonly)",
"static" : false,
"memberOf" : "Roo.form.BasicForm",
"isStatic" : false,
"see" : "",
"exceptions" : "",
"requires" : "",
- "params" : [],
+ "params" : [
+ {
+ "name" : "with_readonly",
+ "type" : "Boolean",
+ "desc" : "return readonly field data.",
+ "isOptional" : false
+ }
+ ],
"returns" : [
{
"name" : "",
"tree_children" : [],
"tree_parent" : []
},
+ "Roo.lib.UndoManager" : {
+ "props" : [],
+ "events" : [],
+ "methods" : [
+ {
+ "name" : "addEvent",
+ "type" : "function",
+ "desc" : "Manually add an event.\nNormall called without arguements - and it will just get added to the stack.",
+ "sig" : "()\n{\n\n}",
+ "static" : false,
+ "memberOf" : "",
+ "isStatic" : false,
+ "isConstructor" : false,
+ "isPrivate" : false,
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "exceptions" : "",
+ "requires" : "",
+ "params" : [],
+ "returns" : []
+ },
+ {
+ "name" : "reset",
+ "type" : "function",
+ "desc" : "Reset the undo - probaly done on load to clear all history.",
+ "sig" : "()\n{\n\n}",
+ "static" : false,
+ "memberOf" : "",
+ "isStatic" : false,
+ "isConstructor" : false,
+ "isPrivate" : false,
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "exceptions" : "",
+ "requires" : "",
+ "params" : [],
+ "returns" : []
+ },
+ {
+ "name" : "transact",
+ "type" : "function",
+ "desc" : "To push and execute a transaction, the method undoManager.transact\nmust be called by passing a transaction object as the first argument, and a merge\nflag as the second argument. A transaction object has the following properties:\n\nUsage:\n<pre><code>\nundoManager.transact({\n label: 'Typing',\n execute: function() { ... },\n undo: function() { ... },\n // redo same as execute\n redo: function() { this.execute(); }\n}, false);\n\n// merge transaction\nundoManager.transact({\n label: 'Typing',\n execute: function() { ... }, // this will be run...\n undo: function() { ... }, // what to do when undo is run.\n // redo same as execute\n redo: function() { this.execute(); }\n}, true); \n</code></pre>",
+ "sig" : "(transaction)",
+ "static" : false,
+ "memberOf" : "",
+ "isStatic" : false,
+ "isConstructor" : false,
+ "isPrivate" : false,
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "exceptions" : "",
+ "requires" : "",
+ "params" : [
+ {
+ "name" : "transaction",
+ "type" : "Object",
+ "desc" : "The transaction to add to the stack.",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [
+ {
+ "name" : "",
+ "type" : "String",
+ "desc" : "The HTML fragment"
+ }
+ ]
+ }
+ ],
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "implementations" : [],
+ "tree_children" : [],
+ "tree_parent" : []
+ },
"Roo.menu" : {
"props" : [],
"events" : [],
</span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
}
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'id'</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// always keep ids?
- </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
+ }
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">"style removed?"</span><span class="jsdoc-syntax">;
}
+ </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"removeAttribute" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-var">from.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">);
}
</span><span class="jsdoc-var">ar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">to.attributes</span><span class="jsdoc-syntax">;
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">from.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-var">to.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">)) {
</span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
}
+ </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"updateAttribute " </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">from.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">) + </span><span class="jsdoc-string">'=>' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">to.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">));
</span><span class="jsdoc-var">from.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">to.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">));
}
</span><span class="jsdoc-comment">// children
</span><span class="jsdoc-var">bodyCls </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
+
+ </span><span class="jsdoc-var">undoManager </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
</span><span class="jsdoc-comment">/**
* Protected method that will not generally be called directly. It
* is called when the editor initializes the iframe with HTML contents. Override this method if you
</span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc.readyState </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'complete'</span><span class="jsdoc-syntax">){
</span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
</span><span class="jsdoc-var">this.doc.designMode</span><span class="jsdoc-syntax">=</span><span class="jsdoc-string">"on"</span><span class="jsdoc-syntax">;
+
} </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
</span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
}
{
</span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"HtmlEditorCore:syncValue (EDITOR->TEXT)"</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.initialized</span><span class="jsdoc-syntax">){
+
+ </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
+
+
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">bd </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc.documentElement</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-comment">//this.cleanUpPaste(); -- this is done else where and causes havoc..
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">cd.getData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'text/html'</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// clipboard event
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">parser </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.rtf.Parser</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cd.getData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'text/rtf'</span><span class="jsdoc-syntax">));
- </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">images </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">parser.doc.getElementsByType</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'pict'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">images </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">parser.doc </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">parser.doc.getElementsByType</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'pict'</span><span class="jsdoc-syntax">) : [];
</span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">images</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-comment">//Roo.log(imgs);
// fixme..
</span><span class="jsdoc-var">onFirstFocus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
</span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
-
+ </span><span class="jsdoc-var">this.undoManager </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.lib.UndoManager</span><span class="jsdoc-syntax">(100,(</span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc.documentElement</span><span class="jsdoc-syntax">));
</span><span class="jsdoc-var">this.activated </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
}
</span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"formatblock"</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">tg</span><span class="jsdoc-syntax">);
-
+ </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
},
</span><span class="jsdoc-var">insertText </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">txt</span><span class="jsdoc-syntax">)
</span><span class="jsdoc-comment">//alert(Sender.getAttribute('label'));
</span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.createTextNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">txt</span><span class="jsdoc-syntax">));
+ </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
} ,
</span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">win.getSelection</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.getRangeAt</span><span class="jsdoc-syntax">(0);
</span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">range.createContextualFragment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">;
</span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.cloneRange</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-var">range.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+
+ </span><span class="jsdoc-var">win.getSelection</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.removeAllRanges</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-var">win.getSelection</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">);
+
+
+
} </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">win.document.selection </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">win.document.selection.createRange</span><span class="jsdoc-syntax">) {
</span><span class="jsdoc-comment">// no firefox support
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">txt </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">text </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">text.outerHTML</span><span class="jsdoc-syntax">;
</span><span class="jsdoc-var">win.document.selection.createRange</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.pasteHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">txt</span><span class="jsdoc-syntax">);
+
} </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
</span><span class="jsdoc-comment">// no firefox support
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">txt </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">text </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">text.outerHTML</span><span class="jsdoc-syntax">;
</span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'InsertHTML'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">txt</span><span class="jsdoc-syntax">);
}
-
</span><span class="jsdoc-var">this.syncValue</span><span class="jsdoc-syntax">();
</span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
*/
</span><span class="jsdoc-var">selectNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)
{
-
- </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodeRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.ownerDocument.createRange</span><span class="jsdoc-syntax">();
- </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
- </span><span class="jsdoc-var">nodeRange.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
- } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
- </span><span class="jsdoc-var">nodeRange.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
- }
- </span><span class="jsdoc-comment">//nodeRange.collapse(true);
- </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.win.getSelection</span><span class="jsdoc-syntax">();
- </span><span class="jsdoc-var">s.removeAllRanges</span><span class="jsdoc-syntax">();
- </span><span class="jsdoc-var">s.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeRange</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodeRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.ownerDocument.createRange</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
+ </span><span class="jsdoc-var">nodeRange.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
+ } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">nodeRange.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
+ }
+ </span><span class="jsdoc-comment">//nodeRange.collapse(true);
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.win.getSelection</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-var">s.removeAllRanges</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-var">s.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeRange</span><span class="jsdoc-syntax">);
},
</span><span class="jsdoc-var">getSelectedNode</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
</span><span class="jsdoc-comment">/**
* Returns the fields in this form as an object with key/value pairs.
* This differs from getValues as it calls getValue on each child item, rather than using dom data.
+ * Normally this will not return readOnly data
+ * @param {Boolean} with_readonly return readonly field data.
* @return {Object}
*/
- </span><span class="jsdoc-var">getFieldValues </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">with_hidden</span><span class="jsdoc-syntax">)
+ </span><span class="jsdoc-var">getFieldValues </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">with_readonly</span><span class="jsdoc-syntax">)
{
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.childForms</span><span class="jsdoc-syntax">) {
</span><span class="jsdoc-comment">// copy values from the child forms
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">= {};
</span><span class="jsdoc-var">this.items.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">){
- </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f.readOnly</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f.readOnly </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">with_readonly </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) {
</span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// skip read only values. - this is in theory to stop 'old' values being copied over new ones
// if a subform contains a copy of them.
// if you have subforms with the same editable data, you will need to copy the data back
</span><span class="jsdoc-var">this.editor.onFirstFocus</span><span class="jsdoc-syntax">();
</span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
}
- </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ev </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">ev.target </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'NOTARGET'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-comment">//Roo.log(ev ? ev.target : 'NOTARGET');
- </span><span class="jsdoc-comment">// http://developer.yahoo.com/yui/docs/simple-editor.js.html
+ // http://developer.yahoo.com/yui/docs/simple-editor.js.html
// selectNode - might want to handle IE?
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ev </span><span class="jsdoc-syntax">&&
(</span><span class="jsdoc-var">ev.type </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'mouseup' </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">ev.type </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'click' </span><span class="jsdoc-syntax">) &&
- </span><span class="jsdoc-var">ev.target </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">ev.target </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'BODY' </span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// && ev.target.tagName == 'IMG') {
+ </span><span class="jsdoc-var">ev.target </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">ev.target.tagName </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'BODY' </span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// && ev.target.tagName == 'IMG') {
// they have click on an image...
// let's see if we can change the selection...
</span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ev.target</span><span class="jsdoc-syntax">;
//this.editorcore.selectNode(sel);
</span><span class="jsdoc-syntax">}
+ </span><span class="jsdoc-var">Roo.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'.roo-ed-selection'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.editorcore.doc</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.removeClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'roo-ed-selection'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-comment">//Roo.get(node).addClass('roo-ed-selection');
-
- </span><span class="jsdoc-comment">//var updateFooter = sel ? false : true;
+ //var updateFooter = sel ? false : true;
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ans </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.editorcore.getAllAncestors</span><span class="jsdoc-syntax">();
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">left_label </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">;
</span><span class="jsdoc-comment">// ok see if we are editing a block?
- </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sel_el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">);
+
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">db </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
</span><span class="jsdoc-comment">// you are not actually selecting the block.
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">sel.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'data-block'</span><span class="jsdoc-syntax">)) {
</span><span class="jsdoc-var">db </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">;
} </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">&& !</span><span class="jsdoc-var">sel.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'contenteditable'</span><span class="jsdoc-syntax">)) {
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sel_el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-var">db </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel_el.findParent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'[data-block]'</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cepar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel_el.findParent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'[contenteditable=true]'</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">db </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">cepar </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">cepar.tagName </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'BODY'</span><span class="jsdoc-syntax">) {
</span><span class="jsdoc-comment">//if (db && !sel.hasAttribute('contenteditable') && sel.getAttribute('contenteditable') != 'true' ) {
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">db</span><span class="jsdoc-syntax">) {
</span><span class="jsdoc-var">block </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.htmleditor.Block.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">db</span><span class="jsdoc-syntax">);
+
+
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">block</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">db.className </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">' roo-ed-selection'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// since we removed it earlier... its not there..
</span><span class="jsdoc-var">tn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'BLOCK.' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">db.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'data-block'</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-comment">//this.editorcore.selectNode(db);
</span><span class="jsdoc-comment">// update attributes
- </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">block</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">block </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.tb.fields</span><span class="jsdoc-syntax">) {
</span><span class="jsdoc-var">this.tb.fields.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
</span><span class="jsdoc-var">e.setValue</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">block</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">e.name</span><span class="jsdoc-syntax">]);
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tb </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.Toolbar</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">wdiv</span><span class="jsdoc-syntax">);
- </span><span class="jsdoc-var">this.tb </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tb</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-comment">///this.tb = tb; // << this sets the active toolbar..
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tlist </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">block</span><span class="jsdoc-syntax">) {
</span><span class="jsdoc-var">tlist </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">block.contextMenu</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
}
{
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tb.selectedNode</span><span class="jsdoc-syntax">;
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">block</span><span class="jsdoc-syntax">) {
- </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.htmleditor.Block.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tb.selectedNode</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.removalNode</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.htmleditor.Block.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tb.selectedNode</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.removeNode</span><span class="jsdoc-syntax">();
}
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">) {
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ans </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.footerEls</span><span class="jsdoc-syntax">;
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">];
- </span><span class="jsdoc-comment">// pick
- </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.editorcore.createRange</span><span class="jsdoc-syntax">();
-
- </span><span class="jsdoc-var">range.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">);
- </span><span class="jsdoc-comment">//range.selectNode(sel);
-
-
- </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">selection </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.editorcore.getSelection</span><span class="jsdoc-syntax">();
- </span><span class="jsdoc-var">selection.removeAllRanges</span><span class="jsdoc-syntax">();
- </span><span class="jsdoc-var">selection.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">);
-
+ </span><span class="jsdoc-var">this.editorcore.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-var">this.updateToolbar</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">Roo.htmleditor.Block.cache</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">];
}
- </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cls </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.htmleditor</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">'Block' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.attr</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'data-block'</span><span class="jsdoc-syntax">)];
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cls </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.htmleditor</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">'Block' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">node.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'data-block'</span><span class="jsdoc-syntax">)];
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
- </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"OOps missing block : " </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'Block' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.attr</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'data-block'</span><span class="jsdoc-syntax">));
+ </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"OOps missing block : " </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'Block' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">node.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'data-block'</span><span class="jsdoc-syntax">));
</span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
}
</span><span class="jsdoc-var">Roo.htmleditor.Block.cache</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">});
</span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">n.innerHTML</span><span class="jsdoc-syntax">;
}
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">) {
- </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.getStyle</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">style</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">n.style</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">style</span><span class="jsdoc-syntax">]
}
</span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.attr</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-var">core </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
- </span><span class="jsdoc-var">keypress </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">keypress </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">)
+ {
</span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.charCode </span><span class="jsdoc-syntax">!= 13) {
</span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
}
</span><span class="jsdoc-var">range.deleteContents</span><span class="jsdoc-syntax">();
</span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">docFragment</span><span class="jsdoc-syntax">);
-
- </span><span class="jsdoc-comment">//create a new range
- </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">doc.createRange</span><span class="jsdoc-syntax">();
- </span><span class="jsdoc-var">range.setStartAfter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newEle</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.cloneRange</span><span class="jsdoc-syntax">();
</span><span class="jsdoc-var">range.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
-
- </span><span class="jsdoc-comment">//make the cursor there
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.core.win.getSelection</span><span class="jsdoc-syntax">();
</span><span class="jsdoc-var">sel.removeAllRanges</span><span class="jsdoc-syntax">();
</span><span class="jsdoc-var">sel.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">sel.collapseToEnd</span><span class="jsdoc-syntax">();
</span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
{
"name" : "getFieldValues",
"type" : "function",
- "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.",
- "sig" : "()\n{\n\n}",
+ "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.\nNormally this will not return readOnly data",
+ "sig" : "(with_readonly)",
"static" : false,
"memberOf" : "",
"isStatic" : false,
"see" : "",
"exceptions" : "",
"requires" : "",
- "params" : [],
+ "params" : [
+ {
+ "name" : "with_readonly",
+ "type" : "Boolean",
+ "desc" : "return readonly field data.",
+ "isOptional" : false
+ }
+ ],
"returns" : [
{
"name" : "",
{
"name" : "getFieldValues",
"type" : "function",
- "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.",
- "sig" : "()\n{\n\n}",
+ "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.\nNormally this will not return readOnly data",
+ "sig" : "(with_readonly)",
"static" : false,
"memberOf" : "Roo.form.BasicForm",
"isStatic" : false,
"see" : "",
"exceptions" : "",
"requires" : "",
- "params" : [],
+ "params" : [
+ {
+ "name" : "with_readonly",
+ "type" : "Boolean",
+ "desc" : "return readonly field data.",
+ "isOptional" : false
+ }
+ ],
"returns" : [
{
"name" : "",
"name" : "Roo.lib.RGBColor",
"cn" : [],
"is_class" : true
+ },
+ {
+ "name" : "Roo.lib.UndoManager",
+ "cn" : [],
+ "is_class" : true
}
],
"is_class" : false