html = this.cleanWordChars(html);
var d = (new DOMParser().parseFromString(html, 'text/html')).body;
- Roo.each(d.items, function(item) {
- Roo.log(item.kind);
+ Roo.log(cd.getData('text/rtf'));
+ Roo.log(cd.getData('text/richtext'));
+
+ Roo.each(cd.items, function(item) {
+ Roo.log(item);
});
new Roo.htmleditor.FilterStyleToTag({ node : d });
new Roo.htmleditor.FilterAttributes({
--- /dev/null
+
+/**
+ * @class Roo.htmleditor.KeyEnter
+ * Handle Enter press..
+ * @cfg {Roo.HtmlEditorCore} core the editor.
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+
+
+Roo.htmleditor.KeyEnter = function(cfg) {
+ Roo.apply(this, cfg);
+ // this does not actually call walk as it's really just a abstract class
+
+ Roo.get(this.core.doc.body).on('keypress', this.keypress, this);
+}
+
+
+Roo.htmleditor.KeyEnter.prototype = {
+
+ core : false,
+
+ keypress : function(e) {
+ if (e.charCode != 13) {
+ return true;
+ }
+ e.preventDefault();
+ // https://stackoverflow.com/questions/18552336/prevent-contenteditable-adding-div-on-enter-chrome
+ var doc = this.core.doc;
+
+ var docFragment = doc.createDocumentFragment();
+
+ //add a new line
+ var newEle = doc.createTextNode('\n');
+ docFragment.appendChild(newEle);
+
+
+ var range = this.core.win.getSelection().getRangeAt(0);
+ var n = range.commonAncestorContainer ;
+ while (n && n.nodeType != 1) {
+ n = n.parentNode;
+ }
+ var li = false;
+ if (n && n.tagName == 'UL') {
+ li = doc.createElement('LI');
+ n.appendChild(li);
+
+ }
+ if (n && n.tagName == 'LI') {
+ li = doc.createElement('LI');
+ if (n.nextSibling) {
+ n.parentNode.insertBefore(li, n.firstSibling);
+
+ } else {
+ n.parentNode.appendChild(li);
+ }
+ }
+ if (li) {
+ range = doc.createRange();
+ range.setStartAfter(li);
+ range.collapse(true);
+
+ //make the cursor there
+ var sel = this.core.win.getSelection();
+ sel.removeAllRanges();
+ sel.addRange(range);
+ 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);
+
+ //create a new range
+ range = doc.createRange();
+ range.setStartAfter(newEle);
+ range.collapse(true);
+
+ //make the cursor there
+ var sel = this.core.win.getSelection();
+ sel.removeAllRanges();
+ sel.addRange(range);
+
+ return false;
+
+ }
+};
+
\ No newline at end of file
--- /dev/null
+
+Roo.rtf.Ctrl = function(opts)
+{
+ this.value = opts.value;
+ this.param = opts.param;
+}
--- /dev/null
+
+Roo.rtf.Group = function(parent)
+{
+ // we dont want to acutally store parent - it will make debug a nightmare..
+ this.content = [];
+
+}
+Roo.rtf.Group.prototype = {
+ ignorable : false,
+ content: false,
+ addContent : function(node) {
+ // could set styles...
+ this.content.push(node);
+ },
+
+ // only for images really...
+ toDataURL : function()
+ {
+ var mimetype = false;
+ switch(true) {
+ case this.content.filter(function(a) { return a.value == 'pngblip' } ).length > 0:
+ mimetype = "image/png";
+ break;
+ case this.content.filter(function(a) { return a.value == 'jpegblip' } ).length > 0:
+ mimetype = "image/jpeg";
+ break;
+ default :
+ return 'about:blank'; // ?? error?
+ }
+
+
+ var hexstring = this.content[this.content.length-1].value;
+
+ return mimetype + ';base64,' + btoa(hexstring.match(/\w{2}/g).map(function(a) {
+ return String.fromCharCode(parseInt(a, 16));
+ }).join(""));
+ }
+
+}
\ No newline at end of file
--- /dev/null
+Roo.rtf.Hex = function(hex)
+{
+ this.hexstr = hex;
+}
--- /dev/null
+Roo.rtf.Paragraph = function(opts)
+{
+ this.content = []; ///??? is that used?
+}
\ No newline at end of file
--- /dev/null
+/**
+ *
+ *
+ * based on this https://github.com/iarna/rtf-parser
+ * it's really only designed to extract pict from pasted RTF
+ *
+ * usage:
+ *
+ * var images = new Roo.rtf.Parser().parse(a_string).filter(function(g) { return g.type == 'pict'; });
+ *
+ *
+ */
+
+
+
+
+
+Roo.rtf.Parser = function() {
+ //super({objectMode: true})
+ this.text = '';
+ this.parserState = this.parseText;
+
+ // these are for interpeter...
+ this.doc = document
+ ///this.parserState = this.parseTop
+ this.groupStack = []
+ this.hexStore = []
+ this.doc = false; //new Roo.rtf.Document();
+
+ this.groups = []; // where we put the return.
+ // default is to parse TEXT...
+
+}
+Roo.rtf.Parser.prototype = {
+ text : '', // string being parsed..
+ controlWord : '',
+ controlWordParam : '',
+ hexChar : '',
+ doc : false,
+ group: false,
+ groupStack : false,
+ hexStore : false,
+
+
+ cpos : 0,
+ row : 1, // reportin?
+ col : 1, //
+
+ parse : function (text) {
+
+ for (var ii = 0; ii < text.length; ++ii) {
+ ++this.cpos;
+
+ if (text[ii] === '\n') {
+ ++this.row;
+ this.col = 1;
+ } else {
+ ++this.col;
+ }
+ this.parserState(text[ii]);
+ }
+ return this.groups;
+ },
+
+ push : function (el)
+ {
+ var m = 'cmd'+ el.type;
+ if (typeof(this[m]) == 'undefined') {
+ Roo.log('invalid cmd:' + el.type);
+ return;
+ }
+ this[m](el);
+ //Roo.log(el);
+ },
+ flushHexStore : function()
+ {
+ if (this.hexStore.length < 1) {
+ return;
+ }
+ var hexstr = this.hexStore.map(
+ function(cmd) {
+ return cmd.value;
+ }).join('');
+
+ this.group.addContent( new Roo.rtf.Hex( hexstr ));
+ /*iconv.decode(
+ Buffer.from(hexstr, 'hex'), this.group.get('charset'))
+ }
+ )
+ */
+
+ this.hexStore.splice(0)
+
+ },
+
+ cmdgroupstart : function()
+ {
+ this.flushHexStore();
+ if (this.group) {
+ this.groupStack.push(this.group);
+ }
+ this.group = new Roo.rtf.Group(this.group || this.doc); // parent..
+ },
+ cmdignorable : function()
+ {
+ this.flushHexStore()
+ this.group.ignorable = true
+ },
+ cmdendparagraph : function()
+ {
+ this.flushHexStore()
+ this.group.addContent(new Roo.rtf.Paragraph())
+ },
+ cmdgroupend : function () {
+ this.flushHexStore();
+ var endingGroup = this.group;
+ this.group = this.groupStack.pop();
+
+ var doc = this.group || this.doc;
+ //if (endingGroup instanceof FontTable) {
+ // doc.fonts = endingGroup.table
+ //} else if (endingGroup instanceof ColorTable) {
+ // doc.colors = endingGroup.table
+ //} else if (endingGroup !== this.doc && !endingGroup.get('ignorable')) {
+ if (endingGroup.ignorable === false) {
+ //code
+ this.groups.push(endingGroup);
+ // Roo.log( endingGroup );
+ }
+ //Roo.each(endingGroup.content, function(item)) {
+ // doc.addContent(item);
+ //}
+ //process.emit('debug', 'GROUP END', endingGroup.type, endingGroup.get('ignorable'))
+ //}
+ },
+ cmdtext : function (cmd)
+ {
+ this.flushHexStore()
+ if (!this.group) { // an RTF fragment, missing the {\rtf1 header
+ //this.group = this.doc
+ }
+ this.group.addContent(new Roo.rtf.Span(cmd));
+ },
+ cmdcontrolword : function (cmd)
+ {
+ this.flushHexStore()
+ if (!this.group.type) {
+ this.group.type = cmd.value;
+ return;
+ }
+ this.group.addContent(new Roo.rtf.Ctrl(cmd));
+ // we actually don't care about ctrl words...
+ return ;
+ /*
+ var method = 'ctrl$' + cmd.value.replace(/-(.)/g, (_, char) => char.toUpperCase())
+ if (this[method]) {
+ this[method](cmd.param)
+ } else {
+ if (!this.group.get('ignorable')) process.emit('debug', method, cmd.param)
+ }
+ */
+ },
+ cmdhexchar : function(cmd) {
+ this.hexStore.push(cmd);
+ },
+ cmderror : function(cmd) {
+ throw new Exception (cmd.value);
+ },
+
+ /*
+ _flush (done) {
+ if (this.text !== '\u0000') this.emitText()
+ done()
+ }
+ */
+
+
+ parseText : function(c)
+ {
+ if (c === '\\') {
+ this.parserState = this.parseEscapes;
+ } else if (c === '{') {
+ this.emitStartGroup();
+ } else if (c === '}') {
+ this.emitEndGroup();
+ } else if (c === '\x0A' || c === '\x0D') {
+ // cr/lf are noise chars
+ } else {
+ this.text += c;
+ }
+ },
+
+ parseEscapes: function (c)
+ {
+ if (c === '\\' || c === '{' || c === '}') {
+ this.text += c;
+ this.parserState = this.parseText;
+ } else {
+ this.parserState = this.parseControlSymbol;
+ this.parseControlSymbol(c);
+ }
+ },
+ parseControlSymbol: function(c)
+ {
+ if (c === '~') {
+ this.text += '\u00a0'; // nbsp
+ this.parserState = this.parseText
+ } else if (c === '-') {
+ this.text += '\u00ad'; // soft hyphen
+ } else if (c === '_') {
+ this.text += '\u2011'; // non-breaking hyphen
+ } else if (c === '*') {
+ this.emitIgnorable();
+ this.parserState = this.parseText;
+ } else if (c === "'") {
+ this.parserState = this.parseHexChar;
+ } else if (c === '|') { // formula cacter
+ this.emitFormula();
+ this.parserState = this.parseText;
+ } else if (c === ':') { // subentry in an index entry
+ this.emitIndexSubEntry();
+ this.parserState = this.parseText;
+ } else if (c === '\x0a') {
+ this.emitEndParagraph();
+ this.parserState = this.parseText;
+ } else if (c === '\x0d') {
+ this.emitEndParagraph();
+ this.parserState = this.parseText;
+ } else {
+ this.parserState = this.parseControlWord;
+ this.parseControlWord(c);
+ }
+ },
+ parseHexChar: function (c)
+ {
+ if (/^[A-Fa-f0-9]$/.test(c)) {
+ this.hexChar += c;
+ if (this.hexChar.length >= 2) {
+ this.emitHexChar();
+ this.parserState = this.parseText;
+ }
+ return;
+ }
+ this.emitError("Invalid character \"" + c + "\" in hex literal.");
+ this.parserState = this.parseText;
+
+ },
+ parseControlWord : function(c)
+ {
+ if (c === ' ') {
+ this.emitControlWord();
+ this.parserState = this.parseText;
+ } else if (/^[-\d]$/.test(c)) {
+ this.parserState = this.parseControlWordParam;
+ this.controlWordParam += c;
+ } else if (/^[A-Za-z]$/.test(c)) {
+ this.controlWord += c;
+ } else {
+ this.emitControlWord();
+ this.parserState = this.parseText;
+ this.parseText(c);
+ }
+ },
+ parseControlWordParam : function (c) {
+ if (/^\d$/.test(c)) {
+ this.controlWordParam += c;
+ } else if (c === ' ') {
+ this.emitControlWord();
+ this.parserState = this.parseText;
+ } else {
+ this.emitControlWord();
+ this.parserState = this.parseText;
+ this.parseText(c);
+ }
+ },
+
+
+
+
+ emitText : function () {
+ if (this.text === '') {
+ return;
+ }
+ this.push({
+ type: 'text',
+ value: this.text,
+ pos: this.cpos,
+ row: this.row,
+ col: this.col
+ });
+ this.text = ''
+ },
+ emitControlWord : function ()
+ {
+ this.emitText();
+ if (this.controlWord === '') {
+ this.emitError('empty control word');
+ } else {
+ this.push({
+ type: 'controlword',
+ value: this.controlWord,
+ param: this.controlWordParam !== '' && Number(this.controlWordParam),
+ pos: this.cpos,
+ row: this.row,
+ col: this.col
+ });
+ }
+ this.controlWord = '';
+ this.controlWordParam = '';
+ },
+ emitStartGroup : function ()
+ {
+ this.emitText()
+ this.push({
+ type: 'groupstart',
+ pos: this.cpos,
+ row: this.row,
+ col: this.col
+ });
+ },
+ emitEndGroup : function ()
+ {
+ this.emitText();
+ this.push({
+ type: 'groupend',
+ pos: this.cpos,
+ row: this.row,
+ col: this.col
+ });
+ },
+ emitIgnorable : function ()
+ {
+ this.emitText();
+ this.push({
+ type: 'ignorable',
+ pos: this.cpos,
+ row: this.row,
+ col: this.col
+ });
+ },
+ emitHexChar : function ()
+ {
+ this.emitText();
+ this.push({
+ type: 'hexchar',
+ value: this.hexChar,
+ pos: this.cpos,
+ row: this.row,
+ col: this.col
+ });
+ this.hexChar = ''
+ },
+ emitError : function (message)
+ {
+ this.emitText();
+ this.push({
+ type: 'error',
+ value: message,
+ row: this.row,
+ col: this.col,
+ char: this.cpos //,
+ //stack: new Error().stack
+ });
+ },
+ emitEndParagraph : function () {
+ this.emitText();
+ this.push({
+ type: 'endparagraph',
+ pos: this.cpos,
+ row: this.row,
+ col: this.col
+ });
+ }
+
+}
\ No newline at end of file
--- /dev/null
+Roo.rtf.Span = function(opts)
+{
+ this.value = opts.value;
+}
--- /dev/null
+Roo.rtf = {}; // namespace
</span><span class="jsdoc-comment">// I think we better assume paste is going to be a dirty load of rubish from word..
// even pasting into a 'email version' of this widget will have to clean up that mess.
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cd </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">e.browserEvent.clipboardData </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">window.clipboardData</span><span class="jsdoc-syntax">);
- </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">e.browserEvent.clipboardData </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">window.clipboardData</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.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">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-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.cleanWordChars</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">DOMParser</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.parseFromString</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'text/html'</span><span class="jsdoc-syntax">))</span><span class="jsdoc-var">.body</span><span class="jsdoc-syntax">;
-
+ </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">d.items</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item.kind</span><span class="jsdoc-syntax">);
+ });
</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterStyleToTag</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">});
</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterAttributes</span><span class="jsdoc-syntax">({
</span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d</span><span class="jsdoc-syntax">,
</span><span class="jsdoc-var">tb.addFill</span><span class="jsdoc-syntax">();
</span><span class="jsdoc-var">tb.addButton</span><span class="jsdoc-syntax">({
- </span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Remove'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// remove the tag, and puts the children outside...
+ </span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Remove Block or Formating'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// remove the tag, and puts the children outside...
</span><span class="jsdoc-var">listeners </span><span class="jsdoc-syntax">: {
</span><span class="jsdoc-var">click </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
--- /dev/null
+<html><head><title>Roo/htmleditor/Block.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty">
+<span class="jsdoc-comment">/**
+ * @class Roo.htmleditor.Block
+ * Base class for html editor blocks - do not use it directly .. extend it..
+ * @cfg {DomElement} node The node to apply stuff to.
+ * @cfg {String} friendly_name the name that appears in the context bar about this block
+ * @cfg {Object} Context menu - see Roo.form.HtmlEditor.ToolbarContext
+
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+</span><span class="jsdoc-var">Roo.htmleditor.Block </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">)
+{
+ </span><span class="jsdoc-comment">// do nothing .. should not be called really.
+</span><span class="jsdoc-syntax">}
+
+</span><span class="jsdoc-var">Roo.htmleditor.Block.factory </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">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">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-keyword">return false</span><span class="jsdoc-syntax">;
+ }
+ </span><span class="jsdoc-keyword">return 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-comment">/// should trigger update element
+</span><span class="jsdoc-syntax">}
+
+
+</span><span class="jsdoc-var">Roo.htmleditor.Block.prototype </span><span class="jsdoc-syntax">= {
+
+ </span><span class="jsdoc-comment">// used by context menu
+ </span><span class="jsdoc-var">friendly_name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Image with caption'</span><span class="jsdoc-syntax">,
+
+ </span><span class="jsdoc-var">context </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-comment">/**
+ * Update a node with values from this object
+ * @param {DomElement} node
+ */
+ </span><span class="jsdoc-var">updateElement </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-var">Roo.DomHelper.update</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.toObject</span><span class="jsdoc-syntax">());
+ },
+ </span><span class="jsdoc-comment">/**
+ * convert to plain HTML for calling insertAtCursor..
+ */
+ </span><span class="jsdoc-var">toHTML </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
+ {
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">Roo.DomHelper.markup</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.toObject</span><span class="jsdoc-syntax">());
+ },
+ </span><span class="jsdoc-comment">/**
+ * used by readEleemnt to extract data from a node
+ * may need improving as it's pretty basic
+
+ * @param {DomElement} node
+ * @param {String} tag - tag to find, eg. IMG ?? might be better to use DomQuery ?
+ * @param {String} attribute (use html - for contents, or style for using next param as style)
+ * @param {String} style the style property - eg. text-align
+ */
+ </span><span class="jsdoc-var">getVal </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-var">tag</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">attr</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">style</span><span class="jsdoc-syntax">)
+ {
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n.tagName </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">tag.toUpperCase</span><span class="jsdoc-syntax">()) {
+ </span><span class="jsdoc-comment">// in theory we could do figure[3] << 3rd figure? or some more complex search..?
+ // but kiss for now.
+ </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.getElementsByTagName</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.item</span><span class="jsdoc-syntax">(0);
+ }
+ </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">'html'</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">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-comment">/**
+ * create a DomHelper friendly object - for use with
+ * Roo.DomHelper.markup / overwrite / etc..
+ * (override this)
+ */
+ </span><span class="jsdoc-var">toObject </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
+ {
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{};
+ },
+ </span><span class="jsdoc-comment">/**
+ * Read a node that has a 'data-block' property - and extract the values from it.
+ * @param {DomElement} node - the node
+ */
+ </span><span class="jsdoc-var">readElement </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></code></body></html>
\ No newline at end of file
--- /dev/null
+<html><head><title>Roo/htmleditor/BlockFigure.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty">
+
+<span class="jsdoc-comment">/**
+ * @class Roo.htmleditor.BlockFigure
+ * Block that has an image and a figcaption
+ * @cfg {String} image_src the url for the image
+ * @cfg {String} align (left|right) alignment for the block default left
+ * @cfg {String} text_align (left|right) alignment for the text caption default left.
+ * @cfg {String} caption the text to appear below (and in the alt tag)
+ * @cfg {String|number} image_width the width of the image number or %?
+ * @cfg {String|number} image_height the height of the image number or %?
+ *
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+</span><span class="jsdoc-var">Roo.htmleditor.BlockFigure </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">)
+{
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg.node</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">this.readElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg.node</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">this.updateElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg.node</span><span class="jsdoc-syntax">);
+ }
+ </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">);
+}
+</span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.htmleditor.BlockFigure</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.htmleditor.Block</span><span class="jsdoc-syntax">, {
+
+
+ </span><span class="jsdoc-comment">// setable values.
+ </span><span class="jsdoc-var">image_src</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
+
+ </span><span class="jsdoc-var">align</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'left'</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">caption </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">text_align</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'left'</span><span class="jsdoc-syntax">,
+
+ </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'46%'</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">margin</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'2%'</span><span class="jsdoc-syntax">,
+
+ </span><span class="jsdoc-comment">// used by context menu
+ </span><span class="jsdoc-var">friendly_name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Image with caption'</span><span class="jsdoc-syntax">,
+
+ </span><span class="jsdoc-var">context </span><span class="jsdoc-syntax">: { </span><span class="jsdoc-comment">// ?? static really
+ </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: {
+ </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"Width"</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
+ </span><span class="jsdoc-comment">// ?? number
+ </span><span class="jsdoc-syntax">},
+ </span><span class="jsdoc-var">margin </span><span class="jsdoc-syntax">: {
+ </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"Margin"</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
+ </span><span class="jsdoc-comment">// ?? number
+ </span><span class="jsdoc-syntax">},
+ </span><span class="jsdoc-var">align</span><span class="jsdoc-syntax">: {
+ </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"Align"</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">: [[ </span><span class="jsdoc-string">"left"</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">"right"</span><span class="jsdoc-syntax">]],
+ </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: 80
+
+ },
+ </span><span class="jsdoc-var">text_align</span><span class="jsdoc-syntax">: {
+ </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"Caption Align"</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">: [ [ </span><span class="jsdoc-string">"left"</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">"right"</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">"center"</span><span class="jsdoc-syntax">]],
+ </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: 80
+ },
+
+
+ </span><span class="jsdoc-var">image_src </span><span class="jsdoc-syntax">: {
+ </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">"Src"</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 220
+ }
+ },
+ </span><span class="jsdoc-comment">/**
+ * create a DomHelper friendly object - for use with
+ * Roo.DomHelper.markup / overwrite / etc..
+ */
+ </span><span class="jsdoc-var">toObject </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
+ {
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">document.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'div'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">d.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.caption</span><span class="jsdoc-syntax">;
+
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{
+ </span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'figure'</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-string">'data-block' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Figure'</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">contenteditable </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'false'</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">style </span><span class="jsdoc-syntax">: {
+ </span><span class="jsdoc-var">display</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'table'</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">float </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.align </span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.width</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">margin</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.margin
+ </span><span class="jsdoc-syntax">},
+ </span><span class="jsdoc-var">cn </span><span class="jsdoc-syntax">: [
+ {
+ </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'img'</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">src </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.image_src</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">alt </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d.innerText.replace</span><span class="jsdoc-syntax">(/\n/g, </span><span class="jsdoc-string">" "</span><span class="jsdoc-syntax">), </span><span class="jsdoc-comment">// removeHTML..
+ </span><span class="jsdoc-var">style</span><span class="jsdoc-syntax">: {
+ </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'100%'
+ </span><span class="jsdoc-syntax">}
+ },
+ {
+ </span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'figcaption'</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">contenteditable </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
+ </span><span class="jsdoc-var">style </span><span class="jsdoc-syntax">: {
+ </span><span class="jsdoc-string">'text-align'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.text_align
+ </span><span class="jsdoc-syntax">},
+ </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.caption
+
+ </span><span class="jsdoc-syntax">}
+ ]
+ };
+ },
+
+ </span><span class="jsdoc-var">readElement </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-var">this.image_src </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getVal</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'img'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'src'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">this.align </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getVal</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'figure'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'float'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">this.caption </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getVal</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'figcaption'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'html'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">this.text_align </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getVal</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'figcaption'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">,</span><span class="jsdoc-string">'text-align'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">this.width </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getVal</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'figure'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'width'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">this.margin </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getVal</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'figure'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'margin'</span><span class="jsdoc-syntax">);
+
+ }
+
+
+
+
+
+
+
+
+})
+
+</span></code></body></html>
\ No newline at end of file
--- /dev/null
+<html><head><title>Roo/htmleditor/FilterLongBr.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/**
+ * @class Roo.htmleditor.FilterLongBr
+ * BR/BR/BR - keep a maximum of 2...
+ * @constructor
+ * Run a new Long BR Filter
+ * @param {Object} config Configuration options
+ */
+
+</span><span class="jsdoc-var">Roo.htmleditor.FilterLongBr </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">)
+{
+ </span><span class="jsdoc-comment">// no need to apply config.
+ </span><span class="jsdoc-var">this.walk</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg.node</span><span class="jsdoc-syntax">);
+}
+
+</span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.htmleditor.FilterLongBr</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.htmleditor.Filter</span><span class="jsdoc-syntax">,
+{
+
+
+ </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'BR'</span><span class="jsdoc-syntax">,
+
+
+ </span><span class="jsdoc-var">replaceTag </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">ps </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.nextSibling</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">ps.nodeType </span><span class="jsdoc-syntax">== 3 && </span><span class="jsdoc-var">ps.nodeValue.trim</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.length </span><span class="jsdoc-syntax">< 1) {
+ </span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ps.nextSibling</span><span class="jsdoc-syntax">;
+ }
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">&& [ </span><span class="jsdoc-string">'TD'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TH'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'LI'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H1'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H2'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H3'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H4'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H5'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H6' </span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.parentNode.tagName</span><span class="jsdoc-syntax">) > -1) {
+ </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// remove last BR inside one fo these tags
+ </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+ }
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">ps.nodeType </span><span class="jsdoc-syntax">!= 1) {
+ </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+ }
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">ps.tagName </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'BR'</span><span class="jsdoc-syntax">) {
+
+ </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+ }
+
+
+
+
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">node.previousSibling</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+ }
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.previousSibling</span><span class="jsdoc-syntax">;
+
+ </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">ps.nodeType </span><span class="jsdoc-syntax">== 3 && </span><span class="jsdoc-var">ps.nodeValue.trim</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.length </span><span class="jsdoc-syntax">< 1) {
+ </span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ps.previousSibling</span><span class="jsdoc-syntax">;
+ }
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">ps.nodeType </span><span class="jsdoc-syntax">!= 1) {
+ </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+ }
+ </span><span class="jsdoc-comment">// if header or BR before.. then it's a candidate for removal.. - as we only want '2' of these..
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">ps </span><span class="jsdoc-syntax">|| [ </span><span class="jsdoc-string">'BR'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H1'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H2'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H3'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H4'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H5'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'H6' </span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ps.tagName</span><span class="jsdoc-syntax">) < 0) {
+ </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+ }
+
+ </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// remove me...
+
+ </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// no need to do children
+
+ </span><span class="jsdoc-syntax">}
+
+});</span></code></body></html>
\ No newline at end of file
--- /dev/null
+<html><head><title>Roo/htmleditor/FilterStyleToTag.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty">
+<span class="jsdoc-comment">/**
+ * @class Roo.htmleditor.FilterStyleToTag
+ * part of the word stuff... - certain 'styles' should be converted to tags.
+ * eg.
+ * font-weight: bold -> bold
+ * ?? super / subscrit etc..
+ *
+ * @constructor
+* Run a new style to tag filter.
+* @param {Object} config Configuration options
+ */
+</span><span class="jsdoc-var">Roo.htmleditor.FilterStyleToTag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">)
+{
+
+ </span><span class="jsdoc-var">this.tags </span><span class="jsdoc-syntax">= {
+ </span><span class="jsdoc-var">B </span><span class="jsdoc-syntax">: [ </span><span class="jsdoc-string">'fontWeight' </span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'bold'</span><span class="jsdoc-syntax">],
+ </span><span class="jsdoc-var">I </span><span class="jsdoc-syntax">: [ </span><span class="jsdoc-string">'fontStyle' </span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'italic'</span><span class="jsdoc-syntax">],
+ </span><span class="jsdoc-comment">//pre : [ 'font-style' , 'italic'],
+ // h1.. h6 ?? font-size?
+ </span><span class="jsdoc-var">SUP </span><span class="jsdoc-syntax">: [ </span><span class="jsdoc-string">'verticalAlign' </span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'super' </span><span class="jsdoc-syntax">],
+ </span><span class="jsdoc-var">SUB </span><span class="jsdoc-syntax">: [ </span><span class="jsdoc-string">'verticalAlign' </span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'sub' </span><span class="jsdoc-syntax">]
+
+
+ };
+
+ </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">);
+
+
+ </span><span class="jsdoc-var">this.walk</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg.node</span><span class="jsdoc-syntax">);
+
+
+
+}
+
+
+</span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.htmleditor.FilterStyleToTag</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.htmleditor.Filter</span><span class="jsdoc-syntax">,
+{
+ </span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// all tags
+
+ </span><span class="jsdoc-var">tags </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
+
+
+ </span><span class="jsdoc-var">replaceTag </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">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"style"</span><span class="jsdoc-syntax">) === </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
+ }
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">inject </span><span class="jsdoc-syntax">= [];
+ </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">k </span><span class="jsdoc-keyword">in </span><span class="jsdoc-var">this.tags</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.style</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">this.tags</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">k</span><span class="jsdoc-syntax">][0]] == </span><span class="jsdoc-var">this.tags</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">k</span><span class="jsdoc-syntax">][1]) {
+ </span><span class="jsdoc-var">inject.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">node.style.removeProperty</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.tags</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">k</span><span class="jsdoc-syntax">][0]);
+ }
+ }
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">inject.length</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
+ }
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.childNodes</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">inject</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.ownerDocument.createelement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">nn.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nc</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">nn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">nc</span><span class="jsdoc-syntax">;
+ });
+ </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0;</span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">cn.length</span><span class="jsdoc-syntax">;</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">++) {
+ </span><span class="jsdoc-var">node.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
+ </span><span class="jsdoc-var">nn.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
+ }
+ </span><span class="jsdoc-keyword">return true </span><span class="jsdoc-comment">/// iterate thru
+ </span><span class="jsdoc-syntax">}
+
+})</span></code></body></html>
\ No newline at end of file
--- /dev/null
+<html><head><title>Roo/htmleditor/KeyEnter.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty">
+<span class="jsdoc-comment">/**
+ * @class Roo.htmleditor.KeyEnter
+ * Handle Enter press..
+ * @cfg {Roo.HtmlEditorCore} core the editor.
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+
+
+</span><span class="jsdoc-var">Roo.htmleditor.KeyEnter </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-comment">// this does not actually call walk as it's really just a abstract class
+
+ </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.core.doc.body</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'keypress'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.keypress</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
+}
+
+
+</span><span class="jsdoc-var">Roo.htmleditor.KeyEnter.prototype </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-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">e.preventDefault</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-comment">// https://stackoverflow.com/questions/18552336/prevent-contenteditable-adding-div-on-enter-chrome
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">doc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.core.doc</span><span class="jsdoc-syntax">;
+
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">docFragment </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">doc.createDocumentFragment</span><span class="jsdoc-syntax">();
+
+ </span><span class="jsdoc-comment">//add a new line
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">newEle </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">doc.createTextNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'\n'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">docFragment.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newEle</span><span class="jsdoc-syntax">);
+
+
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.core.win.getSelection</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.getRangeAt</span><span class="jsdoc-syntax">(0);
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.commonAncestorContainer </span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">n.nodeType </span><span class="jsdoc-syntax">!= 1) {
+ </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">n.parentNode</span><span class="jsdoc-syntax">;
+ }
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">li </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">n.tagName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'UL'</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">li </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">doc.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'LI'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">n.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">li</span><span class="jsdoc-syntax">);
+
+ }
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">n.tagName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'LI'</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">li </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">doc.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'LI'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n.nextSibling</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">n.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">li</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">n.firstSibling</span><span class="jsdoc-syntax">);
+
+ } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
+ </span><span class="jsdoc-var">n.parentNode.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">li</span><span class="jsdoc-syntax">);
+ }
+ }
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">li</span><span class="jsdoc-syntax">) {
+ </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">li</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-keyword">return false</span><span class="jsdoc-syntax">;
+
+
+ }
+ </span><span class="jsdoc-comment">//add the br, or p, or something else
+ </span><span class="jsdoc-var">newEle </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">doc.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'br'</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">docFragment.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newEle</span><span class="jsdoc-syntax">);
+
+ </span><span class="jsdoc-comment">//make the br replace selection
+
+ </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.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-keyword">return false</span><span class="jsdoc-syntax">;
+
+ }
+};
+ </span></code></body></html>
\ No newline at end of file
--- /dev/null
+<html><head><title>Roo/htmleditor/Tidy.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty">
+<span class="jsdoc-comment">/**
+ * @class Roo.htmleditor.Tidy
+ * Tidy HTML
+ * @cfg {Roo.HtmlEditorCore} core the editor.
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+
+</span><span class="jsdoc-var">Roo.htmleditor.Tidy </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">);
+
+ </span><span class="jsdoc-var">this.core.doc.body.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.tidy</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.core.doc.body</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
+
+}
+
+</span><span class="jsdoc-var">Roo.htmleditor.Tidy.toString </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">return </span><span class="jsdoc-var">Roo.htmleditor.Tidy.prototype.tidy</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
+}
+
+</span><span class="jsdoc-var">Roo.htmleditor.Tidy.prototype </span><span class="jsdoc-syntax">= {
+
+
+ </span><span class="jsdoc-var">wrap </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">s.replace</span><span class="jsdoc-syntax">(/\n/g, </span><span class="jsdoc-string">" "</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.replace</span><span class="jsdoc-syntax">(/(?![^\n]{1,80}$)([^\n]{1,80})\s/g, </span><span class="jsdoc-string">'$1\n'</span><span class="jsdoc-syntax">);
+ },
+
+
+ </span><span class="jsdoc-var">tidy </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-var">indent</span><span class="jsdoc-syntax">) {
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeType </span><span class="jsdoc-syntax">== 3) {
+ </span><span class="jsdoc-comment">// text.
+
+
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">indent </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">node.nodeValue </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.wrap</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeValue.trim</span><span class="jsdoc-syntax">())</span><span class="jsdoc-var">.split</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"\n"</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"\n" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">indent</span><span class="jsdoc-syntax">);
+
+
+ }
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeType </span><span class="jsdoc-syntax">!= 1) {
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
+ }
+
+
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.tagName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'BODY'</span><span class="jsdoc-syntax">) {
+
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.cn</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
+ }
+
+ </span><span class="jsdoc-comment">// Prints the node tagName, such as <A>, <IMG>, etc
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"<" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">node.tagName </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">this.attr</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) ;
+
+ </span><span class="jsdoc-comment">// elements with no children..
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">'IMG'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'BR'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'HR'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'INPUT'</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.tagName</span><span class="jsdoc-syntax">) > -1) {
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'/>'</span><span class="jsdoc-syntax">;
+ }
+ </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">'>'</span><span class="jsdoc-syntax">;
+
+
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cindent </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">indent </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">'' </span><span class="jsdoc-syntax">: (</span><span class="jsdoc-var">indent </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">' '</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-comment">// tags where we will not pad the children.. (inline text tags etc..)
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">'PRE'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TEXTAREA'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TD'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'A'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'SPAN'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'B'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'I'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'S'</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.tagName</span><span class="jsdoc-syntax">) > -1) { </span><span class="jsdoc-comment">// or code?
+ </span><span class="jsdoc-var">cindent </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+
+
+ }
+
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.cn</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cindent </span><span class="jsdoc-syntax">);
+
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">cn </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'</' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">node.tagName </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'>'</span><span class="jsdoc-syntax">;
+
+ },
+ </span><span class="jsdoc-var">cn</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-var">indent</span><span class="jsdoc-syntax">)
+ {
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">= [];
+
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.childNodes</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0 ; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">ar.length </span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
+
+
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">indent </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-comment">// indent==false preservies everything
+ </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">> 0
+ && </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">.nodeType </span><span class="jsdoc-syntax">== 3
+ && </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">.nodeValue.length </span><span class="jsdoc-syntax">> 0
+ && </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">.nodeValue.match</span><span class="jsdoc-syntax">(/^\s+/)
+ ) {
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ret.length </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">ret</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">ret.length</span><span class="jsdoc-syntax">-1] == </span><span class="jsdoc-string">"\n" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">indent</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">ret.pop</span><span class="jsdoc-syntax">(); </span><span class="jsdoc-comment">// remove line break from last?
+ </span><span class="jsdoc-syntax">}
+
+ </span><span class="jsdoc-var">ret.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">" "</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// add a space if i'm a text item with a space at the front, as tidy will strip spaces.
+ </span><span class="jsdoc-syntax">}
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">indent </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false
+ </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">.nodeType </span><span class="jsdoc-syntax">== 1 </span><span class="jsdoc-comment">// element - and indent is not set...
+ </span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">ret.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"\n" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">indent</span><span class="jsdoc-syntax">);
+ }
+
+ </span><span class="jsdoc-var">ret.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.tidy</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">indent</span><span class="jsdoc-syntax">));
+ </span><span class="jsdoc-comment">// text + trailing indent
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">indent </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false
+ </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">.nodeType </span><span class="jsdoc-syntax">== 3
+ && </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">.nodeValue.length </span><span class="jsdoc-syntax">> 0
+ && </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">.nodeValue.match</span><span class="jsdoc-syntax">(/\s+$/)
+ ){
+ </span><span class="jsdoc-var">ret.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"\n" </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">indent</span><span class="jsdoc-syntax">);
+ }
+
+
+
+
+ }
+ </span><span class="jsdoc-comment">// what if all text?
+
+
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">ret.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
+ },
+
+
+
+ </span><span class="jsdoc-var">attr </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">attr </span><span class="jsdoc-syntax">= [];
+ </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">node.attributes.length</span><span class="jsdoc-syntax">;</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
+
+ </span><span class="jsdoc-comment">// skip empty values?
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">node.attributes.item</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.value.length</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
+ }
+ </span><span class="jsdoc-var">attr.push</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">node.attributes.item</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">Roo.util.Format.htmlEncode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.attributes.item</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.value</span><span class="jsdoc-syntax">) + </span><span class="jsdoc-string">'"'
+ </span><span class="jsdoc-syntax">);
+ }
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">attr.length </span><span class="jsdoc-syntax">? (</span><span class="jsdoc-string">' ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">attr.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">' '</span><span class="jsdoc-syntax">) ) : </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
+
+ }
+
+
+
+}</span></code></body></html>
\ No newline at end of file
--- /dev/null
+<html><head><title>Roo/htmleditor/namespace.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-var">Roo.htmleditor </span><span class="jsdoc-syntax">= {};</span></code></body></html>
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.Block",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "Base class for html editor blocks - do not use it directly .. extend it..",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "Block",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [
+ {
+ "name" : "Context",
+ "type" : "Object",
+ "desc" : "menu - see Roo.form.HtmlEditor.ToolbarContext",
+ "memberOf" : ""
+ },
+ {
+ "name" : "friendly_name",
+ "type" : "String",
+ "desc" : "the name that appears in the context bar about this block",
+ "memberOf" : ""
+ },
+ {
+ "name" : "node",
+ "type" : "DomElement",
+ "desc" : "The node to apply stuff to.",
+ "memberOf" : ""
+ }
+ ],
+ "methods" : [
+ {
+ "name" : "getVal",
+ "type" : "function",
+ "desc" : "used by readEleemnt to extract data from a node\nmay need improving as it's pretty basic",
+ "sig" : "(node, tag, attribute, style)",
+ "static" : false,
+ "memberOf" : "",
+ "isStatic" : false,
+ "isConstructor" : false,
+ "isPrivate" : false,
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "exceptions" : "",
+ "requires" : "",
+ "params" : [
+ {
+ "name" : "node",
+ "type" : "DomElement",
+ "desc" : "",
+ "isOptional" : false
+ },
+ {
+ "name" : "tag",
+ "type" : "String",
+ "desc" : "- tag to find, eg. IMG ?? might be better to use DomQuery ?",
+ "isOptional" : false
+ },
+ {
+ "name" : "attribute",
+ "type" : "String",
+ "desc" : "(use html - for contents, or style for using next param as style)",
+ "isOptional" : false
+ },
+ {
+ "name" : "style",
+ "type" : "String",
+ "desc" : "the style property - eg. text-align",
+ "isOptional" : false
+ }
+ ],
+ "returns" : []
+ },
+ {
+ "name" : "toObject",
+ "type" : "function",
+ "desc" : "create a DomHelper friendly object - for use with \nRoo.DomHelper.markup / overwrite / etc..\n(override this)",
+ "sig" : "()\n{\n\n}",
+ "static" : false,
+ "memberOf" : "",
+ "isStatic" : false,
+ "isConstructor" : false,
+ "isPrivate" : false,
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "exceptions" : "",
+ "requires" : "",
+ "params" : [],
+ "returns" : []
+ },
+ {
+ "name" : "toHTML",
+ "type" : "function",
+ "desc" : "convert to plain HTML for calling insertAtCursor..",
+ "sig" : "()\n{\n\n}",
+ "static" : false,
+ "memberOf" : "",
+ "isStatic" : false,
+ "isConstructor" : false,
+ "isPrivate" : false,
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "exceptions" : "",
+ "requires" : "",
+ "params" : [],
+ "returns" : []
+ },
+ {
+ "name" : "readElement",
+ "type" : "function",
+ "desc" : "Read a node that has a 'data-block' property - and extract the values from it.",
+ "sig" : "(node)",
+ "static" : false,
+ "memberOf" : "",
+ "isStatic" : false,
+ "isConstructor" : false,
+ "isPrivate" : false,
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "exceptions" : "",
+ "requires" : "",
+ "params" : [
+ {
+ "name" : "node",
+ "type" : "DomElement",
+ "desc" : "- the node",
+ "isOptional" : false
+ }
+ ],
+ "returns" : []
+ },
+ {
+ "name" : "updateElement",
+ "type" : "function",
+ "desc" : "Update a node with values from this object",
+ "sig" : "(node)",
+ "static" : false,
+ "memberOf" : "",
+ "isStatic" : false,
+ "isConstructor" : false,
+ "isPrivate" : false,
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "exceptions" : "",
+ "requires" : "",
+ "params" : [
+ {
+ "name" : "node",
+ "type" : "DomElement",
+ "desc" : "",
+ "isOptional" : false
+ }
+ ],
+ "returns" : []
+ }
+ ],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.BlockFigure",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "Block that has an image and a figcaption",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "BlockFigure",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [
+ {
+ "name" : "image_height",
+ "type" : "String|number",
+ "desc" : "the height of the image number or %?",
+ "memberOf" : ""
+ },
+ {
+ "name" : "align",
+ "type" : "String",
+ "desc" : "t) alignment for the block default left",
+ "memberOf" : ""
+ },
+ {
+ "name" : "image_src",
+ "type" : "String",
+ "desc" : "the url for the image",
+ "memberOf" : ""
+ },
+ {
+ "name" : "caption",
+ "type" : "String",
+ "desc" : "the text to appear below (and in the alt tag)",
+ "memberOf" : ""
+ },
+ {
+ "name" : "text_align",
+ "type" : "String",
+ "desc" : "t) alignment for the text caption default left.",
+ "memberOf" : ""
+ },
+ {
+ "name" : "image_width",
+ "type" : "String|number",
+ "desc" : "the width of the image number or %?",
+ "memberOf" : ""
+ }
+ ],
+ "methods" : [
+ {
+ "name" : "toObject",
+ "type" : "function",
+ "desc" : "create a DomHelper friendly object - for use with\nRoo.DomHelper.markup / overwrite / etc..",
+ "sig" : "()\n{\n\n}",
+ "static" : false,
+ "memberOf" : "",
+ "isStatic" : false,
+ "isConstructor" : false,
+ "isPrivate" : false,
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "exceptions" : "",
+ "requires" : "",
+ "params" : [],
+ "returns" : []
+ }
+ ],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.FilterAttributes",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "clean attributes and styles including http:// etc.. in attribute",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "FilterAttributes",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.FilterBlack",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "remove blacklisted elements.",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "FilterBlack",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.FilterComment",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "remove comments.",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "FilterComment",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.FilterKeepChildren",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "remove tags but keep children",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "FilterKeepChildren",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.FilterLongBr",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "BR/BR/BR - keep a maximum of 2...",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "FilterLongBr",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.FilterParagraph",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "paragraphs cause a nightmare for shared content - this filter is designed to be called ? at various points when editing\nlike on 'push' to remove the <p> tags and replace them with line breaks.",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "FilterParagraph",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.FilterSpan",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "filter span's with no attributes out..",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "FilterSpan",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.FilterStyleToTag",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "part of the word stuff... - certain 'styles' should be converted to tags.\neg.\n font-weight: bold -> bold\n ?? super / subscrit etc..",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "FilterStyleToTag",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.FilterTableWidth",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "try and remove table width data - as that frequently messes up other stuff.\n\n was cleanTableWidths.\n\nQuite often pasting from word etc.. results in tables with column and widths.\nThis does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "FilterTableWidth",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.FilterWord",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "try and clean up all the mess that Word generates.\n\nThis is the 'nice version' - see 'Heavy' that white lists a very short list of elements, and multi-filters",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "FilterWord",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [],
+ "methods" : [
+ {
+ "name" : "replaceTag",
+ "type" : "function",
+ "desc" : "Clean up MS wordisms...",
+ "sig" : "()\n{\n\n}",
+ "static" : false,
+ "memberOf" : "",
+ "isStatic" : false,
+ "isConstructor" : false,
+ "isPrivate" : false,
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "exceptions" : "",
+ "requires" : "",
+ "params" : [],
+ "returns" : []
+ }
+ ],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.KeyEnter",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "Handle Enter press..",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "KeyEnter",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [
+ {
+ "name" : "core",
+ "type" : "Roo.HtmlEditorCore",
+ "desc" : "the editor.",
+ "memberOf" : ""
+ }
+ ],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
--- /dev/null
+{
+ "name" : "Roo.htmleditor.Tidy",
+ "augments" : [],
+ "childClasses" : { },
+ "tree_children" : [],
+ "tree_parent" : [],
+ "desc" : "Tidy HTML",
+ "isSingleton" : false,
+ "isStatic" : false,
+ "isBuiltin" : false,
+ "isAbstract" : false,
+ "isBuilderTop" : false,
+ "memberOf" : "Tidy",
+ "example" : "",
+ "deprecated" : "",
+ "since" : "",
+ "see" : "",
+ "params" : [
+ {
+ "name" : "config",
+ "type" : "Object",
+ "desc" : "Configuration options",
+ "isOptional" : false
+ }
+ ],
+ "returns" : [],
+ "throws" : "",
+ "requires" : "",
+ "config" : [
+ {
+ "name" : "core",
+ "type" : "Roo.HtmlEditorCore",
+ "desc" : "the editor.",
+ "memberOf" : ""
+ }
+ ],
+ "methods" : [],
+ "events" : []
+}
\ No newline at end of file
this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var A=(this.doc.body||this.doc.documentElement);A.bgProperties='fixed';Roo.EventManager.on(this.doc,{'mouseup':this.onEditorEvent,'dblclick':this.onEditorEvent,'click':this.onEditorEvent,'keyup':this.onEditorEvent,buffer:100,scope:this}
);Roo.EventManager.on(this.doc,{'paste':this.onPasteEvent,scope:this});if(Roo.isGecko){Roo.EventManager.on(this.doc,'keypress',this.mozKeyPress,this);}if(Roo.isIE||Roo.isSafari||Roo.isOpera){Roo.EventManager.on(this.doc,'keydown',this.fixKeys,this);}this.initialized=true;
new Roo.htmleditor.KeyEnter({core:this});this.owner.fireEvent('initialize',this);this.pushValue();},onPasteEvent:function(e,v){var cd=(e.browserEvent.clipboardData||window.clipboardData);var A=cd.getData('text/html');A=this.cleanWordChars(A);var d=(new DOMParser().parseFromString(A,'text/html')).body;
-Roo.each(d.items,function(B){Roo.log(B.kind);});new Roo.htmleditor.FilterStyleToTag({node:d});new Roo.htmleditor.FilterAttributes({node:d,attrib_white:['href','src','name'],attrib_clean:['href','src','name']});new Roo.htmleditor.FilterBlack({node:d,tag:this.black}
-);new Roo.htmleditor.FilterKeepChildren({node:d,tag:['FONT']});new Roo.htmleditor.FilterParagraph({node:d});new Roo.htmleditor.FilterSpan({node:d});new Roo.htmleditor.FilterLongBr({node:d});this.insertAtCursor(d.innerHTML);e.preventDefault();return false;
-},onDestroy:function(){if(this.rendered){}},onFirstFocus:function(){this.assignDocWin();this.activated=true;if(Roo.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);r.selectNodeContents((this.doc.body||this.doc.documentElement));
-r.collapse(true);this.deferFocus();}try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}this.owner.fireEvent('activate',this);},adjustFont:function(A){var B=A.cmd=='increasefontsize'?1:-1;var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);
-if(Roo.isSafari){var sm={10:1,13:2,16:3,18:4,24:5,32:6,48:7};v=(v<10)?10:v;v=(v>48)?48:v;v=typeof(sm[v])=='undefined'?1:sm[v];}v=Math.max(1,v+B);this.execCmd('FontSize',v);},onEditorEvent:function(e){this.owner.fireEvent('editorevent',this,e);this.syncValue();
-},insertTag:function(tg){if(tg.toLowerCase()=='span'||tg.toLowerCase()=='code'||tg.toLowerCase()=='sup'||tg.toLowerCase()=='sub'){range=this.createRange(this.getSelection());var A=this.doc.createElement(tg.toLowerCase());A.appendChild(range.extractContents());
+Roo.log(cd.getData('text/rtf'));Roo.log(cd.getData('text/richtext'));Roo.each(cd.items,function(B){Roo.log(B);});new Roo.htmleditor.FilterStyleToTag({node:d});new Roo.htmleditor.FilterAttributes({node:d,attrib_white:['href','src','name'],attrib_clean:['href','src','name']}
+);new Roo.htmleditor.FilterBlack({node:d,tag:this.black});new Roo.htmleditor.FilterKeepChildren({node:d,tag:['FONT']});new Roo.htmleditor.FilterParagraph({node:d});new Roo.htmleditor.FilterSpan({node:d});new Roo.htmleditor.FilterLongBr({node:d});this.insertAtCursor(d.innerHTML);
+e.preventDefault();return false;},onDestroy:function(){if(this.rendered){}},onFirstFocus:function(){this.assignDocWin();this.activated=true;if(Roo.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);
+r.selectNodeContents((this.doc.body||this.doc.documentElement));r.collapse(true);this.deferFocus();}try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}this.owner.fireEvent('activate',this);},adjustFont:function(A){var B=A.cmd=='increasefontsize'?1:-1;
+var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);if(Roo.isSafari){var sm={10:1,13:2,16:3,18:4,24:5,32:6,48:7};v=(v<10)?10:v;v=(v>48)?48:v;v=typeof(sm[v])=='undefined'?1:sm[v];}v=Math.max(1,v+B);this.execCmd('FontSize',v);},onEditorEvent:function(e){this.owner.fireEvent('editorevent',this,e);
+this.syncValue();},insertTag:function(tg){if(tg.toLowerCase()=='span'||tg.toLowerCase()=='code'||tg.toLowerCase()=='sup'||tg.toLowerCase()=='sub'){range=this.createRange(this.getSelection());var A=this.doc.createElement(tg.toLowerCase());A.appendChild(range.extractContents());
range.insertNode(A);return;}this.execCmd("formatblock",tg);},insertText:function(A){var B=this.createRange();B.deleteContents();B.insertNode(this.doc.createTextNode(A));},relayCmd:function(A,B){this.win.focus();this.execCmd(A,B);this.owner.fireEvent('editorevent',this);
this.owner.deferFocus();},execCmd:function(A,B){this.doc.execCommand(A,false,B===undefined?null:B);this.syncValue();},insertAtCursor:function(A){if(!this.activated){return;}if(Roo.isGecko||Roo.isOpera||Roo.isSafari){this.win.focus();var B,C;var D=this.win;
if(D.getSelection&&D.getSelection().getRangeAt){this.createRange(this.getSelection()).deleteContents();B=D.getSelection().getRangeAt(0);C=typeof(A)=='string'?B.createContextualFragment(A):A;B.insertNode(C);}else if(D.document.selection&&D.document.selection.createRange){var E=typeof(A)=='string'?A:A.outerHTML;
html = this.cleanWordChars(html);
var d = (new DOMParser().parseFromString(html, 'text/html')).body;
- Roo.each(d.items, function(item) {
- Roo.log(item.kind);
+ Roo.log(cd.getData('text/rtf'));
+ Roo.log(cd.getData('text/richtext'));
+
+ Roo.each(cd.items, function(item) {
+ Roo.log(item);
});
new Roo.htmleditor.FilterStyleToTag({ node : d });
new Roo.htmleditor.FilterAttributes({
html = this.cleanWordChars(html);
var d = (new DOMParser().parseFromString(html, 'text/html')).body;
- Roo.each(d.items, function(item) {
- Roo.log(item.kind);
+ Roo.log(cd.getData('text/rtf'));
+ Roo.log(cd.getData('text/richtext'));
+
+ Roo.each(cd.items, function(item) {
+ Roo.log(item);
});
new Roo.htmleditor.FilterStyleToTag({ node : d });
new Roo.htmleditor.FilterAttributes({
this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var A=(this.doc.body||this.doc.documentElement);A.bgProperties='fixed';Roo.EventManager.on(this.doc,{'mouseup':this.onEditorEvent,'dblclick':this.onEditorEvent,'click':this.onEditorEvent,'keyup':this.onEditorEvent,buffer:100,scope:this}
);Roo.EventManager.on(this.doc,{'paste':this.onPasteEvent,scope:this});if(Roo.isGecko){Roo.EventManager.on(this.doc,'keypress',this.mozKeyPress,this);}if(Roo.isIE||Roo.isSafari||Roo.isOpera){Roo.EventManager.on(this.doc,'keydown',this.fixKeys,this);}this.initialized=true;
new Roo.htmleditor.KeyEnter({core:this});this.owner.fireEvent('initialize',this);this.pushValue();},onPasteEvent:function(e,v){var cd=(e.browserEvent.clipboardData||window.clipboardData);var A=cd.getData('text/html');A=this.cleanWordChars(A);var d=(new DOMParser().parseFromString(A,'text/html')).body;
-Roo.each(d.items,function(B){Roo.log(B.kind);});new Roo.htmleditor.FilterStyleToTag({node:d});new Roo.htmleditor.FilterAttributes({node:d,attrib_white:['href','src','name'],attrib_clean:['href','src','name']});new Roo.htmleditor.FilterBlack({node:d,tag:this.black}
-);new Roo.htmleditor.FilterKeepChildren({node:d,tag:['FONT']});new Roo.htmleditor.FilterParagraph({node:d});new Roo.htmleditor.FilterSpan({node:d});new Roo.htmleditor.FilterLongBr({node:d});this.insertAtCursor(d.innerHTML);e.preventDefault();return false;
-},onDestroy:function(){if(this.rendered){}},onFirstFocus:function(){this.assignDocWin();this.activated=true;if(Roo.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);r.selectNodeContents((this.doc.body||this.doc.documentElement));
-r.collapse(true);this.deferFocus();}try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}this.owner.fireEvent('activate',this);},adjustFont:function(A){var B=A.cmd=='increasefontsize'?1:-1;var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);
-if(Roo.isSafari){var sm={10:1,13:2,16:3,18:4,24:5,32:6,48:7};v=(v<10)?10:v;v=(v>48)?48:v;v=typeof(sm[v])=='undefined'?1:sm[v];}v=Math.max(1,v+B);this.execCmd('FontSize',v);},onEditorEvent:function(e){this.owner.fireEvent('editorevent',this,e);this.syncValue();
-},insertTag:function(tg){if(tg.toLowerCase()=='span'||tg.toLowerCase()=='code'||tg.toLowerCase()=='sup'||tg.toLowerCase()=='sub'){range=this.createRange(this.getSelection());var A=this.doc.createElement(tg.toLowerCase());A.appendChild(range.extractContents());
+Roo.log(cd.getData('text/rtf'));Roo.log(cd.getData('text/richtext'));Roo.each(cd.items,function(B){Roo.log(B);});new Roo.htmleditor.FilterStyleToTag({node:d});new Roo.htmleditor.FilterAttributes({node:d,attrib_white:['href','src','name'],attrib_clean:['href','src','name']}
+);new Roo.htmleditor.FilterBlack({node:d,tag:this.black});new Roo.htmleditor.FilterKeepChildren({node:d,tag:['FONT']});new Roo.htmleditor.FilterParagraph({node:d});new Roo.htmleditor.FilterSpan({node:d});new Roo.htmleditor.FilterLongBr({node:d});this.insertAtCursor(d.innerHTML);
+e.preventDefault();return false;},onDestroy:function(){if(this.rendered){}},onFirstFocus:function(){this.assignDocWin();this.activated=true;if(Roo.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);
+r.selectNodeContents((this.doc.body||this.doc.documentElement));r.collapse(true);this.deferFocus();}try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}this.owner.fireEvent('activate',this);},adjustFont:function(A){var B=A.cmd=='increasefontsize'?1:-1;
+var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);if(Roo.isSafari){var sm={10:1,13:2,16:3,18:4,24:5,32:6,48:7};v=(v<10)?10:v;v=(v>48)?48:v;v=typeof(sm[v])=='undefined'?1:sm[v];}v=Math.max(1,v+B);this.execCmd('FontSize',v);},onEditorEvent:function(e){this.owner.fireEvent('editorevent',this,e);
+this.syncValue();},insertTag:function(tg){if(tg.toLowerCase()=='span'||tg.toLowerCase()=='code'||tg.toLowerCase()=='sup'||tg.toLowerCase()=='sub'){range=this.createRange(this.getSelection());var A=this.doc.createElement(tg.toLowerCase());A.appendChild(range.extractContents());
range.insertNode(A);return;}this.execCmd("formatblock",tg);},insertText:function(A){var B=this.createRange();B.deleteContents();B.insertNode(this.doc.createTextNode(A));},relayCmd:function(A,B){this.win.focus();this.execCmd(A,B);this.owner.fireEvent('editorevent',this);
this.owner.deferFocus();},execCmd:function(A,B){this.doc.execCommand(A,false,B===undefined?null:B);this.syncValue();},insertAtCursor:function(A){if(!this.activated){return;}if(Roo.isGecko||Roo.isOpera||Roo.isSafari){this.win.focus();var B,C;var D=this.win;
if(D.getSelection&&D.getSelection().getRangeAt){this.createRange(this.getSelection()).deleteContents();B=D.getSelection().getRangeAt(0);C=typeof(A)=='string'?B.createContextualFragment(A):A;B.insertNode(C);}else if(D.document.selection&&D.document.selection.createRange){var E=typeof(A)=='string'?A:A.outerHTML;