1 /** 2 * RichDom for Webkit 3 */ 4 xq.RichDomWebkit = xq.Class(xq.RichDomW3, { 5 makePlaceHolder: function() { 6 var holder = this.createElement("BR"); 7 holder.className = "webkit-block-placeholder"; 8 return holder; 9 }, 10 11 makePlaceHolderString: function() { 12 return '<br class="webkit-block-placeholder" />'; 13 }, 14 15 makeEmptyParagraph: function() { 16 return this.createElementFromHtml('<p><br class="webkit-block-placeholder" /></p>'); 17 }, 18 19 isPlaceHolder: function(node) { 20 return node.nodeName == "BR" && node.className == "webkit-block-placeholder"; 21 }, 22 23 rng: function() { 24 var sel = this.sel(); 25 var rng = this.doc.createRange(); 26 if (!this._rng || 27 this._anchorNode != sel.anchorNode || 28 this._anchorOffset != sel.anchorOffset || 29 this._focusNode != sel.focusNode || 30 this._focusOffset != sel.focusOffset ) { 31 32 if (sel.type != 'None') { 33 rng.setStart(sel.anchorNode, sel.anchorOffset); 34 rng.setEnd(sel.focusNode, sel.focusOffset); 35 } 36 this._anchorNode = sel.anchorNode; 37 this._anchorOffset = sel.anchorOffset; 38 this._focusNode = sel.focusNode; 39 this._focusOffset = sel.focusOffset; 40 this._rng = rng; 41 } 42 return this._rng; 43 }, 44 45 selectElement: function(element, entireElement) { 46 if(!element) throw "[element] is null"; 47 if(element.nodeType != 1) throw "[element] is not an element"; 48 49 var rng = this.rng(); 50 if(entireElement) { 51 rng.selectNode(element); 52 } else { 53 rng.selectNodeContents(element); 54 } 55 this._setSelectionByRange(rng); 56 }, 57 58 deleteSelection: function() { 59 this.rng().deleteContents(); 60 }, 61 62 collapseSelection: function(toStart) { 63 var rng = this.rng(); 64 rng.collapse(toStart); 65 this._setSelectionByRange(rng); 66 }, 67 68 getSelectionAsHtml: function() { 69 var container = this.createElement("div"); 70 var rng = this.rng(); 71 var contents = this.rng().cloneContents(); 72 if(contents) container.appendChild(contents); 73 return container.innerHTML; 74 }, 75 76 _setSelectionByRange: function(rng) { 77 var sel = this.sel(); 78 sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset); 79 this._anchorNode = sel.anchorNode; 80 this._anchorOffset = sel.anchorOffset; 81 this._focusNode = sel.focusNode; 82 this._focusOffset = sel.focusOffset; 83 } 84 });