mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-17 10:19:55 +09:00
git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3039 201d5d3c-b55e-5fd7-737f-ddc643e51545
2262 lines
No EOL
491 KiB
HTML
2262 lines
No EOL
491 KiB
HTML
<html><head><style>
|
|
.KEYW {color: #933;}
|
|
.COMM {color: #bbb; font-style: italic;}
|
|
.NUMB {color: #393;}
|
|
.STRN {color: #393;}
|
|
.REGX {color: #339;}
|
|
.linenumber {border-right: 1px dotted #666; color: #666; font-style: normal;}
|
|
</style></head><body><pre><span class='linenumber'> 1</span> <span class="COMM">/**
|
|
<span class='linenumber'> 2</span> * Encapsulates browser incompatibility problem and provides rich set of DOM manipulation API.
|
|
<span class='linenumber'> 3</span> *
|
|
<span class='linenumber'> 4</span> * RichDom provides basic CRUD + Advanced DOM manipulation API, various query methods and caret/selection management API
|
|
<span class='linenumber'> 5</span> */</span><span class="WHIT">
|
|
<span class='linenumber'> 6</span> </span><span class="NAME">xq.RichDom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Class.create</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'> 7</span> </span><span class="COMM">/**
|
|
<span class='linenumber'> 8</span> * Initialize RichDom. Target window and root element should be set after initialization. See setWin and setRoot.
|
|
<span class='linenumber'> 9</span> *
|
|
<span class='linenumber'> 10</span> * @constructor
|
|
<span class='linenumber'> 11</span> */</span><span class="WHIT">
|
|
<span class='linenumber'> 12</span> </span><span class="NAME">initialize</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'> 13</span> </span><span class="COMM">/**
|
|
<span class='linenumber'> 14</span> * {xq.DomTree} instance of DomTree
|
|
<span class='linenumber'> 15</span> */</span><span class="WHIT">
|
|
<span class='linenumber'> 16</span> </span><span class="NAME">this.tree</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">xq.DomTree</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 17</span>
|
|
<span class='linenumber'> 18</span> </span><span class="NAME">this._lastMarkerId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 19</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'> 20</span>
|
|
<span class='linenumber'> 21</span>
|
|
<span class='linenumber'> 22</span>
|
|
<span class='linenumber'> 23</span> </span><span class="COMM">/**
|
|
<span class='linenumber'> 24</span> * @param {Window} win Browser's window object
|
|
<span class='linenumber'> 25</span> */</span><span class="WHIT">
|
|
<span class='linenumber'> 26</span> </span><span class="NAME">setWin</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">win</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'> 27</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">win</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"[win] is null"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 28</span> </span><span class="NAME">this.win</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">win</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 29</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'> 30</span>
|
|
<span class='linenumber'> 31</span> </span><span class="COMM">/**
|
|
<span class='linenumber'> 32</span> * @param {Element} root Root element
|
|
<span class='linenumber'> 33</span> */</span><span class="WHIT">
|
|
<span class='linenumber'> 34</span> </span><span class="NAME">setRoot</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">root</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'> 35</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">root</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"[root] is null"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 36</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.win</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">root.ownerDocument</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.win.document</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"root.ownerDocument != this.win.document"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 37</span> </span><span class="NAME">this.root</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 38</span> </span><span class="NAME">this.doc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.root.ownerDocument</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 39</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'> 40</span>
|
|
<span class='linenumber'> 41</span> </span><span class="COMM">/**
|
|
<span class='linenumber'> 42</span> * @returns Browser's window object.
|
|
<span class='linenumber'> 43</span> */</span><span class="WHIT">
|
|
<span class='linenumber'> 44</span> </span><span class="NAME">getWin</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.win</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'> 45</span>
|
|
<span class='linenumber'> 46</span> </span><span class="COMM">/**
|
|
<span class='linenumber'> 47</span> * @returns Document object of root element.
|
|
<span class='linenumber'> 48</span> */</span><span class="WHIT">
|
|
<span class='linenumber'> 49</span> </span><span class="NAME">getDoc</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.doc</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'> 50</span>
|
|
<span class='linenumber'> 51</span> </span><span class="COMM">/**
|
|
<span class='linenumber'> 52</span> * @returns Root element.
|
|
<span class='linenumber'> 53</span> */</span><span class="WHIT">
|
|
<span class='linenumber'> 54</span> </span><span class="NAME">getRoot</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.root</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'> 55</span>
|
|
<span class='linenumber'> 56</span>
|
|
<span class='linenumber'> 57</span>
|
|
<span class='linenumber'> 58</span> </span><span class="COMM">/////////////////////////////////////////////</span><span class="WHIT">
|
|
<span class='linenumber'> 59</span> </span><span class="COMM">// CRUDs</span><span class="WHIT">
|
|
<span class='linenumber'> 60</span>
|
|
<span class='linenumber'> 61</span> </span><span class="NAME">clearRoot</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'> 62</span> </span><span class="NAME">this.root.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 63</span> </span><span class="NAME">this.root.appendChild</span><span class="PUNC">(</span><span class="NAME">this.makeEmptyParagraph</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 64</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'> 65</span>
|
|
<span class='linenumber'> 66</span> </span><span class="COMM">/**
|
|
<span class='linenumber'> 67</span> * Removes place holders and empty text nodes of given element.
|
|
<span class='linenumber'> 68</span> *
|
|
<span class='linenumber'> 69</span> * @param {Element} element target element
|
|
<span class='linenumber'> 70</span> */</span><span class="WHIT">
|
|
<span class='linenumber'> 71</span> </span><span class="NAME">removePlaceHoldersAndEmptyNodes</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'> 72</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">children</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.childNodes</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 73</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">children</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 74</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">stopAt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getBottommostLastChild</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 75</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">stopAt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 76</span> </span><span class="NAME">stopAt</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.walkForward</span><span class="PUNC">(</span><span class="NAME">stopAt</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 77</span>
|
|
<span class='linenumber'> 78</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'> 79</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">stopAt</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 80</span>
|
|
<span class='linenumber'> 81</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT">
|
|
<span class='linenumber'> 82</span> </span><span class="NAME">this.isPlaceHolder</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
|
|
<span class='linenumber'> 83</span> </span><span class="PUNC">(</span><span class="NAME">element.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">element.nodeValue</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
|
|
<span class='linenumber'> 84</span> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.getNextSibling</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">element.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">element.nodeValue.strip</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'> 85</span> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'> 86</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">deleteTarget</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 87</span> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.walkForward</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 88</span>
|
|
<span class='linenumber'> 89</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">deleteTarget</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 90</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'> 91</span> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.walkForward</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'> 92</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'> 93</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'> 94</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'> 95</span>
|
|
<span class='linenumber'> 96</span> </span><span class="COMM">/**
|
|
<span class='linenumber'> 97</span> * Sets multiple attributes into element at once
|
|
<span class='linenumber'> 98</span> *
|
|
<span class='linenumber'> 99</span> * @param {Element} element target element
|
|
<span class='linenumber'>100</span> * @param {Object} map key-value pairs
|
|
<span class='linenumber'>101</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>102</span> </span><span class="NAME">setAttributes</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">map</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>103</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">key</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">map</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">element.setAttribute</span><span class="PUNC">(</span><span class="NAME">key</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">map</span><span class="PUNC">[</span><span class="NAME">key</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>104</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>105</span>
|
|
<span class='linenumber'>106</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>107</span> * Creates textnode by given node value.
|
|
<span class='linenumber'>108</span> *
|
|
<span class='linenumber'>109</span> * @param {String} value value of textnode
|
|
<span class='linenumber'>110</span> * @returns {Node} Created text node
|
|
<span class='linenumber'>111</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>112</span> </span><span class="NAME">createTextNode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.doc.createTextNode</span><span class="PUNC">(</span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>113</span>
|
|
<span class='linenumber'>114</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>115</span> * Creates empty element by given tag name.
|
|
<span class='linenumber'>116</span> *
|
|
<span class='linenumber'>117</span> * @param {String} tagName name of tag
|
|
<span class='linenumber'>118</span> * @returns {Element} Created element
|
|
<span class='linenumber'>119</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>120</span> </span><span class="NAME">createElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tagName</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.doc.createElement</span><span class="PUNC">(</span><span class="NAME">tagName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>121</span>
|
|
<span class='linenumber'>122</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>123</span> * Creates element from HTML string
|
|
<span class='linenumber'>124</span> *
|
|
<span class='linenumber'>125</span> * @param {String} html HTML string
|
|
<span class='linenumber'>126</span> * @returns {Element} Created element
|
|
<span class='linenumber'>127</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>128</span> </span><span class="NAME">createElementFromHtml</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">html</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>129</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="STRN">"div"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>130</span> </span><span class="NAME">node.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">html</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>131</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">node.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>132</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Illegal HTML fragment"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>133</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>134</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getFirstChild</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>135</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>136</span>
|
|
<span class='linenumber'>137</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>138</span> * Deletes node from DOM tree.
|
|
<span class='linenumber'>139</span> *
|
|
<span class='linenumber'>140</span> * @param {Node} node Target node which should be deleted
|
|
<span class='linenumber'>141</span> * @param {boolean} deleteEmptyParentsRecursively Recursively delete empty parent elements
|
|
<span class='linenumber'>142</span> * @param {boolean} correctEmptyParent Call #correctEmptyElement on empty parent element after deletion
|
|
<span class='linenumber'>143</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>144</span> </span><span class="NAME">deleteNode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">deleteEmptyParentsRecursively</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">correctEmptyParent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>145</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">node.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>146</span>
|
|
<span class='linenumber'>147</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>148</span> </span><span class="NAME">parent.removeChild</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>149</span>
|
|
<span class='linenumber'>150</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">deleteEmptyParentsRecursively</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>151</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">parent.hasChildNodes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>152</span> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parent</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>153</span> </span><span class="NAME">parent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>154</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">parent</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>155</span> </span><span class="NAME">parent.removeChild</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>156</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>157</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>158</span>
|
|
<span class='linenumber'>159</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">correctEmptyParent</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">parent</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>160</span> </span><span class="NAME">parent.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>161</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">parent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>162</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>163</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>164</span>
|
|
<span class='linenumber'>165</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>166</span> * Inserts given node into current caret position
|
|
<span class='linenumber'>167</span> *
|
|
<span class='linenumber'>168</span> * @param {Node} node Target node
|
|
<span class='linenumber'>169</span> * @returns {Node} Inserted node. It could be different with given node.
|
|
<span class='linenumber'>170</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>171</span> </span><span class="NAME">insertNode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>172</span>
|
|
<span class='linenumber'>173</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>174</span> * Inserts given html into current caret position
|
|
<span class='linenumber'>175</span> *
|
|
<span class='linenumber'>176</span> * @param {String} html HTML string
|
|
<span class='linenumber'>177</span> * @returns {Node} Inserted node. It could be different with given node.
|
|
<span class='linenumber'>178</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>179</span> </span><span class="NAME">insertHtml</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">html</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>180</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.insertNode</span><span class="PUNC">(</span><span class="NAME">this.createElementFromHtml</span><span class="PUNC">(</span><span class="NAME">html</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>181</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>182</span>
|
|
<span class='linenumber'>183</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>184</span> * Creates textnode from given text and inserts it into current caret position
|
|
<span class='linenumber'>185</span> *
|
|
<span class='linenumber'>186</span> * @param {String} text Value of textnode
|
|
<span class='linenumber'>187</span> * @returns {Node} Inserted node
|
|
<span class='linenumber'>188</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>189</span> </span><span class="NAME">insertText</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>190</span> </span><span class="NAME">this.insertNode</span><span class="PUNC">(</span><span class="NAME">this.createTextNode</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>191</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>192</span>
|
|
<span class='linenumber'>193</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>194</span> * Places given node nearby target.
|
|
<span class='linenumber'>195</span> *
|
|
<span class='linenumber'>196</span> * @param {Node} node Node to be inserted.
|
|
<span class='linenumber'>197</span> * @param {Node} target Target node.
|
|
<span class='linenumber'>198</span> * @param {String} where Possible values: "before", "start", "end", "after"
|
|
<span class='linenumber'>199</span> * @param {boolean} performValidation Validate node if needed. For example when P placed into UL, its tag name automatically replaced with LI
|
|
<span class='linenumber'>200</span> *
|
|
<span class='linenumber'>201</span> * @returns {Node} Inserted node. It could be different with given node.
|
|
<span class='linenumber'>202</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>203</span> </span><span class="NAME">insertNodeAt</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">where</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">performValidation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>204</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT">
|
|
<span class='linenumber'>205</span> </span><span class="PUNC">[</span><span class="STRN">"HTML"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"HEAD"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">target.nodeName</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
|
|
<span class='linenumber'>206</span> </span><span class="PUNC">[</span><span class="STRN">"BODY"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">target.nodeName</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"before"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">where</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>207</span> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Illegal argument. Cannot move node["</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">node.nodeName</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"] to '"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">where</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"' of target["</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">target.nodeName</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"]"</span><span class="WHIT">
|
|
<span class='linenumber'>208</span>
|
|
<span class='linenumber'>209</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">object</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>210</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">message</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>211</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">secondParam</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>212</span>
|
|
<span class='linenumber'>213</span> </span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="NAME">where.toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>214</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">:</span><span class="WHIT">
|
|
<span class='linenumber'>215</span> </span><span class="NAME">object</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>216</span> </span><span class="NAME">message</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'insertBefore'</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>217</span> </span><span class="NAME">secondParam</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>218</span> </span><span class="KEYW">break</span><span class="WHIT">
|
|
<span class='linenumber'>219</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="PUNC">:</span><span class="WHIT">
|
|
<span class='linenumber'>220</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">target.firstChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>221</span> </span><span class="NAME">object</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>222</span> </span><span class="NAME">message</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'insertBefore'</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>223</span> </span><span class="NAME">secondParam</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target.firstChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>224</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>225</span> </span><span class="NAME">object</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>226</span> </span><span class="NAME">message</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'appendChild'</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>227</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>228</span> </span><span class="KEYW">break</span><span class="WHIT">
|
|
<span class='linenumber'>229</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"end"</span><span class="PUNC">:</span><span class="WHIT">
|
|
<span class='linenumber'>230</span> </span><span class="NAME">object</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>231</span> </span><span class="NAME">message</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'appendChild'</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>232</span> </span><span class="KEYW">break</span><span class="WHIT">
|
|
<span class='linenumber'>233</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">:</span><span class="WHIT">
|
|
<span class='linenumber'>234</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">target.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>235</span> </span><span class="NAME">object</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>236</span> </span><span class="NAME">message</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'insertBefore'</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>237</span> </span><span class="NAME">secondParam</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>238</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>239</span> </span><span class="NAME">object</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>240</span> </span><span class="NAME">message</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'appendChild'</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>241</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>242</span> </span><span class="KEYW">break</span><span class="WHIT">
|
|
<span class='linenumber'>243</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>244</span>
|
|
<span class='linenumber'>245</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">performValidation</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.nodeName</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>246</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">li</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>247</span> </span><span class="NAME">li.appendChild</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>248</span> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">li</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>249</span> </span><span class="NAME">object</span><span class="PUNC">[</span><span class="NAME">message</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">secondParam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>250</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">performValidation</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">object</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>251</span> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>252</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">div</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="STRN">"DIV"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>253</span> </span><span class="NAME">this.moveChildNodes</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">div</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>254</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>255</span> </span><span class="NAME">object</span><span class="PUNC">[</span><span class="NAME">message</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">div</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">secondParam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>256</span> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.unwrapElement</span><span class="PUNC">(</span><span class="NAME">div</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>257</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>258</span> </span><span class="NAME">object</span><span class="PUNC">[</span><span class="NAME">message</span><span class="PUNC">]</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">secondParam</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>259</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>260</span>
|
|
<span class='linenumber'>261</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>262</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>263</span>
|
|
<span class='linenumber'>264</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>265</span> * Creates textnode from given text and places given node nearby target.
|
|
<span class='linenumber'>266</span> *
|
|
<span class='linenumber'>267</span> * @param {String} text Text to be inserted.
|
|
<span class='linenumber'>268</span> * @param {Node} target Target node.
|
|
<span class='linenumber'>269</span> * @param {String} where Possible values: "before", "start", "end", "after"
|
|
<span class='linenumber'>270</span> *
|
|
<span class='linenumber'>271</span> * @returns {Node} Inserted node.
|
|
<span class='linenumber'>272</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>273</span> </span><span class="NAME">insertTextAt</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">where</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>274</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createTextNode</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">where</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>275</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>276</span>
|
|
<span class='linenumber'>277</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>278</span> * Creates element from given HTML string and places given it nearby target.
|
|
<span class='linenumber'>279</span> *
|
|
<span class='linenumber'>280</span> * @param {String} html HTML to be inserted.
|
|
<span class='linenumber'>281</span> * @param {Node} target Target node.
|
|
<span class='linenumber'>282</span> * @param {String} where Possible values: "before", "start", "end", "after"
|
|
<span class='linenumber'>283</span> *
|
|
<span class='linenumber'>284</span> * @returns {Node} Inserted node.
|
|
<span class='linenumber'>285</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>286</span> </span><span class="NAME">insertHtmlAt</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">html</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">where</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>287</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElementFromHtml</span><span class="PUNC">(</span><span class="NAME">html</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">where</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>288</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>289</span>
|
|
<span class='linenumber'>290</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>291</span> * Replaces element's tag by removing current element and creating new element by given tag name.
|
|
<span class='linenumber'>292</span> *
|
|
<span class='linenumber'>293</span> * @param {String} tag New tag name
|
|
<span class='linenumber'>294</span> * @param {Element} element Target element
|
|
<span class='linenumber'>295</span> *
|
|
<span class='linenumber'>296</span> * @returns {Element} Replaced element
|
|
<span class='linenumber'>297</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>298</span> </span><span class="NAME">replaceTag</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>299</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>300</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isTableCell</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>301</span>
|
|
<span class='linenumber'>302</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>303</span> </span><span class="NAME">this.moveChildNodes</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>304</span> </span><span class="NAME">this.copyAttributes</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>305</span> </span><span class="NAME">element.parentNode.replaceChild</span><span class="PUNC">(</span><span class="NAME">newElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>306</span>
|
|
<span class='linenumber'>307</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">newElement.hasChildNodes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">newElement</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>308</span>
|
|
<span class='linenumber'>309</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>310</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>311</span>
|
|
<span class='linenumber'>312</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>313</span> * Unwraps unnecessary paragraph.
|
|
<span class='linenumber'>314</span> *
|
|
<span class='linenumber'>315</span> * Unnecessary paragraph is P which is the only child of given container element.
|
|
<span class='linenumber'>316</span> * For example, P which is contained by LI and is the only child is the unnecessary paragraph.
|
|
<span class='linenumber'>317</span> * But if given container element is a block-only-container(BLOCKQUOTE, BODY), this method does nothing.
|
|
<span class='linenumber'>318</span> *
|
|
<span class='linenumber'>319</span> * @param {Element} element Container element
|
|
<span class='linenumber'>320</span> * @returns {boolean} True if unwrap performed.
|
|
<span class='linenumber'>321</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>322</span> </span><span class="NAME">unwrapUnnecessaryParagraph</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>323</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>324</span>
|
|
<span class='linenumber'>325</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.tree.isBlockOnlyContainer</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">element.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">element.firstChild.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"P"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.hasImportantAttributes</span><span class="PUNC">(</span><span class="NAME">element.firstChild</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>326</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.firstChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>327</span> </span><span class="NAME">this.moveChildNodes</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>328</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>329</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>330</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>331</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>332</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>333</span>
|
|
<span class='linenumber'>334</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>335</span> * Unwraps element by extracting all children out and removing the element.
|
|
<span class='linenumber'>336</span> *
|
|
<span class='linenumber'>337</span> * @param {Element} element Target element
|
|
<span class='linenumber'>338</span> * @param {boolean} wrapInlineAndTextNodes Wrap all inline and text nodes with P before unwrap
|
|
<span class='linenumber'>339</span> * @returns {Node} First child of unwrapped element
|
|
<span class='linenumber'>340</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>341</span> </span><span class="NAME">unwrapElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">wrapInlineAndTextNodes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>342</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">wrapInlineAndTextNodes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>343</span>
|
|
<span class='linenumber'>344</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nodeToReturn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.firstChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>345</span>
|
|
<span class='linenumber'>346</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">element.firstChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">element.firstChild</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>347</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>348</span>
|
|
<span class='linenumber'>349</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">nodeToReturn</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>350</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>351</span>
|
|
<span class='linenumber'>352</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>353</span> * Wraps element by given tag
|
|
<span class='linenumber'>354</span> *
|
|
<span class='linenumber'>355</span> * @param {String} tag tag name
|
|
<span class='linenumber'>356</span> * @param {Element} element target element to wrap
|
|
<span class='linenumber'>357</span> * @returns {Element} wrapper
|
|
<span class='linenumber'>358</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>359</span> </span><span class="NAME">wrapElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>360</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>361</span> </span><span class="NAME">wrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>362</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>363</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>364</span>
|
|
<span class='linenumber'>365</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>366</span> * Tests #smartWrap with given criteria but doesn't change anything
|
|
<span class='linenumber'>367</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>368</span> </span><span class="NAME">testSmartWrap</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">endElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">criteria</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>369</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.smartWrap</span><span class="PUNC">(</span><span class="NAME">endElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">criteria</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>370</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>371</span>
|
|
<span class='linenumber'>372</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>373</span> * Create inline element with given tag name and wraps nodes nearby endElement by given criteria
|
|
<span class='linenumber'>374</span> *
|
|
<span class='linenumber'>375</span> * @param {Element} endElement Boundary(end point, exclusive) of wrapper.
|
|
<span class='linenumber'>376</span> * @param {String} tag Tag name of wrapper.
|
|
<span class='linenumber'>377</span> * @param {Object} function which returns text index of start boundary.
|
|
<span class='linenumber'>378</span> * @param {boolean} testOnly just test boundary and do not perform actual wrapping.
|
|
<span class='linenumber'>379</span> *
|
|
<span class='linenumber'>380</span> * @returns {Element} wrapper
|
|
<span class='linenumber'>381</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>382</span> </span><span class="NAME">smartWrap</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">endElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">criteria</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">testOnly</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>383</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getParentBlockElementOf</span><span class="PUNC">(</span><span class="NAME">endElement</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>384</span>
|
|
<span class='linenumber'>385</span> </span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">"SPAN"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>386</span> </span><span class="NAME">criteria</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">criteria</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">text</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>387</span>
|
|
<span class='linenumber'>388</span> </span><span class="COMM">// check for empty wrapper</span><span class="WHIT">
|
|
<span class='linenumber'>389</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">testOnly</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">endElement.previousSibling</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>390</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">endElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>391</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>392</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>393</span>
|
|
<span class='linenumber'>394</span> </span><span class="COMM">// collect all textnodes</span><span class="WHIT">
|
|
<span class='linenumber'>395</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">textNodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.collectForward</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">endElement</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>396</span>
|
|
<span class='linenumber'>397</span> </span><span class="COMM">// find textnode and break-point</span><span class="WHIT">
|
|
<span class='linenumber'>398</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nodeIndex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>399</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nodeValues</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">textNodes.pluck</span><span class="PUNC">(</span><span class="STRN">"nodeValue"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>400</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">textToWrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nodeValues.join</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>401</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">textIndex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">criteria</span><span class="PUNC">(</span><span class="NAME">textToWrap</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>402</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">breakPoint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">textIndex</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>403</span>
|
|
<span class='linenumber'>404</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">breakPoint</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>405</span> </span><span class="NAME">breakPoint</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>406</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>407</span> </span><span class="NAME">textToWrap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">textToWrap.substring</span><span class="PUNC">(</span><span class="NAME">breakPoint</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>408</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>409</span>
|
|
<span class='linenumber'>410</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">textNodes.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>411</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">breakPoint</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">nodeValues</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>412</span> </span><span class="NAME">breakPoint</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nodeValues</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">length</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>413</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>414</span> </span><span class="NAME">nodeIndex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>415</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>416</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>417</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>418</span>
|
|
<span class='linenumber'>419</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">testOnly</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">text</span><span class="PUNC">:</span><span class="NAME">textToWrap</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">textIndex</span><span class="PUNC">:</span><span class="NAME">textIndex</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nodeIndex</span><span class="PUNC">:</span><span class="NAME">nodeIndex</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">breakPoint</span><span class="PUNC">:</span><span class="NAME">breakPoint</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>420</span>
|
|
<span class='linenumber'>421</span> </span><span class="COMM">// break textnode if necessary </span><span class="WHIT">
|
|
<span class='linenumber'>422</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">breakPoint</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>423</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">splitted</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">textNodes</span><span class="PUNC">[</span><span class="NAME">nodeIndex</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">splitText</span><span class="PUNC">(</span><span class="NAME">breakPoint</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>424</span> </span><span class="NAME">nodeIndex</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>425</span> </span><span class="NAME">textNodes.splice</span><span class="PUNC">(</span><span class="NAME">nodeIndex</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">splitted</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>426</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>427</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">textNodes</span><span class="PUNC">[</span><span class="NAME">nodeIndex</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">block.firstChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>428</span>
|
|
<span class='linenumber'>429</span> </span><span class="COMM">// split inline elements up to parent block if necessary</span><span class="WHIT">
|
|
<span class='linenumber'>430</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">family</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.findCommonAncestorAndImmediateChildrenOf</span><span class="PUNC">(</span><span class="NAME">startElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">endElement</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>431</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ca</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">family.parent</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>432</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">ca</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>433</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">startElement.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">ca</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">startElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.splitElementUpto</span><span class="PUNC">(</span><span class="NAME">startElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ca</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>434</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">endElement.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">ca</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">endElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.splitElementUpto</span><span class="PUNC">(</span><span class="NAME">endElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ca</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>435</span>
|
|
<span class='linenumber'>436</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prevStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startElement.previousSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>437</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextEnd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endElement.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>438</span>
|
|
<span class='linenumber'>439</span> </span><span class="COMM">// remove empty inline elements</span><span class="WHIT">
|
|
<span class='linenumber'>440</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">prevStart</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prevStart.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">prevStart</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">prevStart</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>441</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">nextEnd</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">nextEnd.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">nextEnd</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">nextEnd</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>442</span>
|
|
<span class='linenumber'>443</span> </span><span class="COMM">// wrap</span><span class="WHIT">
|
|
<span class='linenumber'>444</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">startElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>445</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">wrapper.nextSibling</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">endElement</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">wrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">wrapper.nextSibling</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>446</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>447</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>448</span> </span><span class="COMM">// wrap</span><span class="WHIT">
|
|
<span class='linenumber'>449</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">endElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>450</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>451</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>452</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>453</span>
|
|
<span class='linenumber'>454</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>455</span> * Wraps all adjust inline elements and text nodes into block element.
|
|
<span class='linenumber'>456</span> *
|
|
<span class='linenumber'>457</span> * TODO: empty element should return empty array when it is not forced and (at least) single item array when forced
|
|
<span class='linenumber'>458</span> *
|
|
<span class='linenumber'>459</span> * @param {String} tag Tag name of wrapper
|
|
<span class='linenumber'>460</span> * @param {Element} element Target element
|
|
<span class='linenumber'>461</span> * @param {boolean} force Force wrapping. If it is set to false, this method do not makes unnecessary wrapper.
|
|
<span class='linenumber'>462</span> *
|
|
<span class='linenumber'>463</span> * @returns {Array} Array of wrappers. If nothing performed it returns empty array
|
|
<span class='linenumber'>464</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>465</span> </span><span class="NAME">wrapAllInlineOrTextNodesAs</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">force</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>466</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrappers</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>467</span>
|
|
<span class='linenumber'>468</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">force</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.hasMixedContents</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">wrappers</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>469</span>
|
|
<span class='linenumber'>470</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.firstChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>471</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>472</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isTextOrInlineNode</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>473</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.wrapInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>474</span> </span><span class="NAME">wrappers.push</span><span class="PUNC">(</span><span class="NAME">wrapper</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>475</span> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">wrapper.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>476</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>477</span> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>478</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>479</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>480</span>
|
|
<span class='linenumber'>481</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">wrappers</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>482</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>483</span>
|
|
<span class='linenumber'>484</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>485</span> * Wraps node and its adjust next siblings into an element
|
|
<span class='linenumber'>486</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>487</span> </span><span class="NAME">wrapInlineOrTextNodesAs</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>488</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>489</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">from</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>490</span>
|
|
<span class='linenumber'>491</span> </span><span class="NAME">from.parentNode.replaceChild</span><span class="PUNC">(</span><span class="NAME">wrapper</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">from</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>492</span> </span><span class="NAME">wrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>493</span>
|
|
<span class='linenumber'>494</span> </span><span class="COMM">// move nodes into wrapper</span><span class="WHIT">
|
|
<span class='linenumber'>495</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">wrapper.nextSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isTextOrInlineNode</span><span class="PUNC">(</span><span class="NAME">wrapper.nextSibling</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">wrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">wrapper.nextSibling</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>496</span>
|
|
<span class='linenumber'>497</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>498</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>499</span>
|
|
<span class='linenumber'>500</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>501</span> * Turns block element into list item
|
|
<span class='linenumber'>502</span> *
|
|
<span class='linenumber'>503</span> * @param {Element} element Target element
|
|
<span class='linenumber'>504</span> * @param {String} type One of "UL", "OL", "CODE". "CODE" is same with "OL" but it gives "OL" a class name "code"
|
|
<span class='linenumber'>505</span> *
|
|
<span class='linenumber'>506</span> * @return {Element} LI element
|
|
<span class='linenumber'>507</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>508</span> </span><span class="NAME">turnElementIntoListItem</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>509</span> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>510</span>
|
|
<span class='linenumber'>511</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"OL"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>512</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"CODE"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">container.className</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"code"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>513</span>
|
|
<span class='linenumber'>514</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isTableCell</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>515</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>516</span> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>517</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">li</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>518</span> </span><span class="NAME">li.appendChild</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>519</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>520</span> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>521</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">li</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>522</span> </span><span class="NAME">li.appendChild</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>523</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>524</span>
|
|
<span class='linenumber'>525</span> </span><span class="NAME">this.unwrapUnnecessaryParagraph</span><span class="PUNC">(</span><span class="NAME">li</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>526</span> </span><span class="NAME">this.mergeAdjustLists</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>527</span>
|
|
<span class='linenumber'>528</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">li</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>529</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>530</span>
|
|
<span class='linenumber'>531</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>532</span> * Extracts given element out from its parent element.
|
|
<span class='linenumber'>533</span> *
|
|
<span class='linenumber'>534</span> * @param {Element} element Target element
|
|
<span class='linenumber'>535</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>536</span> </span><span class="NAME">extractOutElementFromParent</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>537</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">this.root</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.root</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">element.offsetParent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>538</span>
|
|
<span class='linenumber'>539</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>540</span> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>541</span> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.firstChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>542</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>543</span>
|
|
<span class='linenumber'>544</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>545</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nodeToReturn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>546</span>
|
|
<span class='linenumber'>547</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">container.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">container.parentNode.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>548</span> </span><span class="COMM">// nested list item</span><span class="WHIT">
|
|
<span class='linenumber'>549</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element.previousSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>550</span> </span><span class="NAME">this.splitContainerOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>551</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>552</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>553</span>
|
|
<span class='linenumber'>554</span> </span><span class="NAME">this.outdentListItem</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>555</span> </span><span class="NAME">nodeToReturn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>556</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">container.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>557</span> </span><span class="COMM">// not-nested list item</span><span class="WHIT">
|
|
<span class='linenumber'>558</span>
|
|
<span class='linenumber'>559</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">element.nextSibling</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>560</span> </span><span class="COMM">// 1. split listContainer</span><span class="WHIT">
|
|
<span class='linenumber'>561</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">listContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>562</span> </span><span class="NAME">this.splitContainerOf</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>563</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>564</span>
|
|
<span class='linenumber'>565</span> </span><span class="COMM">// 2. extract out LI's children</span><span class="WHIT">
|
|
<span class='linenumber'>566</span> </span><span class="NAME">nodeToReturn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.firstChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>567</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">container.firstChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>568</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">container.firstChild</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">listContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>569</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>570</span>
|
|
<span class='linenumber'>571</span> </span><span class="COMM">// 3. remove listContainer and merge adjust lists</span><span class="WHIT">
|
|
<span class='linenumber'>572</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">listContainer.previousSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>573</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">listContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>574</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.mergeAdjustLists</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>575</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>576</span> </span><span class="COMM">// 1. split LI</span><span class="WHIT">
|
|
<span class='linenumber'>577</span> </span><span class="NAME">this.splitContainerOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>578</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>579</span>
|
|
<span class='linenumber'>580</span> </span><span class="COMM">// 2. split list container</span><span class="WHIT">
|
|
<span class='linenumber'>581</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">listContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.splitContainerOf</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>582</span>
|
|
<span class='linenumber'>583</span> </span><span class="COMM">// 3. extract out</span><span class="WHIT">
|
|
<span class='linenumber'>584</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">listContainer.parentNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>585</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">listContainer.parentNode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>586</span>
|
|
<span class='linenumber'>587</span> </span><span class="NAME">nodeToReturn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>588</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>589</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isTableCell</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.tree.isTableCell</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>590</span> </span><span class="COMM">// do nothing</span><span class="WHIT">
|
|
<span class='linenumber'>591</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>592</span> </span><span class="COMM">// normal block</span><span class="WHIT">
|
|
<span class='linenumber'>593</span> </span><span class="NAME">this.splitContainerOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>594</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>595</span> </span><span class="NAME">nodeToReturn</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>596</span>
|
|
<span class='linenumber'>597</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>598</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>599</span>
|
|
<span class='linenumber'>600</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">nodeToReturn</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>601</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>602</span>
|
|
<span class='linenumber'>603</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>604</span> * Insert new block above or below given element.
|
|
<span class='linenumber'>605</span> *
|
|
<span class='linenumber'>606</span> * @param {Element} block Target block
|
|
<span class='linenumber'>607</span> * @param {boolean} before Insert new block above(before) target block
|
|
<span class='linenumber'>608</span> * @param {String} forceTag New block's tag name. If omitted, target block's tag name will be used.
|
|
<span class='linenumber'>609</span> *
|
|
<span class='linenumber'>610</span> * @returns {Element} Inserted block
|
|
<span class='linenumber'>611</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>612</span> </span><span class="NAME">insertNewBlockAround</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">before</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceTag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>613</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isListItem</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">block.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>614</span>
|
|
<span class='linenumber'>615</span> </span><span class="NAME">this.removeTrailingWhitespace</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>616</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isFirstLiWithNestedList</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">forceTag</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">before</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>617</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">li</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"LI"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>618</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._insertNewBlockAround</span><span class="PUNC">(</span><span class="NAME">li</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">before</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>619</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">newBlock</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>620</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">isListItem</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">forceTag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>621</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">li</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"LI"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>622</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._insertNewBlockAround</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">before</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>623</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">li</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">block</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">newBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.splitContainerOf</span><span class="PUNC">(</span><span class="NAME">newBlock</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"prev"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>624</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">newBlock</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>625</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>626</span> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>627</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._insertNewBlockAround</span><span class="PUNC">(</span><span class="NAME">block.firstChild</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">before</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceTag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>628</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>629</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._insertNewBlockAround</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">before</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.tree.isHeading</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"P"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">forceTag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>630</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>631</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>632</span>
|
|
<span class='linenumber'>633</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>634</span> * @private
|
|
<span class='linenumber'>635</span> *
|
|
<span class='linenumber'>636</span> * TODO: Rename
|
|
<span class='linenumber'>637</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>638</span> </span><span class="NAME">_insertNewBlockAround</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">before</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tagName</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>639</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">tagName</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">element.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>640</span> </span><span class="NAME">this.copyAttributes</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>641</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">newElement</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>642</span> </span><span class="NAME">newElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">newElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">before</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>643</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>644</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>645</span>
|
|
<span class='linenumber'>646</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>647</span> * Wrap or replace element with given tag name.
|
|
<span class='linenumber'>648</span> *
|
|
<span class='linenumber'>649</span> * @param {String} tag Tag name
|
|
<span class='linenumber'>650</span> * @param {Element} element Target element
|
|
<span class='linenumber'>651</span> *
|
|
<span class='linenumber'>652</span> * @return {Element} wrapper element or replaced element.
|
|
<span class='linenumber'>653</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>654</span> </span><span class="NAME">applyTagIntoElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>655</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlockOnlyContainer</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>656</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.wrapBlock</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>657</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>658</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>659</span> </span><span class="NAME">this.moveChildNodes</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>660</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">wrapper</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>661</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>662</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.hasImportantAttributes</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>663</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.wrapBlock</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>664</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>665</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.replaceTag</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>666</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>667</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>668</span>
|
|
<span class='linenumber'>669</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"IllegalArgumentException - ["</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">", "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"]"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>670</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>671</span>
|
|
<span class='linenumber'>672</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>673</span> * Wrap or replace elements with given tag name.
|
|
<span class='linenumber'>674</span> *
|
|
<span class='linenumber'>675</span> * @param {String} tag Tag name
|
|
<span class='linenumber'>676</span> * @param {Element} from Start boundary (inclusive)
|
|
<span class='linenumber'>677</span> * @param {Element} to End boundary (inclusive)
|
|
<span class='linenumber'>678</span> *
|
|
<span class='linenumber'>679</span> * @returns {Array} Array of wrappers or replaced elements
|
|
<span class='linenumber'>680</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>681</span> </span><span class="NAME">applyTagIntoElements</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tagName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>682</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">applied</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>683</span>
|
|
<span class='linenumber'>684</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">tagName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>685</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">family</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.findCommonAncestorAndImmediateChildrenOf</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>686</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">family.left</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>687</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">tagName</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>688</span>
|
|
<span class='linenumber'>689</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">coveringWholeList</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
|
|
<span class='linenumber'>690</span> </span><span class="NAME">family.parent.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>691</span> </span><span class="NAME">family.parent.parentNode.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>692</span> </span><span class="PUNC">!</span><span class="NAME">family.left.previousSilbing</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>693</span> </span><span class="PUNC">!</span><span class="NAME">family.right.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>694</span>
|
|
<span class='linenumber'>695</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">coveringWholeList</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>696</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ul</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.parentNode.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>697</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">wrapper</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ul</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>698</span> </span><span class="NAME">wrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">ul</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>699</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>700</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">family.right</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>701</span> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>702</span> </span><span class="NAME">wrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>703</span> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>704</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>705</span> </span><span class="NAME">wrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">family.right</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>706</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>707</span> </span><span class="NAME">applied.push</span><span class="PUNC">(</span><span class="NAME">wrapper</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>708</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>709</span> </span><span class="COMM">// is normal tagName</span><span class="WHIT">
|
|
<span class='linenumber'>710</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">elements</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getBlockElementsBetween</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>711</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">elements.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>712</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">elements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>713</span> </span><span class="NAME">applied.push</span><span class="PUNC">(</span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="NAME">tagName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">elements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>714</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>715</span> </span><span class="NAME">applied.push</span><span class="PUNC">(</span><span class="NAME">this.replaceTag</span><span class="PUNC">(</span><span class="NAME">tagName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">elements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>716</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>717</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>718</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>719</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">applied.flatten</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>720</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>721</span>
|
|
<span class='linenumber'>722</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>723</span> * Moves block up or down
|
|
<span class='linenumber'>724</span> *
|
|
<span class='linenumber'>725</span> * @param {Element} block Target block
|
|
<span class='linenumber'>726</span> * @param {boolean} up Move up if true
|
|
<span class='linenumber'>727</span> *
|
|
<span class='linenumber'>728</span> * @returns {Element} Moved block. It could be different with given block.
|
|
<span class='linenumber'>729</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>730</span> </span><span class="NAME">moveBlock</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">up</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>731</span> </span><span class="COMM">// if block is table cell or contained by table cell, select its row as mover</span><span class="WHIT">
|
|
<span class='linenumber'>732</span> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"TR"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">block</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>733</span>
|
|
<span class='linenumber'>734</span> </span><span class="COMM">// if block is only child, select its parent as mover</span><span class="WHIT">
|
|
<span class='linenumber'>735</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">block.nodeName</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"TR"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">block.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">block.nextSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">block.parentNode</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>736</span> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>737</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>738</span>
|
|
<span class='linenumber'>739</span> </span><span class="COMM">// find target and where</span><span class="WHIT">
|
|
<span class='linenumber'>740</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">where</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>741</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">up</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>742</span> </span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.previousSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>743</span>
|
|
<span class='linenumber'>744</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">target</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>745</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">singleNodeLi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'LI'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">target.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isBlock</span><span class="PUNC">(</span><span class="NAME">target.firstChild</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.hasBlocks</span><span class="PUNC">(</span><span class="NAME">target</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>746</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">table</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'TABLE'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'TR'</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">target.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>747</span>
|
|
<span class='linenumber'>748</span> </span><span class="NAME">where</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">target</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">singleNodeLi</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">table</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"end"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>749</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">block.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>750</span> </span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>751</span> </span><span class="NAME">where</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>752</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>753</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>754</span> </span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>755</span>
|
|
<span class='linenumber'>756</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">target</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>757</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">singleNodeLi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">target.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'LI'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">target.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isBlock</span><span class="PUNC">(</span><span class="NAME">target.firstChild</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.hasBlocks</span><span class="PUNC">(</span><span class="NAME">target</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>758</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">table</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'TABLE'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'TR'</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">target.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>759</span>
|
|
<span class='linenumber'>760</span> </span><span class="NAME">where</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">target</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">singleNodeLi</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">table</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>761</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">block.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>762</span> </span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>763</span> </span><span class="NAME">where</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>764</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>765</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>766</span>
|
|
<span class='linenumber'>767</span>
|
|
<span class='linenumber'>768</span> </span><span class="COMM">// no way to go?</span><span class="WHIT">
|
|
<span class='linenumber'>769</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">target</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>770</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"TBODY"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"THEAD"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">target.nodeName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>771</span>
|
|
<span class='linenumber'>772</span> </span><span class="COMM">// normalize</span><span class="WHIT">
|
|
<span class='linenumber'>773</span> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>774</span>
|
|
<span class='linenumber'>775</span> </span><span class="COMM">// make placeholder if needed</span><span class="WHIT">
|
|
<span class='linenumber'>776</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isFirstLiWithNestedList</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>777</span> </span><span class="NAME">this.insertNewBlockAround</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"P"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>778</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>779</span>
|
|
<span class='linenumber'>780</span> </span><span class="COMM">// perform move</span><span class="WHIT">
|
|
<span class='linenumber'>781</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>782</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">moved</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">where</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>783</span>
|
|
<span class='linenumber'>784</span> </span><span class="COMM">// cleanup</span><span class="WHIT">
|
|
<span class='linenumber'>785</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">parent.hasChildNodes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">parent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>786</span> </span><span class="NAME">this.unwrapUnnecessaryParagraph</span><span class="PUNC">(</span><span class="NAME">moved</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>787</span> </span><span class="NAME">this.unwrapUnnecessaryParagraph</span><span class="PUNC">(</span><span class="NAME">target</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>788</span>
|
|
<span class='linenumber'>789</span> </span><span class="COMM">// remove placeholder</span><span class="WHIT">
|
|
<span class='linenumber'>790</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">up</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>791</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">moved.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">moved.previousSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">moved.previousSibling.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">moved.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">moved.nextSibling</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>792</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">moved.previousSibling</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>793</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>794</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>795</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">moved.nextSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">moved.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">moved.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">moved.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">moved.nextSibling.nextSibling</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>796</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">moved.nextSibling</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>797</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>798</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>799</span>
|
|
<span class='linenumber'>800</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">moved</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>801</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>802</span>
|
|
<span class='linenumber'>803</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>804</span> * Remove given block
|
|
<span class='linenumber'>805</span> *
|
|
<span class='linenumber'>806</span> * @param {Element} block Target block
|
|
<span class='linenumber'>807</span> * @returns {Element} Nearest block of remove element
|
|
<span class='linenumber'>808</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>809</span> </span><span class="NAME">removeBlock</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>810</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">blockToMove</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>811</span>
|
|
<span class='linenumber'>812</span> </span><span class="COMM">// if block is only child, select its parent as mover</span><span class="WHIT">
|
|
<span class='linenumber'>813</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">block.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">block.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">block.nextSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">block.parentNode</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>814</span> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>815</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>816</span>
|
|
<span class='linenumber'>817</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">finder</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.tree.isBlock</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isAtomic</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isDescendantOf</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.hasBlocks</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>818</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.tree.isBlock</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isDescendantOf</span><span class="PUNC">(</span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>819</span>
|
|
<span class='linenumber'>820</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isFirstLiWithNestedList</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>821</span> </span><span class="NAME">blockToMove</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.outdentListItem</span><span class="PUNC">(</span><span class="NAME">block.nextSibling.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>822</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">blockToMove.previousSibling</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>823</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isTableCell</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>824</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rtable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">xq.RichTable</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"TABLE"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>825</span> </span><span class="NAME">blockToMove</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rtable.getBelowCellOf</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>826</span>
|
|
<span class='linenumber'>827</span> </span><span class="COMM">// should not delete row when there's thead and the row is the only child of tbody</span><span class="WHIT">
|
|
<span class='linenumber'>828</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT">
|
|
<span class='linenumber'>829</span> </span><span class="NAME">block.parentNode.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"TBODY"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>830</span> </span><span class="NAME">rtable.hasHeadingAtTop</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>831</span> </span><span class="NAME">rtable.getDom</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">tBodies</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rows.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">blockToMove</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>832</span>
|
|
<span class='linenumber'>833</span> </span><span class="NAME">blockToMove</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blockToMove</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
|
|
<span class='linenumber'>834</span> </span><span class="NAME">this.tree.findForward</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">finder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
|
|
<span class='linenumber'>835</span> </span><span class="NAME">this.tree.findBackward</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">finder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>836</span>
|
|
<span class='linenumber'>837</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">block.parentNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>838</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>839</span> </span><span class="NAME">blockToMove</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blockToMove</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
|
|
<span class='linenumber'>840</span> </span><span class="NAME">this.tree.findForward</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">finder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
|
|
<span class='linenumber'>841</span> </span><span class="NAME">this.tree.findBackward</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">finder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>842</span>
|
|
<span class='linenumber'>843</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">blockToMove</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">blockToMove</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.makeEmptyParagraph</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>844</span>
|
|
<span class='linenumber'>845</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>846</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>847</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">hasChildNodes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>848</span> </span><span class="NAME">blockToMove</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>849</span> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">appendChild</span><span class="PUNC">(</span><span class="NAME">blockToMove</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>850</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">blockToMove</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>851</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>852</span>
|
|
<span class='linenumber'>853</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">blockToMove</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>854</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>855</span>
|
|
<span class='linenumber'>856</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>857</span> * Removes trailing whitespaces of given block
|
|
<span class='linenumber'>858</span> *
|
|
<span class='linenumber'>859</span> * @param {Element} block Target block
|
|
<span class='linenumber'>860</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>861</span> </span><span class="NAME">removeTrailingWhitespace</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>862</span>
|
|
<span class='linenumber'>863</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>864</span> * Extract given list item out and change its container's tag
|
|
<span class='linenumber'>865</span> *
|
|
<span class='linenumber'>866</span> * @param {Element} element LI or P which is a child of LI
|
|
<span class='linenumber'>867</span> * @param {String} type "OL", "UL", or "CODE"
|
|
<span class='linenumber'>868</span> *
|
|
<span class='linenumber'>869</span> * @returns {Element} changed element
|
|
<span class='linenumber'>870</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>871</span> </span><span class="NAME">changeListTypeTo</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>872</span> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>873</span>
|
|
<span class='linenumber'>874</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">li</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"LI"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>875</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">li</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"IllegalArgumentException"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>876</span>
|
|
<span class='linenumber'>877</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">li.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>878</span>
|
|
<span class='linenumber'>879</span> </span><span class="NAME">this.splitContainerOf</span><span class="PUNC">(</span><span class="NAME">li</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>880</span>
|
|
<span class='linenumber'>881</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"OL"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>882</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"CODE"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">newContainer.className</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"code"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>883</span>
|
|
<span class='linenumber'>884</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">li</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>885</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>886</span>
|
|
<span class='linenumber'>887</span> </span><span class="NAME">this.mergeAdjustLists</span><span class="PUNC">(</span><span class="NAME">newContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>888</span>
|
|
<span class='linenumber'>889</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>890</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>891</span>
|
|
<span class='linenumber'>892</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>893</span> * Split container of element into (maxium) three pieces.
|
|
<span class='linenumber'>894</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>895</span> </span><span class="NAME">splitContainerOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">preserveElementItself</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>896</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>897</span>
|
|
<span class='linenumber'>898</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>899</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">dir.toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"prev"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>900</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">container.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>901</span> </span><span class="NAME">this.copyAttributes</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>902</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">container.firstChild</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>903</span> </span><span class="NAME">prev.appendChild</span><span class="PUNC">(</span><span class="NAME">container.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>904</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>905</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>906</span> </span><span class="NAME">this.unwrapUnnecessaryParagraph</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>907</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>908</span>
|
|
<span class='linenumber'>909</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element.nextSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">dir.toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"next"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>910</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">container.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>911</span> </span><span class="NAME">this.copyAttributes</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>912</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">container.lastChild</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>913</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">container.lastChild</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>914</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>915</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>916</span> </span><span class="NAME">this.unwrapUnnecessaryParagraph</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>917</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>918</span>
|
|
<span class='linenumber'>919</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">preserveElementItself</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.unwrapUnnecessaryParagraph</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>920</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>921</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>922</span>
|
|
<span class='linenumber'>923</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>924</span> * TODO: Add specs
|
|
<span class='linenumber'>925</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>926</span> </span><span class="NAME">splitParentElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">seperator</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>927</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">seperator.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>928</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"HTML"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"HEAD"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"BODY"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">parent.nodeName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Illegal argument. Cannot seperate element["</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">parent.nodeName</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"]"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>929</span>
|
|
<span class='linenumber'>930</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">previousSibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">seperator.previousSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>931</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextSibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">seperator.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>932</span>
|
|
<span class='linenumber'>933</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">parent.nodeName</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>934</span>
|
|
<span class='linenumber'>935</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>936</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">seperator.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">newElement.appendChild</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>937</span>
|
|
<span class='linenumber'>938</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">seperator</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>939</span> </span><span class="NAME">this.copyAttributes</span><span class="PUNC">(</span><span class="NAME">parent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>940</span>
|
|
<span class='linenumber'>941</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">newElement</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>942</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>943</span>
|
|
<span class='linenumber'>944</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>945</span> * TODO: Add specs
|
|
<span class='linenumber'>946</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>947</span> </span><span class="NAME">splitElementUpto</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">seperator</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">excludeElement</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>948</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">seperator.previousSibling</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>949</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">excludeElement</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">seperator.parentNode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>950</span> </span><span class="NAME">seperator</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.splitParentElement</span><span class="PUNC">(</span><span class="NAME">seperator</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>951</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>952</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">seperator</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>953</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>954</span>
|
|
<span class='linenumber'>955</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>956</span> * Merges two adjust elements
|
|
<span class='linenumber'>957</span> *
|
|
<span class='linenumber'>958</span> * @param {Element} element base element
|
|
<span class='linenumber'>959</span> * @param {boolean} withNext merge base element with next sibling
|
|
<span class='linenumber'>960</span> * @param {boolean} skip skip merge steps
|
|
<span class='linenumber'>961</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>962</span> </span><span class="NAME">mergeElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">withNext</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">skip</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>963</span> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>964</span>
|
|
<span class='linenumber'>965</span> </span><span class="COMM">// find two block</span><span class="WHIT">
|
|
<span class='linenumber'>966</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">withNext</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>967</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>968</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.findForward</span><span class="PUNC">(</span><span class="WHIT">
|
|
<span class='linenumber'>969</span> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>970</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.tree.isBlock</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>971</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>972</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>973</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>974</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.findBackward</span><span class="PUNC">(</span><span class="WHIT">
|
|
<span class='linenumber'>975</span> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>976</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.tree.isBlock</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>977</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>978</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>979</span>
|
|
<span class='linenumber'>980</span> </span><span class="COMM">// normalize next block</span><span class="WHIT">
|
|
<span class='linenumber'>981</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isDescendantOf</span><span class="PUNC">(</span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>982</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">next.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>983</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>984</span> </span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>985</span> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nextContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>986</span> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nextContainer.firstChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>987</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>988</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>989</span> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>990</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>991</span>
|
|
<span class='linenumber'>992</span> </span><span class="COMM">// normalize prev block</span><span class="WHIT">
|
|
<span class='linenumber'>993</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isDescendantOf</span><span class="PUNC">(</span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>994</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prev.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>995</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>996</span> </span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>997</span> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prevContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>998</span> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prevContainer.lastChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>999</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1000</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1001</span> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1002</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1003</span>
|
|
<span class='linenumber'>1004</span> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1005</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">containersAreTableCell</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
|
|
<span class='linenumber'>1006</span> </span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.tree.isTableCell</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'TR'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'THEAD'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'TBODY'</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">prevContainer.nodeName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1007</span> </span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.tree.isTableCell</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'TR'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'THEAD'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'TBODY'</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">nextContainer.nodeName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1008</span>
|
|
<span class='linenumber'>1009</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">containersAreTableCell</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">nextContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1010</span>
|
|
<span class='linenumber'>1011</span> </span><span class="COMM">// if next has margin, perform outdent</span><span class="WHIT">
|
|
<span class='linenumber'>1012</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">skip</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">prev</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.outdentElement</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1013</span>
|
|
<span class='linenumber'>1014</span> </span><span class="COMM">// nextContainer is first li and next of it is list container</span><span class="WHIT">
|
|
<span class='linenumber'>1015</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">nextContainer.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'LI'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">next.nextSibling</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1016</span> </span><span class="NAME">this.extractOutElementFromParent</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1017</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1018</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1019</span>
|
|
<span class='linenumber'>1020</span> </span><span class="COMM">// merge two list containers</span><span class="WHIT">
|
|
<span class='linenumber'>1021</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">nextContainer.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'LI'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">nextContainer.parentNode.previousSibling</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1022</span> </span><span class="NAME">this.mergeAdjustLists</span><span class="PUNC">(</span><span class="NAME">nextContainer.parentNode.previousSibling</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"next"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1023</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1024</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1025</span>
|
|
<span class='linenumber'>1026</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">containersAreTableCell</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prevContainer.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'LI'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">nextContainer.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'LI'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prevContainer.parentNode.nextSibling</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">nextContainer.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1027</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextContainerContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nextContainer.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1028</span> </span><span class="NAME">this.moveChildNodes</span><span class="PUNC">(</span><span class="NAME">nextContainer.parentNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prevContainer.parentNode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1029</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">nextContainerContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1030</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1031</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1032</span>
|
|
<span class='linenumber'>1033</span> </span><span class="COMM">// merge two containers</span><span class="WHIT">
|
|
<span class='linenumber'>1034</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">containersAreTableCell</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prevContainer.nextSibling</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">skip</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prevContainer.nodeName</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">skip</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prevContainer.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1035</span> </span><span class="NAME">this.moveChildNodes</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prevContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1036</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1037</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1038</span>
|
|
<span class='linenumber'>1039</span> </span><span class="COMM">// unwrap container</span><span class="WHIT">
|
|
<span class='linenumber'>1040</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">nextContainer.nodeName</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"TABLE"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">next.previousSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1041</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.unwrapElement</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1042</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1043</span>
|
|
<span class='linenumber'>1044</span> </span><span class="COMM">// delete table</span><span class="WHIT">
|
|
<span class='linenumber'>1045</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">withNext</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">nextContainer.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"TABLE"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1046</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1047</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1048</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">withNext</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isTableCell</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isTableCell</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1049</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"TABLE"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1050</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1051</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1052</span>
|
|
<span class='linenumber'>1053</span> </span><span class="COMM">// if prev is same with next, do nothing</span><span class="WHIT">
|
|
<span class='linenumber'>1054</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1055</span>
|
|
<span class='linenumber'>1056</span> </span><span class="COMM">// if there is a null block, do nothing</span><span class="WHIT">
|
|
<span class='linenumber'>1057</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">nextContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1058</span>
|
|
<span class='linenumber'>1059</span> </span><span class="COMM">// if two blocks are not in the same table cell, do nothing</span><span class="WHIT">
|
|
<span class='linenumber'>1060</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"TD"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"TH"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"TD"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"TH"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1061</span>
|
|
<span class='linenumber'>1062</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prevIsEmpty</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1063</span>
|
|
<span class='linenumber'>1064</span> </span><span class="COMM">// cleanup empty block before merge</span><span class="WHIT">
|
|
<span class='linenumber'>1065</span>
|
|
<span class='linenumber'>1066</span> </span><span class="COMM">// 1. cleanup prev node which ends with marker + </span><span class="WHIT">
|
|
<span class='linenumber'>1067</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT">
|
|
<span class='linenumber'>1068</span> </span><span class="NAME">xq.Browser.isTrident</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1069</span> </span><span class="NAME">prev.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1070</span> </span><span class="NAME">this.isMarker</span><span class="PUNC">(</span><span class="NAME">prev.lastChild.previousSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1071</span> </span><span class="NAME">prev.lastChild.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1072</span> </span><span class="NAME">prev.lastChild.nodeValue.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1073</span> </span><span class="NAME">prev.lastChild.nodeValue.charCodeAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">160</span><span class="WHIT">
|
|
<span class='linenumber'>1074</span> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1075</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">prev.lastChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1076</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1077</span>
|
|
<span class='linenumber'>1078</span> </span><span class="COMM">// 2. cleanup prev node (if prev is empty, then replace prev's tag with next's)</span><span class="WHIT">
|
|
<span class='linenumber'>1079</span> </span><span class="NAME">this.removePlaceHoldersAndEmptyNodes</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1080</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1081</span> </span><span class="COMM">// replace atomic block with normal block so that following code don't need to care about atomic block</span><span class="WHIT">
|
|
<span class='linenumber'>1082</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isAtomic</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.replaceTag</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1083</span>
|
|
<span class='linenumber'>1084</span> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.replaceTag</span><span class="PUNC">(</span><span class="NAME">next.nodeName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1085</span> </span><span class="NAME">prev.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1086</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">prev.firstChild</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">prev.lastChild</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isMarker</span><span class="PUNC">(</span><span class="NAME">prev.firstChild</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1087</span> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.replaceTag</span><span class="PUNC">(</span><span class="NAME">next.nodeName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1088</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1089</span>
|
|
<span class='linenumber'>1090</span> </span><span class="COMM">// 3. cleanup next node</span><span class="WHIT">
|
|
<span class='linenumber'>1091</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1092</span> </span><span class="COMM">// replace atomic block with normal block so that following code don't need to care about atomic block</span><span class="WHIT">
|
|
<span class='linenumber'>1093</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isAtomic</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.replaceTag</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1094</span>
|
|
<span class='linenumber'>1095</span> </span><span class="NAME">next.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1096</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1097</span>
|
|
<span class='linenumber'>1098</span> </span><span class="COMM">// perform merge</span><span class="WHIT">
|
|
<span class='linenumber'>1099</span> </span><span class="NAME">this.moveChildNodes</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1100</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1101</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1102</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">finally</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1103</span> </span><span class="COMM">// cleanup</span><span class="WHIT">
|
|
<span class='linenumber'>1104</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1105</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1106</span>
|
|
<span class='linenumber'>1107</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.unwrapUnnecessaryParagraph</span><span class="PUNC">(</span><span class="NAME">prevContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1108</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.unwrapUnnecessaryParagraph</span><span class="PUNC">(</span><span class="NAME">nextContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1109</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1110</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1111</span>
|
|
<span class='linenumber'>1112</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1113</span> * Merges adjust list containers which has same tag name
|
|
<span class='linenumber'>1114</span> *
|
|
<span class='linenumber'>1115</span> * @param {Element} container target list container
|
|
<span class='linenumber'>1116</span> * @param {boolean} force force adjust list container even if they have different list type
|
|
<span class='linenumber'>1117</span> * @param {String} dir Specify merge direction: PREV or NEXT. If not supplied it will be merged with both direction.
|
|
<span class='linenumber'>1118</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1119</span> </span><span class="NAME">mergeAdjustLists</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">force</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1120</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.previousSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1121</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isPrevSame</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">prev.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">container.nodeName</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">prev.className</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">container.className</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1122</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">dir.toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'prev'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isPrevSame</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">force</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1123</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">prev.lastChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1124</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">prev.lastChild</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1125</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1126</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">prev</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1127</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1128</span>
|
|
<span class='linenumber'>1129</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1130</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isNextSame</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">next.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">container.nodeName</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">next.className</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">container.className</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1131</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">dir</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">dir.toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'next'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isNextSame</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">force</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1132</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">next.firstChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1133</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">next.firstChild</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"end"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1134</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1135</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">next</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1136</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1137</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1138</span>
|
|
<span class='linenumber'>1139</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1140</span> * Moves child nodes from one element into another.
|
|
<span class='linenumber'>1141</span> *
|
|
<span class='linenumber'>1142</span> * @param {Elemet} from source element
|
|
<span class='linenumber'>1143</span> * @param {Elemet} to target element
|
|
<span class='linenumber'>1144</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1145</span> </span><span class="NAME">moveChildNodes</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1146</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isDescendantOf</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"HTML"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"HEAD"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">to.nodeName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1147</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Illegal argument. Cannot move children of element["</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">from.nodeName</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"] to element["</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">to.nodeName</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"]"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1148</span>
|
|
<span class='linenumber'>1149</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">from</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1150</span>
|
|
<span class='linenumber'>1151</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">from.firstChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">to.appendChild</span><span class="PUNC">(</span><span class="NAME">from.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1152</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1153</span>
|
|
<span class='linenumber'>1154</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1155</span> * Copies attributes from one element into another.
|
|
<span class='linenumber'>1156</span> *
|
|
<span class='linenumber'>1157</span> * @param {Element} from source element
|
|
<span class='linenumber'>1158</span> * @param {Element} to target element
|
|
<span class='linenumber'>1159</span> * @param {boolean} copyId copy ID attribute of source element
|
|
<span class='linenumber'>1160</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1161</span> </span><span class="NAME">copyAttributes</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">copyId</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1162</span> </span><span class="COMM">// IE overrides this</span><span class="WHIT">
|
|
<span class='linenumber'>1163</span>
|
|
<span class='linenumber'>1164</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">from.attributes</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1165</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">attrs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1166</span>
|
|
<span class='linenumber'>1167</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">attrs.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1168</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">attrs</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"class"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">nodeValue</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1169</span> </span><span class="NAME">to.className</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">nodeValue</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1170</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">copyId</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">[</span><span class="STRN">"id"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">attrs</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">nodeName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">nodeValue</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1171</span> </span><span class="NAME">to.setAttribute</span><span class="PUNC">(</span><span class="NAME">attrs</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">nodeName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">nodeValue</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1172</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1173</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1174</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1175</span>
|
|
<span class='linenumber'>1176</span> </span><span class="NAME">_indentElements</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">affect</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1177</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">affect.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1178</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">affect</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.tree.isDescendantOf</span><span class="PUNC">(</span><span class="NAME">affect</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1179</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1180</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1181</span> </span><span class="NAME">leaves</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.getLeavesAtEdge</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1182</span>
|
|
<span class='linenumber'>1183</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">blocks.include</span><span class="PUNC">(</span><span class="NAME">leaves</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1184</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">affected</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.indentElement</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1185</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1186</span> </span><span class="NAME">affect.push</span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1187</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1188</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1189</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1190</span>
|
|
<span class='linenumber'>1191</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">blocks.include</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1192</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">affected</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.indentElement</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1193</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1194</span> </span><span class="NAME">affect.push</span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1195</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1196</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1197</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1198</span>
|
|
<span class='linenumber'>1199</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">children</span><span class="PUNC">=</span><span class="NAME">$A</span><span class="PUNC">(</span><span class="NAME">node.childNodes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1200</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">children.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1201</span> </span><span class="NAME">this._indentElements</span><span class="PUNC">(</span><span class="NAME">children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">affect</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1202</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1203</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1204</span>
|
|
<span class='linenumber'>1205</span> </span><span class="NAME">indentElements</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1206</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getBlockElementsBetween</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1207</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.findCommonAncestorAndImmediateChildrenOf</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1208</span>
|
|
<span class='linenumber'>1209</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">affect</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1210</span>
|
|
<span class='linenumber'>1211</span> </span><span class="NAME">leaves</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.getLeavesAtEdge</span><span class="PUNC">(</span><span class="NAME">top.parent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1212</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">blocks.include</span><span class="PUNC">(</span><span class="NAME">leaves</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1213</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">affected</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.indentElement</span><span class="PUNC">(</span><span class="NAME">top.parent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1214</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1215</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">affected</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1216</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1217</span>
|
|
<span class='linenumber'>1218</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">children</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$A</span><span class="PUNC">(</span><span class="NAME">top.parent.childNodes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1219</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">children.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1220</span> </span><span class="NAME">this._indentElements</span><span class="PUNC">(</span><span class="NAME">children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">affect</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1221</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1222</span>
|
|
<span class='linenumber'>1223</span> </span><span class="NAME">affect</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">affect.flatten</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1224</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">affect.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">affect</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1225</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1226</span>
|
|
<span class='linenumber'>1227</span> </span><span class="NAME">outdentElementsCode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1228</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">node.tagName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'LI'</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1229</span> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1230</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">node.tagName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'OL'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.className</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'code'</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1231</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1232</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1233</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1234</span>
|
|
<span class='linenumber'>1235</span> </span><span class="NAME">_outdentElements</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">affect</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1236</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">affect.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1237</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">affect</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.tree.isDescendantOf</span><span class="PUNC">(</span><span class="NAME">affect</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1238</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1239</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1240</span> </span><span class="NAME">leaves</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.getLeavesAtEdge</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1241</span>
|
|
<span class='linenumber'>1242</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">blocks.include</span><span class="PUNC">(</span><span class="NAME">leaves</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.outdentElementsCode</span><span class="PUNC">(</span><span class="NAME">leaves</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1243</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">affected</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.outdentElement</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1244</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1245</span> </span><span class="NAME">affect.push</span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1246</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1247</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1248</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1249</span>
|
|
<span class='linenumber'>1250</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">blocks.include</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1251</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">children</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$A</span><span class="PUNC">(</span><span class="NAME">node.parentNode.childNodes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1252</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.outdentElementsCode</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1253</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">affected</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.outdentElement</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">isCode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1254</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1255</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">children.include</span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">node.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">isCode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1256</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">children.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1257</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">blocks.include</span><span class="PUNC">(</span><span class="NAME">children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">affect.include</span><span class="PUNC">(</span><span class="NAME">children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1258</span> </span><span class="NAME">affect.push</span><span class="PUNC">(</span><span class="NAME">children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1259</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1260</span> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT">
|
|
<span class='linenumber'>1261</span> </span><span class="NAME">affect.push</span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1262</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1263</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1264</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1265</span>
|
|
<span class='linenumber'>1266</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">children</span><span class="PUNC">=</span><span class="NAME">$A</span><span class="PUNC">(</span><span class="NAME">node.childNodes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1267</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">children.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1268</span> </span><span class="NAME">this._outdentElements</span><span class="PUNC">(</span><span class="NAME">children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">affect</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1269</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1270</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1271</span>
|
|
<span class='linenumber'>1272</span> </span><span class="NAME">outdentElements</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1273</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1274</span>
|
|
<span class='linenumber'>1275</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">from.parentNode.tagName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'LI'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">=</span><span class="NAME">from.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1276</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">to.parentNode.tagName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'LI'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">=</span><span class="NAME">to.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1277</span>
|
|
<span class='linenumber'>1278</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getBlockElementsBetween</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1279</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.findCommonAncestorAndImmediateChildrenOf</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1280</span>
|
|
<span class='linenumber'>1281</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">affect</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1282</span>
|
|
<span class='linenumber'>1283</span> </span><span class="NAME">leaves</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.getLeavesAtEdge</span><span class="PUNC">(</span><span class="NAME">top.parent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1284</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">blocks.include</span><span class="PUNC">(</span><span class="NAME">leaves</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.outdentElementsCode</span><span class="PUNC">(</span><span class="NAME">top.parent</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1285</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">affected</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.outdentElement</span><span class="PUNC">(</span><span class="NAME">top.parent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1286</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">affected</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1287</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">affected</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1288</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1289</span>
|
|
<span class='linenumber'>1290</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">children</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$A</span><span class="PUNC">(</span><span class="NAME">top.parent.childNodes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1291</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">children.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1292</span> </span><span class="NAME">this._outdentElements</span><span class="PUNC">(</span><span class="NAME">children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">affect</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1293</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1294</span>
|
|
<span class='linenumber'>1295</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">from.offsetParent</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">to.offsetParent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1296</span> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">from</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1297</span> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1298</span> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">blocks.first</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">offsetParent</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">blocks.last</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">offsetParent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1299</span> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blocks.first</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1300</span> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blocks.last</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1301</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1302</span>
|
|
<span class='linenumber'>1303</span> </span><span class="NAME">affect</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">affect.flatten</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1304</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">start.offsetParent</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1305</span> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">affect.first</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1306</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">end.offsetParent</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1307</span> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">affect.last</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1308</span>
|
|
<span class='linenumber'>1309</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getBlockElementsBetween</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1310</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1311</span>
|
|
<span class='linenumber'>1312</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1313</span> * Performs indent by increasing element's margin-left
|
|
<span class='linenumber'>1314</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1315</span> </span><span class="NAME">indentElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">noParent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceMargin</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1316</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT">
|
|
<span class='linenumber'>1317</span> </span><span class="PUNC">!</span><span class="NAME">forceMargin</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1318</span> </span><span class="PUNC">(</span><span class="NAME">element.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">element.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">element.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1319</span> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.indentListItem</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">noParent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1320</span>
|
|
<span class='linenumber'>1321</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">root</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1322</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1323</span>
|
|
<span class='linenumber'>1324</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">root</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">element.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">noParent</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">=</span><span class="NAME">element.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1325</span>
|
|
<span class='linenumber'>1326</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">margin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.style.marginLeft</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1327</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cssValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">margin</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this._getCssValue</span><span class="PUNC">(</span><span class="NAME">margin</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">value</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">unit</span><span class="PUNC">:</span><span class="STRN">"em"</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1328</span>
|
|
<span class='linenumber'>1329</span> </span><span class="NAME">cssValue.value</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1330</span> </span><span class="NAME">element.style.marginLeft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cssValue.value</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cssValue.unit</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1331</span>
|
|
<span class='linenumber'>1332</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1333</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1334</span>
|
|
<span class='linenumber'>1335</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1336</span> * Performs outdent by decreasing element's margin-left
|
|
<span class='linenumber'>1337</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1338</span> </span><span class="NAME">outdentElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">noParent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">forceMargin</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1339</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">forceMargin</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">element.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.outdentListItem</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">noParent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1340</span>
|
|
<span class='linenumber'>1341</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">root</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1342</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1343</span>
|
|
<span class='linenumber'>1344</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">margin</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.style.marginLeft</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1345</span>
|
|
<span class='linenumber'>1346</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cssValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">margin</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this._getCssValue</span><span class="PUNC">(</span><span class="NAME">margin</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">value</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">unit</span><span class="PUNC">:</span><span class="STRN">"em"</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1347</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">cssValue.value</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1348</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element.previousSibling</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">forceMargin</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT">
|
|
<span class='linenumber'>1349</span> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
|
|
<span class='linenumber'>1350</span> </span><span class="NAME">this.outdentElement</span><span class="PUNC">(</span><span class="NAME">element.parentNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">noParent</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1351</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1352</span>
|
|
<span class='linenumber'>1353</span> </span><span class="NAME">cssValue.value</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1354</span> </span><span class="NAME">element.style.marginLeft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cssValue.value</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">cssValue.value</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">cssValue.unit</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1355</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element.style.cssText</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">element.removeAttribute</span><span class="PUNC">(</span><span class="STRN">"style"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1356</span>
|
|
<span class='linenumber'>1357</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1358</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1359</span>
|
|
<span class='linenumber'>1360</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1361</span> * Performs indent for list item
|
|
<span class='linenumber'>1362</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1363</span> </span><span class="NAME">indentListItem</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">treatListAsNormalBlock</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1364</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">li</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"LI"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1365</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">li.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1366</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">li.previousSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1367</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">li.previousSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.indentElement</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1368</span>
|
|
<span class='linenumber'>1369</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">li.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"OL"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">li.parentNode.className</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"code"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.indentElement</span><span class="PUNC">(</span><span class="NAME">li</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">treatListAsNormalBlock</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1370</span>
|
|
<span class='linenumber'>1371</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">prev.lastChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">prev.appendChild</span><span class="PUNC">(</span><span class="NAME">this.makePlaceHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1372</span>
|
|
<span class='linenumber'>1373</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
|
|
<span class='linenumber'>1374</span> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">prev.lastChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT">
|
|
<span class='linenumber'>1375</span> </span><span class="COMM">// if there's existing list container, select it as target container</span><span class="WHIT">
|
|
<span class='linenumber'>1376</span> </span><span class="NAME">prev.lastChild</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
|
|
<span class='linenumber'>1377</span> </span><span class="COMM">// if there's nothing, create new one</span><span class="WHIT">
|
|
<span class='linenumber'>1378</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">container.nodeName</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"end"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1379</span>
|
|
<span class='linenumber'>1380</span> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prev</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1381</span>
|
|
<span class='linenumber'>1382</span> </span><span class="COMM">// perform move</span><span class="WHIT">
|
|
<span class='linenumber'>1383</span> </span><span class="NAME">targetContainer.appendChild</span><span class="PUNC">(</span><span class="NAME">li</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1384</span>
|
|
<span class='linenumber'>1385</span> </span><span class="COMM">// flatten nested list</span><span class="WHIT">
|
|
<span class='linenumber'>1386</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">treatListAsNormalBlock</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">li.lastChild</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">li.lastChild</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1387</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">childrenContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">li.lastChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1388</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">child</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1389</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">child</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">childrenContainer.lastChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1390</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">child</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">li</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1391</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1392</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">childrenContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1393</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1394</span>
|
|
<span class='linenumber'>1395</span> </span><span class="NAME">this.unwrapUnnecessaryParagraph</span><span class="PUNC">(</span><span class="NAME">li</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1396</span>
|
|
<span class='linenumber'>1397</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">li</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1398</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1399</span>
|
|
<span class='linenumber'>1400</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1401</span> * Performs outdent for list item
|
|
<span class='linenumber'>1402</span> *
|
|
<span class='linenumber'>1403</span> * @return {Element} outdented list item or null if no outdent performed
|
|
<span class='linenumber'>1404</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1405</span> </span><span class="NAME">outdentListItem</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">treatListAsNormalBlock</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1406</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">li</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"LI"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1407</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">li.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1408</span>
|
|
<span class='linenumber'>1409</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">li.previousSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1410</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">performed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.outdentElement</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1411</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">performed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">performed</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1412</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1413</span>
|
|
<span class='linenumber'>1414</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">li.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"OL"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">li.parentNode.className</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"code"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.outdentElement</span><span class="PUNC">(</span><span class="NAME">li</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">treatListAsNormalBlock</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1415</span>
|
|
<span class='linenumber'>1416</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parentLi</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1417</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">parentLi.nodeName</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1418</span>
|
|
<span class='linenumber'>1419</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">treatListAsNormalBlock</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1420</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">container.lastChild</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">li</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1421</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">container.lastChild</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parentLi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1422</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1423</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1424</span> </span><span class="COMM">// make next siblings as children</span><span class="WHIT">
|
|
<span class='linenumber'>1425</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">li.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1426</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
|
|
<span class='linenumber'>1427</span> </span><span class="NAME">li.lastChild</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">li.lastChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT">
|
|
<span class='linenumber'>1428</span> </span><span class="COMM">// if there's existing list container, select it as target container</span><span class="WHIT">
|
|
<span class='linenumber'>1429</span> </span><span class="NAME">li.lastChild</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
|
|
<span class='linenumber'>1430</span> </span><span class="COMM">// if there's nothing, create new one</span><span class="WHIT">
|
|
<span class='linenumber'>1431</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">container.nodeName</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">li</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"end"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1432</span>
|
|
<span class='linenumber'>1433</span> </span><span class="NAME">this.copyAttributes</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">targetContainer</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1434</span>
|
|
<span class='linenumber'>1435</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1436</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">li.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1437</span> </span><span class="NAME">targetContainer.appendChild</span><span class="PUNC">(</span><span class="NAME">sibling</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1438</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1439</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1440</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1441</span>
|
|
<span class='linenumber'>1442</span> </span><span class="COMM">// move current LI into parent LI's next sibling</span><span class="WHIT">
|
|
<span class='linenumber'>1443</span> </span><span class="NAME">li</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">li</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parentLi</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1444</span>
|
|
<span class='linenumber'>1445</span> </span><span class="COMM">// remove empty container</span><span class="WHIT">
|
|
<span class='linenumber'>1446</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">container.childNodes.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1447</span>
|
|
<span class='linenumber'>1448</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">li.firstChild</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">li.firstChild</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1449</span> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.makePlaceHolder</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">li</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"start"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1450</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1451</span>
|
|
<span class='linenumber'>1452</span> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">li</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1453</span> </span><span class="NAME">this.unwrapUnnecessaryParagraph</span><span class="PUNC">(</span><span class="NAME">parentLi</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1454</span>
|
|
<span class='linenumber'>1455</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">li</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1456</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1457</span>
|
|
<span class='linenumber'>1458</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1459</span> * Performs justification
|
|
<span class='linenumber'>1460</span> *
|
|
<span class='linenumber'>1461</span> * @param {Element} block target element
|
|
<span class='linenumber'>1462</span> * @param {String} dir one of "LEFT", "CENTER", "RIGHT", "BOTH"
|
|
<span class='linenumber'>1463</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1464</span> </span><span class="NAME">justifyBlock</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1465</span> </span><span class="COMM">// if block is only child, select its parent as mover</span><span class="WHIT">
|
|
<span class='linenumber'>1466</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">block.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">block.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">block.nextSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">block.parentNode</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1467</span> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1468</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1469</span>
|
|
<span class='linenumber'>1470</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">styleValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dir.toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"both"</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"justify"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1471</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">styleValue</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"left"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1472</span> </span><span class="NAME">block.style.textAlign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1473</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">block.style.cssText</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">block.removeAttribute</span><span class="PUNC">(</span><span class="STRN">"style"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1474</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1475</span> </span><span class="NAME">block.style.textAlign</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">styleValue</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1476</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1477</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">block</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1478</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1479</span>
|
|
<span class='linenumber'>1480</span> </span><span class="NAME">justifyBlocks</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">blocks</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1481</span> </span><span class="NAME">blocks.each</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1482</span> </span><span class="NAME">this.justifyBlock</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">dir</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1483</span> </span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1484</span>
|
|
<span class='linenumber'>1485</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1486</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1487</span>
|
|
<span class='linenumber'>1488</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1489</span> * Turn given element into list. If the element is a list already, it will be reversed into normal element.
|
|
<span class='linenumber'>1490</span> *
|
|
<span class='linenumber'>1491</span> * @param {Element} element target element
|
|
<span class='linenumber'>1492</span> * @param {String} type one of "UL", "OL"
|
|
<span class='linenumber'>1493</span> * @returns {Element} affected element
|
|
<span class='linenumber'>1494</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1495</span> </span><span class="NAME">applyList</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1496</span> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1497</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">containerTag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"OL"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1498</span>
|
|
<span class='linenumber'>1499</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">element.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">element.previousSibling</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1500</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"LI"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1501</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1502</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">container.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">containerTag</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1503</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.extractOutElementFromParent</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1504</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1505</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.changeListTypeTo</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1506</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1507</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1508</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.turnElementIntoListItem</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1509</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1510</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1511</span>
|
|
<span class='linenumber'>1512</span> </span><span class="NAME">applyLists</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1513</span> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1514</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">containerTag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"OL"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1515</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getBlockElementsBetween</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1516</span>
|
|
<span class='linenumber'>1517</span> </span><span class="COMM">// LIs or Non-containing blocks</span><span class="WHIT">
|
|
<span class='linenumber'>1518</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">whole</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blocks.findAll</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1519</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1520</span> </span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1521</span>
|
|
<span class='linenumber'>1522</span> </span><span class="COMM">// LIs</span><span class="WHIT">
|
|
<span class='linenumber'>1523</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">listItems</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">whole.findAll</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1524</span>
|
|
<span class='linenumber'>1525</span> </span><span class="COMM">// Non-containing blocks which is not a descendant of any LIs selected above(listItems).</span><span class="WHIT">
|
|
<span class='linenumber'>1526</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">normalBlocks</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">whole.findAll</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1527</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e.nodeName</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1528</span> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">e.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">e.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">e.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1529</span> </span><span class="PUNC">!</span><span class="NAME">this.tree.isDescendantOf</span><span class="PUNC">(</span><span class="NAME">listItems</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1530</span> </span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1531</span>
|
|
<span class='linenumber'>1532</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">diffListItems</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">listItems.findAll</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1533</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">e.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">containerTag</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1534</span> </span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1535</span>
|
|
<span class='linenumber'>1536</span> </span><span class="COMM">// Conditions needed to determine mode</span><span class="WHIT">
|
|
<span class='linenumber'>1537</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hasNormalBlocks</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">normalBlocks.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1538</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hasDifferentListStyle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">diffListItems.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1539</span>
|
|
<span class='linenumber'>1540</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">blockToHandle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1541</span>
|
|
<span class='linenumber'>1542</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">hasNormalBlocks</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1543</span> </span><span class="NAME">blockToHandle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">normalBlocks</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1544</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">hasDifferentListStyle</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1545</span> </span><span class="NAME">blockToHandle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">diffListItems</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1546</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1547</span> </span><span class="NAME">blockToHandle</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">listItems</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1548</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1549</span>
|
|
<span class='linenumber'>1550</span> </span><span class="COMM">// perform operation</span><span class="WHIT">
|
|
<span class='linenumber'>1551</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">blockToHandle.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1552</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blockToHandle</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1553</span>
|
|
<span class='linenumber'>1554</span> </span><span class="COMM">// preserve original index to restore selection</span><span class="WHIT">
|
|
<span class='linenumber'>1555</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">originalIndex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">blocks.indexOf</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1556</span> </span><span class="NAME">blocks</span><span class="PUNC">[</span><span class="NAME">originalIndex</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.applyList</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1557</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1558</span>
|
|
<span class='linenumber'>1559</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1560</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1561</span>
|
|
<span class='linenumber'>1562</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1563</span> * Insert place-holder for given empty element. Empty element does not displayed and causes many editing problems.
|
|
<span class='linenumber'>1564</span> *
|
|
<span class='linenumber'>1565</span> * @param {Element} element empty element
|
|
<span class='linenumber'>1566</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1567</span> </span><span class="NAME">correctEmptyElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1568</span>
|
|
<span class='linenumber'>1569</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1570</span> * Corrects current block-only-container to do not take any non-block element or node.
|
|
<span class='linenumber'>1571</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1572</span> </span><span class="NAME">correctParagraph</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1573</span>
|
|
<span class='linenumber'>1574</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1575</span> * Makes place-holder for empty element.
|
|
<span class='linenumber'>1576</span> *
|
|
<span class='linenumber'>1577</span> * @returns {Node} Platform specific place holder
|
|
<span class='linenumber'>1578</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1579</span> </span><span class="NAME">makePlaceHolder</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1580</span>
|
|
<span class='linenumber'>1581</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1582</span> * Makes place-holder string.
|
|
<span class='linenumber'>1583</span> *
|
|
<span class='linenumber'>1584</span> * @returns {String} Platform specific place holder string
|
|
<span class='linenumber'>1585</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1586</span> </span><span class="NAME">makePlaceHolderString</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1587</span>
|
|
<span class='linenumber'>1588</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1589</span> * Makes empty paragraph which contains only one place-holder
|
|
<span class='linenumber'>1590</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1591</span> </span><span class="NAME">makeEmptyParagraph</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1592</span>
|
|
<span class='linenumber'>1593</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1594</span> * Applies background color to selected area
|
|
<span class='linenumber'>1595</span> *
|
|
<span class='linenumber'>1596</span> * @param {Object} color valid CSS color value
|
|
<span class='linenumber'>1597</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1598</span> </span><span class="NAME">applyBackgroundColor</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">color</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1599</span>
|
|
<span class='linenumber'>1600</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1601</span> * Applies foreground color to selected area
|
|
<span class='linenumber'>1602</span> *
|
|
<span class='linenumber'>1603</span> * @param {Object} color valid CSS color value
|
|
<span class='linenumber'>1604</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1605</span> </span><span class="NAME">applyForegroundColor</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">color</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1606</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"forecolor"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">color</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1607</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1608</span>
|
|
<span class='linenumber'>1609</span> </span><span class="NAME">execCommand</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">commandId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">param</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1610</span>
|
|
<span class='linenumber'>1611</span> </span><span class="NAME">applyRemoveFormat</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1612</span> </span><span class="NAME">applyEmphasis</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1613</span> </span><span class="NAME">applyStrongEmphasis</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1614</span> </span><span class="NAME">applyStrike</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1615</span> </span><span class="NAME">applyUnderline</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1616</span> </span><span class="NAME">applySuperscription</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1617</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"superscript"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1618</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1619</span> </span><span class="NAME">applySubscription</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1620</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"subscript"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1621</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1622</span> </span><span class="NAME">indentBlock</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">treatListAsNormalBlock</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1623</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">element.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT">
|
|
<span class='linenumber'>1624</span> </span><span class="NAME">this.indentListItem</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">treatListAsNormalBlock</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
|
|
<span class='linenumber'>1625</span> </span><span class="NAME">this.indentElement</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1626</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1627</span> </span><span class="NAME">outdentBlock</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">treatListAsNormalBlock</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1628</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1629</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">element.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1630</span> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.outdentListItem</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">treatListAsNormalBlock</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1631</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1632</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1633</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">performed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.outdentElement</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1634</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">performed</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">performed</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1635</span>
|
|
<span class='linenumber'>1636</span> </span><span class="COMM">// first-child can outdent container</span><span class="WHIT">
|
|
<span class='linenumber'>1637</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element.previousSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1638</span> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1639</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1640</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1641</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1642</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1643</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1644</span>
|
|
<span class='linenumber'>1645</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1646</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1647</span> </span><span class="NAME">wrapBlock</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1648</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.tree._blockTags.include</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Unsuppored block container: ["</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tag</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"]"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1649</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">start</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCurrentBlockElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1650</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1651</span>
|
|
<span class='linenumber'>1652</span> </span><span class="COMM">// Check if the selection captures valid fragement</span><span class="WHIT">
|
|
<span class='linenumber'>1653</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">validFragment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1654</span>
|
|
<span class='linenumber'>1655</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1656</span> </span><span class="COMM">// are they same block?</span><span class="WHIT">
|
|
<span class='linenumber'>1657</span> </span><span class="NAME">validFragment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1658</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">start.parentNode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">end.parentNode</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">start.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">end.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1659</span> </span><span class="COMM">// are they covering whole parent?</span><span class="WHIT">
|
|
<span class='linenumber'>1660</span> </span><span class="NAME">validFragment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1661</span> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">start.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1662</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1663</span> </span><span class="COMM">// are they siblings of non-LI blocks?</span><span class="WHIT">
|
|
<span class='linenumber'>1664</span> </span><span class="NAME">validFragment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
|
|
<span class='linenumber'>1665</span> </span><span class="PUNC">(</span><span class="NAME">start.parentNode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">end.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1666</span> </span><span class="PUNC">(</span><span class="NAME">start.nodeName</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1667</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1668</span>
|
|
<span class='linenumber'>1669</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">validFragment</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1670</span>
|
|
<span class='linenumber'>1671</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="NAME">tag</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1672</span>
|
|
<span class='linenumber'>1673</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1674</span> </span><span class="COMM">// They are same.</span><span class="WHIT">
|
|
<span class='linenumber'>1675</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlockContainer</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1676</span> </span><span class="COMM">// It's a block container. Wrap its contents.</span><span class="WHIT">
|
|
<span class='linenumber'>1677</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlockOnlyContainer</span><span class="PUNC">(</span><span class="NAME">wrapper</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1678</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1679</span> </span><span class="NAME">this.wrapAllInlineOrTextNodesAs</span><span class="PUNC">(</span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1680</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1681</span> </span><span class="NAME">this.moveChildNodes</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1682</span> </span><span class="NAME">start.appendChild</span><span class="PUNC">(</span><span class="NAME">wrapper</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1683</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1684</span> </span><span class="COMM">// It's not a block container. Wrap itself.</span><span class="WHIT">
|
|
<span class='linenumber'>1685</span> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">wrapper</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"after"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1686</span> </span><span class="NAME">wrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1687</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1688</span>
|
|
<span class='linenumber'>1689</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">wrapper</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1690</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1691</span> </span><span class="COMM">// They are siblings. Wrap'em all.</span><span class="WHIT">
|
|
<span class='linenumber'>1692</span> </span><span class="NAME">wrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">wrapper</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"before"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1693</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1694</span>
|
|
<span class='linenumber'>1695</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1696</span> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1697</span> </span><span class="NAME">wrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1698</span> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1699</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1700</span> </span><span class="NAME">wrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1701</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1702</span>
|
|
<span class='linenumber'>1703</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">wrapper</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1704</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1705</span>
|
|
<span class='linenumber'>1706</span>
|
|
<span class='linenumber'>1707</span>
|
|
<span class='linenumber'>1708</span> </span><span class="COMM">/////////////////////////////////////////////</span><span class="WHIT">
|
|
<span class='linenumber'>1709</span> </span><span class="COMM">// Focus/Caret/Selection</span><span class="WHIT">
|
|
<span class='linenumber'>1710</span>
|
|
<span class='linenumber'>1711</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1712</span> * Gives focus to root element's window
|
|
<span class='linenumber'>1713</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1714</span> </span><span class="NAME">focus</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1715</span>
|
|
<span class='linenumber'>1716</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1717</span> * Returns selection object
|
|
<span class='linenumber'>1718</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1719</span> </span><span class="NAME">sel</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1720</span>
|
|
<span class='linenumber'>1721</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1722</span> * Returns range object
|
|
<span class='linenumber'>1723</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1724</span> </span><span class="NAME">rng</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1725</span>
|
|
<span class='linenumber'>1726</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1727</span> * Returns true if DOM has selection
|
|
<span class='linenumber'>1728</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1729</span> </span><span class="NAME">hasSelection</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1730</span>
|
|
<span class='linenumber'>1731</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1732</span> * Returns true if root element's window has selection
|
|
<span class='linenumber'>1733</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1734</span> </span><span class="NAME">hasFocus</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1735</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cur</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCurrentElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1736</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">cur</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">cur.ownerDocument</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">this.getDoc</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1737</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1738</span>
|
|
<span class='linenumber'>1739</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1740</span> * Adjust scrollbar to make the element visible in current viewport.
|
|
<span class='linenumber'>1741</span> *
|
|
<span class='linenumber'>1742</span> * @param {Element} element Target element
|
|
<span class='linenumber'>1743</span> * @param {boolean} toTop Align element to top of the viewport
|
|
<span class='linenumber'>1744</span> * @param {boolean} moveCaret Move caret to the element
|
|
<span class='linenumber'>1745</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1746</span> </span><span class="NAME">scrollIntoView</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">toTop</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">moveCaret</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1747</span> </span><span class="NAME">element.scrollIntoView</span><span class="PUNC">(</span><span class="NAME">toTop</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1748</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">moveCaret</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.placeCaretAtStartOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1749</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1750</span>
|
|
<span class='linenumber'>1751</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1752</span> * Select all document
|
|
<span class='linenumber'>1753</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1754</span> </span><span class="NAME">selectAll</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1755</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">'selectall'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1756</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1757</span>
|
|
<span class='linenumber'>1758</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1759</span> * Select specified element.
|
|
<span class='linenumber'>1760</span> *
|
|
<span class='linenumber'>1761</span> * @param {Element} element element to select
|
|
<span class='linenumber'>1762</span> * @param {boolean} entireElement true to select entire element, false to select inner content of element
|
|
<span class='linenumber'>1763</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1764</span> </span><span class="NAME">selectElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">entireElement</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1765</span>
|
|
<span class='linenumber'>1766</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1767</span> * Select all elements between two blocks(inclusive).
|
|
<span class='linenumber'>1768</span> *
|
|
<span class='linenumber'>1769</span> * @param {Element} start start of selection
|
|
<span class='linenumber'>1770</span> * @param {Element} end end of selection
|
|
<span class='linenumber'>1771</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1772</span> </span><span class="NAME">selectBlocksBetween</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1773</span>
|
|
<span class='linenumber'>1774</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1775</span> * Delete selected area
|
|
<span class='linenumber'>1776</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1777</span> </span><span class="NAME">deleteSelection</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1778</span>
|
|
<span class='linenumber'>1779</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1780</span> * Collapses current selection.
|
|
<span class='linenumber'>1781</span> *
|
|
<span class='linenumber'>1782</span> * @param {boolean} toStart true to move caret to start of selected area.
|
|
<span class='linenumber'>1783</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1784</span> </span><span class="NAME">collapseSelection</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">toStart</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1785</span>
|
|
<span class='linenumber'>1786</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1787</span> * Returns selected area as HTML string
|
|
<span class='linenumber'>1788</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1789</span> </span><span class="NAME">getSelectionAsHtml</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1790</span>
|
|
<span class='linenumber'>1791</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1792</span> * Returns selected area as text string
|
|
<span class='linenumber'>1793</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1794</span> </span><span class="NAME">getSelectionAsText</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1795</span>
|
|
<span class='linenumber'>1796</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1797</span> * Places caret at start of the element
|
|
<span class='linenumber'>1798</span> *
|
|
<span class='linenumber'>1799</span> * @param {Element} element Target element
|
|
<span class='linenumber'>1800</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1801</span> </span><span class="NAME">placeCaretAtStartOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1802</span>
|
|
<span class='linenumber'>1803</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1804</span> * Checks if the node is empty-text-node or not
|
|
<span class='linenumber'>1805</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1806</span> </span><span class="NAME">isEmptyTextNode</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1807</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.nodeValue.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1808</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1809</span>
|
|
<span class='linenumber'>1810</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1811</span> * Checks if the caret is place in empty block element
|
|
<span class='linenumber'>1812</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1813</span> </span><span class="NAME">isCaretAtEmptyBlock</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1814</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">this.getCurrentBlockElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1815</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1816</span>
|
|
<span class='linenumber'>1817</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1818</span> * Checks if the caret is place at start of the block
|
|
<span class='linenumber'>1819</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1820</span> </span><span class="NAME">isCaretAtBlockStart</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1821</span>
|
|
<span class='linenumber'>1822</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1823</span> * Checks if the caret is place at end of the block
|
|
<span class='linenumber'>1824</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1825</span> </span><span class="NAME">isCaretAtBlockEnd</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1826</span>
|
|
<span class='linenumber'>1827</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1828</span> * Saves current selection info
|
|
<span class='linenumber'>1829</span> *
|
|
<span class='linenumber'>1830</span> * @returns {Object} Bookmark for selection
|
|
<span class='linenumber'>1831</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1832</span> </span><span class="NAME">saveSelection</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1833</span>
|
|
<span class='linenumber'>1834</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1835</span> * Restores current selection info
|
|
<span class='linenumber'>1836</span> *
|
|
<span class='linenumber'>1837</span> * @param {Object} bookmark Bookmark
|
|
<span class='linenumber'>1838</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1839</span> </span><span class="NAME">restoreSelection</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bookmark</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1840</span>
|
|
<span class='linenumber'>1841</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1842</span> * Create marker
|
|
<span class='linenumber'>1843</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1844</span> </span><span class="NAME">createMarker</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1845</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">marker</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createElement</span><span class="PUNC">(</span><span class="STRN">"SPAN"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1846</span> </span><span class="NAME">marker.id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"xquared_marker_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this._lastMarkerId</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1847</span> </span><span class="NAME">marker.className</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"xquared_marker"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1848</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">marker</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1849</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1850</span>
|
|
<span class='linenumber'>1851</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1852</span> * Create and insert marker into current caret position.
|
|
<span class='linenumber'>1853</span> * Marker is an inline element which has no child nodes. It can be used with many purposes.
|
|
<span class='linenumber'>1854</span> * For example, You can push marker to mark current caret position.
|
|
<span class='linenumber'>1855</span> *
|
|
<span class='linenumber'>1856</span> * @returns {Element} marker
|
|
<span class='linenumber'>1857</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1858</span> </span><span class="NAME">pushMarker</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1859</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">marker</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1860</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.insertNode</span><span class="PUNC">(</span><span class="NAME">marker</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1861</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1862</span>
|
|
<span class='linenumber'>1863</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1864</span> * Removes last marker
|
|
<span class='linenumber'>1865</span> *
|
|
<span class='linenumber'>1866</span> * @params {boolean} moveCaret move caret into marker before delete.
|
|
<span class='linenumber'>1867</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1868</span> </span><span class="NAME">popMarker</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">moveCaret</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1869</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"xquared_marker_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">--</span><span class="NAME">this._lastMarkerId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1870</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">marker</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.$</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1871</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">marker</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1872</span>
|
|
<span class='linenumber'>1873</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">moveCaret</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1874</span> </span><span class="NAME">this.selectElement</span><span class="PUNC">(</span><span class="NAME">marker</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1875</span> </span><span class="NAME">this.collapseSelection</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1876</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1877</span>
|
|
<span class='linenumber'>1878</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">marker</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1879</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1880</span>
|
|
<span class='linenumber'>1881</span>
|
|
<span class='linenumber'>1882</span>
|
|
<span class='linenumber'>1883</span> </span><span class="COMM">/////////////////////////////////////////////</span><span class="WHIT">
|
|
<span class='linenumber'>1884</span> </span><span class="COMM">// Query methods</span><span class="WHIT">
|
|
<span class='linenumber'>1885</span>
|
|
<span class='linenumber'>1886</span> </span><span class="NAME">isMarker</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1887</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">node.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"SPAN"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.className</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"xquared_marker"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1888</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1889</span>
|
|
<span class='linenumber'>1890</span> </span><span class="NAME">isFirstBlockOfBody</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1891</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">root</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1892</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.findBackward</span><span class="PUNC">(</span><span class="WHIT">
|
|
<span class='linenumber'>1893</span> </span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1894</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">node.previousSibling</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="WHIT">
|
|
<span class='linenumber'>1895</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1896</span>
|
|
<span class='linenumber'>1897</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">root</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1898</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1899</span>
|
|
<span class='linenumber'>1900</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1901</span> * Returns outer HTML of given element
|
|
<span class='linenumber'>1902</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1903</span> </span><span class="NAME">getOuterHTML</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1904</span>
|
|
<span class='linenumber'>1905</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1906</span> * Returns inner text of given element
|
|
<span class='linenumber'>1907</span> *
|
|
<span class='linenumber'>1908</span> * @param {Element} element Target element
|
|
<span class='linenumber'>1909</span> * @returns {String} Text string
|
|
<span class='linenumber'>1910</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1911</span> </span><span class="NAME">getInnerText</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1912</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element.innerHTML.stripTags</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1913</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1914</span>
|
|
<span class='linenumber'>1915</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1916</span> * Checks if given node is place holder or not.
|
|
<span class='linenumber'>1917</span> *
|
|
<span class='linenumber'>1918</span> * @param {Node} node DOM node
|
|
<span class='linenumber'>1919</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1920</span> </span><span class="NAME">isPlaceHolder</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1921</span>
|
|
<span class='linenumber'>1922</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1923</span> * Checks if given block is the first LI whose next sibling is a nested list.
|
|
<span class='linenumber'>1924</span> *
|
|
<span class='linenumber'>1925</span> * @param {Element} block Target block
|
|
<span class='linenumber'>1926</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1927</span> </span><span class="NAME">isFirstLiWithNestedList</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1928</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">block.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1929</span> </span><span class="NAME">block.parentNode.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
|
|
<span class='linenumber'>1930</span> </span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">block.nextSibling</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1931</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1932</span>
|
|
<span class='linenumber'>1933</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1934</span> * Search all links within given element
|
|
<span class='linenumber'>1935</span> *
|
|
<span class='linenumber'>1936</span> * @param {Element} [element] Container element. If not given, the root element will be used.
|
|
<span class='linenumber'>1937</span> * @param {Array} [found] if passed, links will be appended into this array.
|
|
<span class='linenumber'>1938</span> * @returns {Array} Array of anchors. It returns empty array if there's no links.
|
|
<span class='linenumber'>1939</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1940</span> </span><span class="NAME">searchAnchors</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">found</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1941</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1942</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">found</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1943</span>
|
|
<span class='linenumber'>1944</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">anchors</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">"A"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1945</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">anchors.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1946</span> </span><span class="NAME">found.push</span><span class="PUNC">(</span><span class="NAME">anchors</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1947</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1948</span>
|
|
<span class='linenumber'>1949</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">found</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1950</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1951</span>
|
|
<span class='linenumber'>1952</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1953</span> * Search all headings within given element
|
|
<span class='linenumber'>1954</span> *
|
|
<span class='linenumber'>1955</span> * @param {Element} [element] Container element. If not given, the root element will be used.
|
|
<span class='linenumber'>1956</span> * @param {Array} [found] if passed, headings will be appended into this array.
|
|
<span class='linenumber'>1957</span> * @returns {Array} Array of headings. It returns empty array if there's no headings.
|
|
<span class='linenumber'>1958</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1959</span> </span><span class="NAME">searchHeadings</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">found</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1960</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1961</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">found</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">found</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1962</span>
|
|
<span class='linenumber'>1963</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">regexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="REGX">/^h[1-6]/ig</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1964</span>
|
|
<span class='linenumber'>1965</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element.childNodes</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1966</span> </span><span class="NAME">$A</span><span class="PUNC">(</span><span class="NAME">element.childNodes</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">each</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">child</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1967</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">child</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree._blockContainerTags.include</span><span class="PUNC">(</span><span class="NAME">child.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1968</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isHeading</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">child</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">child.nodeName.match</span><span class="PUNC">(</span><span class="NAME">regexp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1969</span>
|
|
<span class='linenumber'>1970</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1971</span> </span><span class="NAME">this.searchHeadings</span><span class="PUNC">(</span><span class="NAME">child</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">found</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1972</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">isHeading</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1973</span> </span><span class="NAME">found.push</span><span class="PUNC">(</span><span class="NAME">child</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1974</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>1975</span> </span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1976</span>
|
|
<span class='linenumber'>1977</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">found</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1978</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>1979</span>
|
|
<span class='linenumber'>1980</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>1981</span> * Collect structure and style informations of given element.
|
|
<span class='linenumber'>1982</span> *
|
|
<span class='linenumber'>1983</span> * @param {Element} element target element
|
|
<span class='linenumber'>1984</span> * @returns {Object} object that contains information: {em: true, strong: false, block: "p", list: "ol", ...}
|
|
<span class='linenumber'>1985</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>1986</span> </span><span class="NAME">collectStructureAndStyle</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>1987</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">element.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"#document"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1988</span>
|
|
<span class='linenumber'>1989</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getParentBlockElementOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1990</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.tree.collectParentsOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1991</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">blockName</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.nodeName</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1992</span>
|
|
<span class='linenumber'>1993</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">info</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1994</span>
|
|
<span class='linenumber'>1995</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">doc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getDoc</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1996</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">em</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">doc.queryCommandState</span><span class="PUNC">(</span><span class="STRN">"Italic"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1997</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">strong</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">doc.queryCommandState</span><span class="PUNC">(</span><span class="STRN">"Bold"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1998</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">strike</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">doc.queryCommandState</span><span class="PUNC">(</span><span class="STRN">"Strikethrough"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>1999</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">underline</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">doc.queryCommandState</span><span class="PUNC">(</span><span class="STRN">"Underline"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.getParentElementOf</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"A"</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2000</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">superscription</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">doc.queryCommandState</span><span class="PUNC">(</span><span class="STRN">"superscript"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2001</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subscription</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">doc.queryCommandState</span><span class="PUNC">(</span><span class="STRN">"subscript"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2002</span>
|
|
<span class='linenumber'>2003</span> </span><span class="COMM">// if block is only child, select its parent</span><span class="WHIT">
|
|
<span class='linenumber'>2004</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">block.parentNode</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">this.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">block.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">block.nextSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.tree.isListContainer</span><span class="PUNC">(</span><span class="NAME">block.parentNode</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2005</span> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2006</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>2007</span>
|
|
<span class='linenumber'>2008</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2009</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">block.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2010</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2011</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parent.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"OL"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">parent.className</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"code"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2012</span> </span><span class="NAME">list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">isCode</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"CODE"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">parent.nodeName</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2013</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>2014</span>
|
|
<span class='linenumber'>2015</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">justification</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.style.textAlign</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">"left"</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2016</span>
|
|
<span class='linenumber'>2017</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2018</span> </span><span class="NAME">block</span><span class="PUNC">:</span><span class="NAME">blockName</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2019</span> </span><span class="NAME">em</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">em</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2020</span> </span><span class="NAME">strong</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">strong</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2021</span> </span><span class="NAME">strike</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">strike</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2022</span> </span><span class="NAME">underline</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">underline</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2023</span> </span><span class="NAME">superscription</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">superscription</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2024</span> </span><span class="NAME">subscription</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">subscription</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2025</span> </span><span class="NAME">list</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2026</span> </span><span class="NAME">justification</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">justification</span><span class="WHIT">
|
|
<span class='linenumber'>2027</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2028</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2029</span>
|
|
<span class='linenumber'>2030</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2031</span> * Find elements by CSS selector.
|
|
<span class='linenumber'>2032</span> *
|
|
<span class='linenumber'>2033</span> * WARNING: Use this method carefully since prototype.js doesn't work well with designMode DOM.
|
|
<span class='linenumber'>2034</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2035</span> </span><span class="NAME">findBySelector</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">selector</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2036</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Element.getElementsBySelector</span><span class="PUNC">(</span><span class="NAME">this.root</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">selector</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2037</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2038</span>
|
|
<span class='linenumber'>2039</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2040</span> * Find elements by attribute.
|
|
<span class='linenumber'>2041</span> *
|
|
<span class='linenumber'>2042</span> * This method will be deprecated when findBySelector get stabilized.
|
|
<span class='linenumber'>2043</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2044</span> </span><span class="NAME">findByAttribute</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2045</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2046</span> </span><span class="NAME">this._findByAttribute</span><span class="PUNC">(</span><span class="NAME">nodes</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.root</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2047</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">nodes</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2048</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2049</span>
|
|
<span class='linenumber'>2050</span> </span><span class="COMM">/** @private */</span><span class="WHIT">
|
|
<span class='linenumber'>2051</span> </span><span class="NAME">_findByAttribute</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">nodes</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2052</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element.getAttribute</span><span class="PUNC">(</span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">nodes.push</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2053</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element.hasChildNodes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2054</span>
|
|
<span class='linenumber'>2055</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">children</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.childNodes</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2056</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">children.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2057</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this._findByAttribute</span><span class="PUNC">(</span><span class="NAME">nodes</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">children</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">value</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2058</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>2059</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2060</span>
|
|
<span class='linenumber'>2061</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2062</span> * Checks if the element has one or more important attributes: id, class, style
|
|
<span class='linenumber'>2063</span> *
|
|
<span class='linenumber'>2064</span> * @param {Element} element Target element
|
|
<span class='linenumber'>2065</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2066</span> </span><span class="NAME">hasImportantAttributes</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2067</span>
|
|
<span class='linenumber'>2068</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2069</span> * Checks if the element is empty or not. Place-holder is not counted as a child.
|
|
<span class='linenumber'>2070</span> *
|
|
<span class='linenumber'>2071</span> * @param {Element} element Target element
|
|
<span class='linenumber'>2072</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2073</span> </span><span class="NAME">isEmptyBlock</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2074</span>
|
|
<span class='linenumber'>2075</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2076</span> * Returns element that contains caret.
|
|
<span class='linenumber'>2077</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2078</span> </span><span class="NAME">getCurrentElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2079</span>
|
|
<span class='linenumber'>2080</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2081</span> * Returns block element that contains caret.
|
|
<span class='linenumber'>2082</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2083</span> </span><span class="NAME">getCurrentBlockElement</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2084</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cur</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCurrentElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2085</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cur</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2086</span>
|
|
<span class='linenumber'>2087</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getParentBlockElementOf</span><span class="PUNC">(</span><span class="NAME">cur</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2088</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">block</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2089</span>
|
|
<span class='linenumber'>2090</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">block.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"BODY"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">block</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2091</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2092</span>
|
|
<span class='linenumber'>2093</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2094</span> * Returns parent block element of parameter.
|
|
<span class='linenumber'>2095</span> * If the parameter itself is a block, it will be returned.
|
|
<span class='linenumber'>2096</span> *
|
|
<span class='linenumber'>2097</span> * @param {Element} element Target element
|
|
<span class='linenumber'>2098</span> *
|
|
<span class='linenumber'>2099</span> * @returns {Element} Element or null
|
|
<span class='linenumber'>2100</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2101</span> </span><span class="NAME">getParentBlockElementOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2102</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2103</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree._blockTags.include</span><span class="PUNC">(</span><span class="NAME">element.nodeName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2104</span> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2105</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>2106</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2107</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2108</span>
|
|
<span class='linenumber'>2109</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2110</span> * Returns parent element of parameter which has one of given tag name.
|
|
<span class='linenumber'>2111</span> * If the parameter itself has the same tag name, it will be returned.
|
|
<span class='linenumber'>2112</span> *
|
|
<span class='linenumber'>2113</span> * @param {Element} element Target element
|
|
<span class='linenumber'>2114</span> * @param {Array} tagNames Array of string which contains tag names
|
|
<span class='linenumber'>2115</span> *
|
|
<span class='linenumber'>2116</span> * @returns {Element} Element or null
|
|
<span class='linenumber'>2117</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2118</span> </span><span class="NAME">getParentElementOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tagNames</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2119</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2120</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">tagNames.include</span><span class="PUNC">(</span><span class="NAME">element.nodeName</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2121</span> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.parentNode</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2122</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>2123</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2124</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2125</span>
|
|
<span class='linenumber'>2126</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2127</span> * Collects all block elements between two elements
|
|
<span class='linenumber'>2128</span> *
|
|
<span class='linenumber'>2129</span> * @param {Element} from Start element(inclusive)
|
|
<span class='linenumber'>2130</span> * @param {Element} to End element(inclusive)
|
|
<span class='linenumber'>2131</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2132</span> </span><span class="NAME">getBlockElementsBetween</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2133</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.tree.collectNodesBetween</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">to</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2134</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isBlock</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2135</span> </span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2136</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2137</span>
|
|
<span class='linenumber'>2138</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2139</span> * Returns block element that contains selection start.
|
|
<span class='linenumber'>2140</span> *
|
|
<span class='linenumber'>2141</span> * This method will return exactly same result with getCurrentBlockElement method
|
|
<span class='linenumber'>2142</span> * when there's no selection.
|
|
<span class='linenumber'>2143</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2144</span> </span><span class="NAME">getBlockElementAtSelectionStart</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2145</span>
|
|
<span class='linenumber'>2146</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2147</span> * Returns block element that contains selection end.
|
|
<span class='linenumber'>2148</span> *
|
|
<span class='linenumber'>2149</span> * This method will return exactly same result with getCurrentBlockElement method
|
|
<span class='linenumber'>2150</span> * when there's no selection.
|
|
<span class='linenumber'>2151</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2152</span> </span><span class="NAME">getBlockElementAtSelectionEnd</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2153</span>
|
|
<span class='linenumber'>2154</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2155</span> * Returns blocks at each edge of selection(start and end).
|
|
<span class='linenumber'>2156</span> *
|
|
<span class='linenumber'>2157</span> * TODO: implement ignoreEmptyEdges for FF
|
|
<span class='linenumber'>2158</span> *
|
|
<span class='linenumber'>2159</span> * @param {boolean} naturalOrder Mak the start element always comes before the end element
|
|
<span class='linenumber'>2160</span> * @param {boolean} ignoreEmptyEdges Prevent some browser(Gecko) from selecting one more block than expected
|
|
<span class='linenumber'>2161</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2162</span> </span><span class="NAME">getBlockElementsAtSelectionEdge</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">naturalOrder</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ignoreEmptyEdges</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2163</span>
|
|
<span class='linenumber'>2164</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2165</span> * Returns array of selected block elements
|
|
<span class='linenumber'>2166</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2167</span> </span><span class="NAME">getSelectedBlockElements</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2168</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">selectionEdges</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getBlockElementsAtSelectionEdge</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2169</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">selectionEdges</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2170</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">selectionEdges</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2171</span>
|
|
<span class='linenumber'>2172</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.tree.collectNodesBetween</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2173</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.isBlock</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2174</span> </span><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2175</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2176</span>
|
|
<span class='linenumber'>2177</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2178</span> * Get element by ID
|
|
<span class='linenumber'>2179</span> *
|
|
<span class='linenumber'>2180</span> * @param {String} id Element's ID
|
|
<span class='linenumber'>2181</span> * @returns {Element} element or null
|
|
<span class='linenumber'>2182</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2183</span> </span><span class="NAME">getElementById</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.doc.getElementById</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2184</span>
|
|
<span class='linenumber'>2185</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2186</span> * Shortcut for #getElementById
|
|
<span class='linenumber'>2187</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2188</span> </span><span class="NAME">$</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.getElementById</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2189</span>
|
|
<span class='linenumber'>2190</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2191</span> * Returns first "valid" child of given element. It ignores empty textnodes.
|
|
<span class='linenumber'>2192</span> *
|
|
<span class='linenumber'>2193</span> * @param {Element} element Target element
|
|
<span class='linenumber'>2194</span> * @returns {Node} first child node or null
|
|
<span class='linenumber'>2195</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2196</span> </span><span class="NAME">getFirstChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2197</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2198</span>
|
|
<span class='linenumber'>2199</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$A</span><span class="PUNC">(</span><span class="NAME">element.childNodes</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2200</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">nodes.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2201</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.isEmptyTextNode</span><span class="PUNC">(</span><span class="NAME">nodes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">nodes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2202</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>2203</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2204</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2205</span>
|
|
<span class='linenumber'>2206</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2207</span> * Returns last "valid" child of given element. It ignores empty textnodes and place-holders.
|
|
<span class='linenumber'>2208</span> *
|
|
<span class='linenumber'>2209</span> * @param {Element} element Target element
|
|
<span class='linenumber'>2210</span> * @returns {Node} last child node or null
|
|
<span class='linenumber'>2211</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2212</span> </span><span class="NAME">getLastChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2213</span>
|
|
<span class='linenumber'>2214</span> </span><span class="NAME">getNextSibling</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2215</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2216</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">node.nodeType</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">node.nodeValue.strip</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2217</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>2218</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2219</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2220</span>
|
|
<span class='linenumber'>2221</span> </span><span class="NAME">getBottommostFirstChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2222</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">node.firstChild</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.firstChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2223</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2224</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2225</span>
|
|
<span class='linenumber'>2226</span> </span><span class="NAME">getBottommostLastChild</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2227</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">node.lastChild</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.nodeType</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.lastChild</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2228</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2229</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2230</span>
|
|
<span class='linenumber'>2231</span> </span><span class="COMM">/** @private */</span><span class="WHIT">
|
|
<span class='linenumber'>2232</span> </span><span class="NAME">_getCssValue</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">defaultUnit</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2233</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">str.length</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">value</span><span class="PUNC">:</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">unit</span><span class="PUNC">:</span><span class="NAME">defaultUnit</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2234</span>
|
|
<span class='linenumber'>2235</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">tokens</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">str.match</span><span class="PUNC">(</span><span class="REGX">/(\d+)(.*)/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2236</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2237</span> </span><span class="NAME">value</span><span class="PUNC">:</span><span class="NAME">parseInt</span><span class="PUNC">(</span><span class="NAME">tokens</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
|
|
<span class='linenumber'>2238</span> </span><span class="NAME">unit</span><span class="PUNC">:</span><span class="NAME">tokens</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">defaultUnit</span><span class="WHIT">
|
|
<span class='linenumber'>2239</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2240</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>2241</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2242</span>
|
|
<span class='linenumber'>2243</span> </span><span class="COMM">/**
|
|
<span class='linenumber'>2244</span> * Creates and returns instance of browser specific implementation.
|
|
<span class='linenumber'>2245</span> */</span><span class="WHIT">
|
|
<span class='linenumber'>2246</span> </span><span class="NAME">xq.RichDom.createInstance</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2247</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">xq.Browser.isTrident</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2248</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">xq.RichDomTrident</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2249</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">xq.Browser.isWebkit</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2250</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">xq.RichDomWebkit</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2251</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
|
|
<span class='linenumber'>2252</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">xq.RichDomGecko</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
|
|
<span class='linenumber'>2253</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>2254</span> </span><span class="PUNC">}</span><span class="WHIT">
|
|
<span class='linenumber'>2255</span> </span></pre></body></html> |