Roo.htmleditor.Tidy.prototype = {
- wrap : function(s) {
- return s.replace(/\n/g, " ").replace(/(?![^\n]{1,80}$)([^\n]{1,80})\s/g, '$1\n');
- },
+
tidy : function(node, indent) {
- if (node.nodeType == 3) {
- // text.
-
-
- return indent === false ? node.nodeValue : this.wrap(node.nodeValue.trim()).split("\n").join("\n" + indent);
-
-
- }
-
- if (node.nodeType != 1) {
- return '';
- }
-
-
-
- if (node.tagName == 'BODY') {
-
- return this.cn(node, '');
- }
-
- // Prints the node tagName, such as <A>, <IMG>, etc
- var ret = "<" + node.tagName + this.attr(node) ;
-
- // elements with no children..
- if (['IMG', 'BR', 'HR', 'INPUT'].indexOf(node.tagName) > -1) {
- return ret + '/>';
- }
- ret += '>';
-
-
- var cindent = indent === false ? '' : (indent + ' ');
- // tags where we will not pad the children.. (inline text tags etc..)
- if (['PRE', 'TEXTAREA', 'TD', 'A', 'SPAN', 'B', 'I', 'S'].indexOf(node.tagName) > -1) { // or code?
- cindent = false;
-
-
- }
-
- var cn = this.cn(node, cindent );
-
- return ret + cn + '</' + node.tagName + '>';
-
- },
- cn: function(node, indent)
- {
- var ret = [];
-
- var ar = Array.from(node.childNodes);
- for (var i = 0 ; i < ar.length ; i++) {
-
-
-
- if (indent !== false // indent==false preservies everything
- && i > 0
- && ar[i].nodeType == 3
- && ar[i].nodeValue.length > 0
- && ar[i].nodeValue.match(/^\s+/)
- ) {
- if (ret.length && ret[ret.length-1] == "\n" + indent) {
- ret.pop(); // remove line break from last?
- }
-
- ret.push(" "); // add a space if i'm a text item with a space at the front, as tidy will strip spaces.
- }
- if (indent !== false
- && ar[i].nodeType == 1 // element - and indent is not set...
- ) {
- ret.push("\n" + indent);
- }
-
- ret.push(this.tidy(ar[i], indent));
- // text + trailing indent
- if (indent !== false
- && ar[i].nodeType == 3
- && ar[i].nodeValue.length > 0
- && ar[i].nodeValue.match(/\s+$/)
- ){
- ret.push("\n" + indent);
- }
-
-
-
-
- }
- // what if all text?
-
-
- return ret.join('');
- },
-
-
- attr : function(node)
- {
- var attr = [];
- for(i = 0; i < node.attributes.length;i++) {
-
- // skip empty values?
- if (!node.attributes.item(i).value.length) {
- continue;
- }
- attr.push( node.attributes.item(i).name + '="' +
- Roo.util.Format.htmlEncode(node.attributes.item(i).value) + '"'
- );
- }
- return attr.length ? (' ' + attr.join(' ') ) : '';
-
- }
-
+ }
}
/**
var img = {
tag : 'img',
+ contenteditable : 'false',
src : this.image_src,
alt : d.innerText.replace(/\n/g, " "), // removeHTML..
style: {
img = {
tag : 'a',
href: this.href,
+ contenteditable : 'true',
cn : [
img
]
readElement : function(node)
{
// this should not really come from the link...
- this.video_src = this.getVal(node, 'div', 'src');
+ this.video_url = this.getVal(node, 'div', 'src');
this.cls = this.getVal(node, 'div', 'class');
this.href = this.getVal(node, 'a', 'href');
dbody.bgProperties = 'fixed'; // ie
//Roo.DomHelper.applyStyles(dbody, ss);
Roo.EventManager.on(this.doc, {
- //'mousedown': this.onEditorEvent,
+
'mouseup': this.onEditorEvent,
'dblclick': this.onEditorEvent,
'click': this.onEditorEvent,
this.owner.fireEvent('initialize', this);
this.pushValue();
},
-
+ // this is to prevent a href clicks resulting in a redirect?
+
onPasteEvent : function(e,v)
{
// I think we better assume paste is going to be a dirty load of rubish from word..
onEditorEvent : function(e)
{
+
if (e && (e.ctrlKey || e.metaKey) && e.keyCode === 90) {
return; // we do not handle this.. (undo manager does..)