1 <html><head><title>Roo/lib/Selection.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">/**
2 * @class Roo.lib.Selection
4 * This is a toolkit, normally used to copy features into a Dom Selection element
5 * Roo.lib.Selection.wrap(x);
10 </span><span class="jsdoc-var">Roo.lib.Selection </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() { };
12 </span><span class="jsdoc-comment">/**
13 * Wrap a Dom Range object, to give it new features...
15 * @param {Range} the range to wrap
17 </span><span class="jsdoc-var">Roo.lib.Selection.wrap </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">doc</span><span class="jsdoc-syntax">) {
18 </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.lib.Selection.prototype</span><span class="jsdoc-syntax">);
19 </span><span class="jsdoc-var">r.ownerDocument </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">doc</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// usefull so we dont have to keep referening to it.
20 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">;
22 </span><span class="jsdoc-comment">/**
23 * find a parent node eg. LI / OL
24 * @param {string|Array} node name or array of nodenames
25 * @return {DomElement|false}
27 </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.lib.Selection.prototype</span><span class="jsdoc-syntax">,
29 </span><span class="jsdoc-comment">/**
32 </span><span class="jsdoc-var">ownerDocument </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
34 </span><span class="jsdoc-var">getRangeAt </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">)
36 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">Roo.lib.Range.wrap</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Selection.prototype.getRangeAt.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">));
39 </span><span class="jsdoc-comment">/**
40 * insert node at selection
41 * @param {DomElement|string} node
42 * @param {string} cursor (after|in|none) where to place the cursor after inserting.
44 </span><span class="jsdoc-var">insertNode</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">cursor</span><span class="jsdoc-syntax">)
46 </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">node</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string'</span><span class="jsdoc-syntax">) {
47 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.ownerDocument.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
48 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cursor </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'in'</span><span class="jsdoc-syntax">) {
49 </span><span class="jsdoc-var">node.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'&nbsp;'</span><span class="jsdoc-syntax">;
53 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getRangeAt</span><span class="jsdoc-syntax">(0);
55 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.type </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'Caret'</span><span class="jsdoc-syntax">) {
56 </span><span class="jsdoc-var">range.deleteContents</span><span class="jsdoc-syntax">();
58 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.childNodes</span><span class="jsdoc-syntax">[0]; </span><span class="jsdoc-comment">// select the contents.
62 </span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
63 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cursor </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'after'</span><span class="jsdoc-syntax">) {
64 </span><span class="jsdoc-var">node.insertAdjacentHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'afterend'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'&nbsp;'</span><span class="jsdoc-syntax">);
65 </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.nextSibling</span><span class="jsdoc-syntax">;
68 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cursor </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'none'</span><span class="jsdoc-syntax">) {
69 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
72 </span><span class="jsdoc-var">this.cursorText</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">);
75 </span><span class="jsdoc-var">cursorText </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">)
78 </span><span class="jsdoc-comment">//var range = this.getRangeAt(0);
79 </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.lib.Range.wrap</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Range</span><span class="jsdoc-syntax">());
80 </span><span class="jsdoc-comment">//range.selectNode(n);
82 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ix </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n.parentNode.childNodes</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">);
83 </span><span class="jsdoc-var">range.setStart</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n.parentNode</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">ix</span><span class="jsdoc-syntax">);
84 </span><span class="jsdoc-var">range.setEnd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n.parentNode</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">ix</span><span class="jsdoc-syntax">+1);
85 </span><span class="jsdoc-comment">//range.collapse(false);
87 </span><span class="jsdoc-var">this.removeAllRanges</span><span class="jsdoc-syntax">();
88 </span><span class="jsdoc-var">this.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">);
90 </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">([</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">this.baseOffset</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">this.extentOffset</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.type</span><span class="jsdoc-syntax">]);
92 </span><span class="jsdoc-var">cursorAfter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">)
94 </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.nextSibling.nodeValue </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'&nbsp;'</span><span class="jsdoc-syntax">) {
95 </span><span class="jsdoc-var">n.insertAdjacentHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'afterend'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'&nbsp;'</span><span class="jsdoc-syntax">);
97 </span><span class="jsdoc-var">this.cursorText </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n.nextSibling</span><span class="jsdoc-syntax">);
101 });</span></code></body></html>