editor skin에 xquared 추가

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3039 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
haneul 2007-11-21 15:33:02 +00:00
parent 4a55cfe522
commit 0c99858e7c
98 changed files with 25694 additions and 0 deletions

View file

@ -0,0 +1,14 @@
Xquared is copyrighted free software by Alan Kang <jania902@gmail.com>.
You can redistribute and/or modify it under the terms of the LGPL.
(http://www.gnu.org/licenses/lgpl.html)
Following is a list of dependencies:
* prototype javascript framework
* Homepage: http://prototypejs.org
* License: http://dev.rubyonrails.org/browser/spinoffs/prototype/trunk/LICENSE?format=raw
* jsspec
* Homepage: http://jania.pe.kr/aw/moin.cgi/JSSpec
* License: http://www.gnu.org/licenses/lgpl.html
* yui-compressor
* Homepage: http://developer.yahoo.com/yui/compressor/
* License: http://developer.yahoo.com/yui/license.html

View file

@ -0,0 +1,9 @@
Xquared is a Javascript based, XHTML complaint, easily extensible
editor module aim to support major modern web browsers.
This software is licensed under the terms you may find in the file
named "LICENSE" in this directory.
For more information, see http://labs.openmaru.com/projects/xquared/
Thanks for using Xquared.

View file

@ -0,0 +1,18 @@
@charset "utf-8";
.xeEditor .fileAttach { position:relative; top:20px; padding:0 1em .5em 1em;}
.xeEditor .fileAttach .preview { padding:5px; width:110px; height:110px; border:1px solid #e1e1dd; background:#fbfbfb; float:left; margin-right:.5em;}
.xeEditor .fileAttach .preview img { width:110px; height:110px; float:left; display:block;}
.xeEditor .fileAttach .fileListArea { float:left; width:50%; margin-right:.7em; padding-bottom:.5em; margin-bottom:1em}
.xeEditor .fileAttach .fileListArea .fileList { overflow:auto; width:100%; height:auto; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; margin-bottom:.3em; font-size:11px;}
.xeEditor .fileAttach .fileListArea .fileList option { line-height:100%; padding-left:.5em;}
.xeEditor .fileAttach .fileListArea span.file_attach_info { color:#3f4040; font-size:11px; text-align:left;}
.xeEditor .fileAttach .fileListArea span.file_attach_info strong { color:#ff6600; font-size:11px; font-weight:bold; }
.xeEditor .fileAttach .fileUploadControl { margin-bottom:5px; }
.xeEditor .fileAttach .fileUploadControl .uploaderButton { display:block; cursor:pointer; background:url(../images/buttonTypeBCenter.gif) repeat-x left center; line-height:100%; overflow:visible; color:#3f4040; margin:0 1px; font-size:.9em; white-space:nowrap;}
.xeEditor .fileAttach .fileUploadControl .uploaderButton:hover { text-decoration:none;}
.xeEditor .fileAttach .fileUploadControl .uploaderButton img { vertical-align:middle;}
.xeEditor .fileAttach .fileUploadControl .uploaderButton .leftCap { width:2px; height:21px; background:url(../images/buttonTypeBLeft.gif) no-repeat; margin:0 .3em 0 0; position:relative; left:-1px;}
.xeEditor .fileAttach .fileUploadControl .uploaderButton .rightCap { width:2px; height:21px; background:url(../images/buttonTypeBRight.gif) no-repeat; margin:0 -1px 0 .4em;}
.xeEditor .fileAttach .fileUploadControl .uploaderButton .icon { margin:0 .2em;}

View file

@ -0,0 +1,45 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: Browser.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: Browser.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_01.html">Browser.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:20 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,143 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: </title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: Controls.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc">xq.controls provides common UI elements such as dialog.</div>
<div class="itemTags">
<ul>
<li>source: <a href="src_02.html">Controls.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="section function">
<div class="itemTitle">
<a name="this.form.onsubmit"></a>
this.form.onsubmit(<span class="signature"></span>)
</div>
</div>
<div class="section function">
<div class="itemTitle">
<a name="cancelButton.onclick"></a>
cancelButton.onclick(<span class="signature"></span>)
</div>
</div>
<div class="section function">
<div class="itemTitle">
<a name="this.param.renderItem"></a>
this.param.renderItem(<span class="signature">item</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
item
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="sectionHead">Objects</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:20 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,161 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: DomTree.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: DomTree.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_03.html">DomTree.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="section function">
<div class="itemTitle">
<a name="findLeft"></a>
findLeft(<span class="signature">el</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
el
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="findRight"></a>
findRight(<span class="signature">el</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
el
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.DomTree"></a>
xq.DomTree
</div>
<div class="desc">Provide various tree operations.
TODO: Add specs</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:21 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,45 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: </title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: EditHistory.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc">xq.EditHistory manages editing history and performs UNDO/REDO.</div>
<div class="itemTags">
<ul>
<li>source: <a href="src_04.html">EditHistory.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:21 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,796 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: </title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: Editor.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc">xq.Editor manages configurations such as autocompletion and autocorrection, edit mode/normal mode switching, handles editing commands, keyboard shortcuts and other events.</div>
<div class="itemTags">
<ul>
<li>source: <a href="src_05.html">Editor.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="section function">
<div class="itemTitle">
<a name="criteria"></a>
criteria(<span class="signature">text</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
text
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="criteria"></a>
criteria(<span class="signature">text</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
text
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="this.contentElement.form.onsubmit"></a>
this.contentElement.form.onsubmit(<span class="signature"></span>)
</div>
</div>
<div class="section function">
<div class="itemTitle">
<a name="cancelMousedown"></a>
cancelMousedown(<span class="signature">e</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
e
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="finder"></a>
finder(<span class="signature">node</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
node
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="exitCondition"></a>
exitCondition(<span class="signature">node</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
node
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="this.config"></a>
<span class="type">object</span>
this.config
</div>
<div class="desc">Editor's configuration</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.contentElement"></a>
<span class="type">Element</span>
this.contentElement
</div>
<div class="desc">Original content element</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.doc"></a>
<span class="type">Document</span>
this.doc
</div>
<div class="desc">Owner document of content element</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.body"></a>
<span class="type">Element</span>
this.body
</div>
<div class="desc">Body of content element</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.currentEditMode"></a>
<span class="type">Object</span>
this.currentEditMode
</div>
<div class="desc">False or 'readonly' means read-only mode, true or 'wysiwyg' means WYSIWYG editing mode, and 'source' means source editing mode.</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.rdom"></a>
<span class="type">xq.RichDom</span>
this.rdom
</div>
<div class="desc">RichDom instance</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.validator"></a>
<span class="type">xq.Validator</span>
this.validator
</div>
<div class="desc">Validator instance</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.outmostWrapper"></a>
<span class="type">Element</span>
this.outmostWrapper
</div>
<div class="desc">Outmost wrapper div</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.sourceEditorDiv"></a>
<span class="type">Element</span>
this.sourceEditorDiv
</div>
<div class="desc">Source editor container</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.sourceEditorTextarea"></a>
<span class="type">Element</span>
this.sourceEditorTextarea
</div>
<div class="desc">Source editor textarea</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.wysiwygEditorDiv"></a>
<span class="type">Element</span>
this.wysiwygEditorDiv
</div>
<div class="desc">WYSIWYG editor container</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.editorFrame"></a>
<span class="type">IFrame</span>
this.editorFrame
</div>
<div class="desc">Design mode iframe</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.editorWin"></a>
<span class="type">Window</span>
this.editorWin
</div>
<div class="desc">Window that contains design mode iframe</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.editorDoc"></a>
<span class="type">Document</span>
this.editorDoc
</div>
<div class="desc">Document that contained by design mode iframe</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.editorBody"></a>
<span class="type">Element</span>
this.editorBody
</div>
<div class="desc">Body that contained by design mode iframe</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.toolbarContainer"></a>
<span class="type">Element</span>
this.toolbarContainer
</div>
<div class="desc">Toolbar container</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.toolbarButtons"></a>
<span class="type">Array</span>
this.toolbarButtons
</div>
<div class="desc">Toolbar buttons</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.editHistory"></a>
<span class="type">xq.EditHistory</span>
this.editHistory
</div>
<div class="desc">Undo/redo manager</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:34 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,216 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: RichDom.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: RichDom.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_06.html">RichDom.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="section function">
<div class="itemTitle">
<a name="finder"></a>
finder(<span class="signature">node</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
node
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="exitCondition"></a>
exitCondition(<span class="signature">node</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
node
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.RichDom.createInstance"></a>
xq.RichDom.createInstance(<span class="signature"></span>)
</div>
<div class="desc">Creates and returns instance of browser specific implementation.</div>
</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.RichDom"></a>
xq.RichDom
</div>
<div class="desc">Encapsulates browser incompatibility problem and provides rich set of DOM manipulation API.
RichDom provides basic CRUD + Advanced DOM manipulation API, various query methods and caret/selection management API</div>
</div>
<div class="section object">
<div class="itemTitle">
<a name="this.tree"></a>
this.tree
</div>
<div class="desc">instance of DomTree</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:48 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,71 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: RichDomGecko.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: RichDomGecko.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_07.html">RichDomGecko.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.RichDomGecko"></a>
xq.RichDomGecko
</div>
<div class="desc">RichDom for Gecko</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:48 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,71 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: RichDomTrident.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: RichDomTrident.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_08.html">RichDomTrident.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.RichDomTrident"></a>
xq.RichDomTrident
</div>
<div class="desc">RichDom for Internet Explorer 6 and 7</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:48 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,71 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: RichDomW3.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: RichDomW3.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_09.html">RichDomW3.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.RichDomW3"></a>
xq.RichDomW3
</div>
<div class="desc">RichDom for W3C Standard Engine</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:49 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,71 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: RichDomWebkit.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: RichDomWebkit.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_10.html">RichDomWebkit.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.RichDomWebkit"></a>
xq.RichDomWebkit
</div>
<div class="desc">RichDom for Webkit</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:49 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,125 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: RichTable.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: RichTable.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_11.html">RichTable.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.RichTable.create"></a>
xq.RichTable.create(<span class="signature">rdom, cols, rows, headerPositions</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
rdom
</td>
<td>
</td>
</tr>
<tr>
<td class="type">
</td>
<td>
cols
</td>
<td>
</td>
</tr>
<tr>
<td class="type">
</td>
<td>
rows
</td>
<td>
</td>
</tr>
<tr>
<td class="type">
</td>
<td>
headerPositions
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="sectionHead">Objects</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:49 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,189 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: Shortcut.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: Shortcut.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_12.html">Shortcut.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.Shortcut.interprete"></a>
xq.Shortcut.interprete(<span class="signature">expression</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
expression
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.Shortcut._interpreteModifier"></a>
xq.Shortcut._interpreteModifier(<span class="signature">expression, modifierName</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
expression
</td>
<td>
</td>
</tr>
<tr>
<td class="type">
</td>
<td>
modifierName
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.Shortcut._interpreteWhich"></a>
xq.Shortcut._interpreteWhich(<span class="signature">keyName</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
keyName
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="sectionHead">Objects</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:49 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,153 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: Validator.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: Validator.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_13.html">Validator.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.Validator.createInstance"></a>
xq.Validator.createInstance(<span class="signature">curUrl, urlValidationMode, allowedTags, allowedAttrs</span>)
</div>
<div class="desc">Creates and returns instance of browser specific implementation.</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
curUrl
</td>
<td>
</td>
</tr>
<tr>
<td class="type">
</td>
<td>
urlValidationMode
</td>
<td>
</td>
</tr>
<tr>
<td class="type">
</td>
<td>
allowedTags
</td>
<td>
</td>
</tr>
<tr>
<td class="type">
</td>
<td>
allowedAttrs
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.Validator"></a>
xq.Validator
</div>
<div class="desc">Validates and invalidates designmode contents</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:49 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,71 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: ValidatorGecko.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: ValidatorGecko.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_14.html">ValidatorGecko.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.ValidatorGecko"></a>
xq.ValidatorGecko
</div>
<div class="desc">Validator for Gecko Engine</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:49 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,71 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: ValidatorTrident.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: ValidatorTrident.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_15.html">ValidatorTrident.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.ValidatorTrident"></a>
xq.ValidatorTrident
</div>
<div class="desc">Validator for Internet Explorer 6 and 7</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:50 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,71 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: ValidatorW3.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: ValidatorW3.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_16.html">ValidatorW3.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.ValidatorW3"></a>
xq.ValidatorW3
</div>
<div class="desc">Validator for W3C Standard Engine</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:50 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,71 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: ValidatorWebkit.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: ValidatorWebkit.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_17.html">ValidatorWebkit.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq.ValidatorWebkit"></a>
xq.ValidatorWebkit
</div>
<div class="desc">Validator for Webkit</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:50 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,512 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: XQuared.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: XQuared.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_18.html">XQuared.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.asEventSource"></a>
xq.asEventSource(<span class="signature">object, prefix, events</span>)
</div>
<div class="desc">Make given object as event source</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
Object
</td>
<td>
object
</td>
<td>
target object
</td>
</tr>
<tr>
<td class="type">
String
</td>
<td>
prefix
</td>
<td>
prefix for generated functions
</td>
</tr>
<tr>
<td class="type">
Array
</td>
<td>
events
</td>
<td>
array of string which contains name of events
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="Array.indexOf"></a>
<i><a href="#Array" class="type">Array.</a></i>indexOf(<span class="signature">n</span>)
</div>
<div class="desc">Returns the index of given element</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
n
</td>
<td>
</td>
</tr>
</table>
<div class="detailHead">returns</div>
<table class="params">
<tr>
<td class="type">
Number
</td>
<td>
index or -1
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="Date.pass"></a>
Date.pass(<span class="signature">msec</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
msec
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="Date.get"></a>
Date.get(<span class="signature"></span>)
</div>
</div>
<div class="section function">
<div class="itemTitle">
<a name="Date.elapsed"></a>
<i><a href="#Date" class="type">Date.</a></i>elapsed(<span class="signature">msec</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
msec
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="String.merge"></a>
<i><a href="#String" class="type">String.</a></i>merge(<span class="signature">data</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
data
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="String.parseURL"></a>
<i><a href="#String" class="type">String.</a></i>parseURL(<span class="signature"></span>)
</div>
</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.findXquaredScript"></a>
xq.findXquaredScript(<span class="signature"></span>)
</div>
</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.shouldLoadOthers"></a>
xq.shouldLoadOthers(<span class="signature"></span>)
</div>
</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.loadScript"></a>
xq.loadScript(<span class="signature">url</span>)
</div>
<div class="detailHead">parameters</div>
<table class="params">
<tr>
<td class="type">
</td>
<td>
url
</td>
<td>
</td>
</tr>
</table>
</div>
<div class="section function">
<div class="itemTitle">
<a name="xq.loadOthers"></a>
xq.loadOthers(<span class="signature"></span>)
</div>
</div>
<div class="sectionHead">Objects</div>
<div class="section object">
<div class="itemTitle">
<a name="xq"></a>
xq
</div>
<div class="desc">Namespace for entire Xquared classes</div>
</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:50 GMT.
</div>
</body>
</html>

View file

@ -0,0 +1,45 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="JsDoc Toolkit 1.0">
<title>JsDoc: _ui_templates.js</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
</head>
<body>
<div class="content">
<div class="docs">
<div class="sectionHead">Library: _ui_templates.js</div>
<div class="section overview">
<div class="itemTitle">
Overview
</div>
<div>
<div class="desc"></div>
<div class="itemTags">
<ul>
<li>source: <a href="src_19.html">_ui_templates.js</a></li>
</ul>
</div>
</div>
</div>
<div class="sectionHead">Constructors</div>
<div class="sectionHead">Functions</div>
<div class="sectionHead">Objects</div>
</div>
</div>
<div class="finePrint">
Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.1 on Wed, 21 Nov 2007 09:57:50 GMT.
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

View file

@ -0,0 +1,116 @@
body,a
{
color: #000;
font: 12px verdana;
}
ul
{
list-style-type: none;
margin-left: 10px;
padding-left: 10px;
}
.content { }
.docs { }
.signature { font-weight: normal; }
.code {
font: 11px monaco,monospace;
padding: 4px;
margin-left: 18px;
border: 1px dashed #ccc;
}
.itemTitle
{
font-size: 12px;
font-weight: bold;
height: 16px;
}
.item { }
.sectionHead
{
font-size: 18px;
font-weight: bold;
background-color: #C0C1DE;
color: #fff;
margin-top: 18px;
padding: 2px 4px 2px 4px;
}
.section
{
padding: 8px;
border: 1px #8A92BC solid;
margin: 4px;
}
.detailHead
{
border-bottom: 1px #8FB685 dotted;
font-size: 12px;
font-weight: bold;
color: #798E73;
margin-top: 18px;
}
.desc { padding: 8px; }
.fileHead
{
background-image: url(file.gif);
background-repeat: no-repeat;
padding-left: 20px;
font-weight: bold;
font-size: 14px;
line-height: 20px;
}
.overview .itemTitle
{
background-image: url(overview.gif);
background-repeat: no-repeat;
padding-left: 20px;
}
.constructor .itemTitle
{
background-image: url(constructor.gif);
background-repeat: no-repeat;
padding-left: 20px;
}
.function .itemTitle
{
background-image: url(function.gif);
background-repeat: no-repeat;
padding-left: 20px;
}
.object .itemTitle
{
background-image: url(object.gif);
background-repeat: no-repeat;
padding-left: 20px;
}
.type
{
font-style: italic;
color: #999;
font-weight: normal;
}
.itemTitle a.type { font-weight: bold; }
.finePrint
{
color: #878787;
font-family: verdana;
font-size: 10px;
text-align: right;
}
.params td { padding-right: 10px; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

View file

@ -0,0 +1,149 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>JsDoc</title>
<link rel=stylesheet href="default.css" type="text/css" media=screen>
<meta name="generator" content="JsDoc Toolkit 1.0">
</head>
<body>
<div class="sectionHead">File Index</div>
<ul>
<li style="margin-bottom: 16px;">
<a href="_01.html" target="main" class="fileHead">Browser.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_02.html" target="main" class="fileHead">Controls.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_03.html" target="main" class="fileHead">DomTree.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_04.html" target="main" class="fileHead">EditHistory.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_05.html" target="main" class="fileHead">Editor.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_06.html" target="main" class="fileHead">RichDom.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_07.html" target="main" class="fileHead">RichDomGecko.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_08.html" target="main" class="fileHead">RichDomTrident.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_09.html" target="main" class="fileHead">RichDomW3.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_10.html" target="main" class="fileHead">RichDomWebkit.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_11.html" target="main" class="fileHead">RichTable.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_12.html" target="main" class="fileHead">Shortcut.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_13.html" target="main" class="fileHead">Validator.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_14.html" target="main" class="fileHead">ValidatorGecko.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_15.html" target="main" class="fileHead">ValidatorTrident.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_16.html" target="main" class="fileHead">ValidatorW3.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_17.html" target="main" class="fileHead">ValidatorWebkit.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_18.html" target="main" class="fileHead">XQuared.js</a>
<ul>
</ul>
</li>
<li style="margin-bottom: 16px;">
<a href="_19.html" target="main" class="fileHead">_ui_templates.js</a>
<ul>
</ul>
</li>
</ul>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

View file

@ -0,0 +1,13 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>JsDoc</title>
<meta name="generator" content="JsDoc Toolkit 1.0">
</head>
<frameset cols="200,*">
<frame name="menu" src="file_list.html">
<frame name="main" src="splash.html">
</frameset>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 B

View file

@ -0,0 +1,7 @@
<html>
<head>
<title>JsDoc</title>
</head>
<body>
</body>
</html>

View file

@ -0,0 +1,24 @@
<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="NAME">xq.Browser</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 2</span> </span><span class="COMM">// By Layout Engines</span><span class="WHIT">
<span class='linenumber'> 3</span> </span><span class="NAME">isTrident</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">navigator.appName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"Microsoft Internet Explorer"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">isWebkit</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">navigator.userAgent.indexOf</span><span class="PUNC">(</span><span class="STRN">'AppleWebKit/'</span><span class="PUNC">)</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 class='linenumber'> 5</span> </span><span class="NAME">isGecko</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">navigator.userAgent.indexOf</span><span class="PUNC">(</span><span class="STRN">'Gecko'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">navigator.userAgent.indexOf</span><span class="PUNC">(</span><span class="STRN">'KHTML'</span><span class="PUNC">)</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 class='linenumber'> 6</span> </span><span class="NAME">isKHTML</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">navigator.userAgent.indexOf</span><span class="PUNC">(</span><span class="STRN">'KHTML'</span><span class="PUNC">)</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 class='linenumber'> 7</span> </span><span class="NAME">isPresto</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">navigator.appName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"Opera"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 8</span>
<span class='linenumber'> 9</span> </span><span class="COMM">// By Platforms</span><span class="WHIT">
<span class='linenumber'> 10</span> </span><span class="NAME">isMac</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">navigator.userAgent.indexOf</span><span class="PUNC">(</span><span class="STRN">"Macintosh"</span><span class="PUNC">)</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 class='linenumber'> 11</span> </span><span class="NAME">isUbuntu</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">navigator.userAgent.indexOf</span><span class="PUNC">(</span><span class="STRN">'Ubuntu'</span><span class="PUNC">)</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 class='linenumber'> 12</span>
<span class='linenumber'> 13</span> </span><span class="COMM">// By Browsers</span><span class="WHIT">
<span class='linenumber'> 14</span> </span><span class="NAME">isIE</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">navigator.appName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"Microsoft Internet Explorer"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 15</span> </span><span class="NAME">isIE6</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">navigator.userAgent.indexOf</span><span class="PUNC">(</span><span class="STRN">'MSIE 6'</span><span class="PUNC">)</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 class='linenumber'> 16</span> </span><span class="NAME">isIE7</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">navigator.userAgent.indexOf</span><span class="PUNC">(</span><span class="STRN">'MSIE 7'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT">
<span class='linenumber'> 17</span> </span><span class="PUNC">}</span><span class="PUNC">;</span></pre></body></html>

View file

@ -0,0 +1,344 @@
<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> * @fileOverview xq.controls provides common UI elements such as dialog.
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.controls</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'> 5</span>
<span class='linenumber'> 6</span>
<span class='linenumber'> 7</span>
<span class='linenumber'> 8</span> </span><span class="NAME">xq.controls.FormDialog</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'> 9</span> </span><span class="COMM">/**
<span class='linenumber'> 10</span> * @constructor
<span class='linenumber'> 11</span> *
<span class='linenumber'> 12</span> * @param {String} html HTML string which contains FORM
<span class='linenumber'> 13</span> * @param {Function} [onLoadHandler] callback function to be called when the form is loaded
<span class='linenumber'> 14</span> */</span><span class="WHIT">
<span class='linenumber'> 15</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="NAME">xed</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">html</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onLoadHandler</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">onCloseHandler</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 16</span> </span><span class="NAME">this.xed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xed</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 17</span> </span><span class="NAME">this.html</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'> 18</span> </span><span class="NAME">this.onLoadHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">onLoadHandler</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="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 19</span> </span><span class="NAME">this.onCloseHandler</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">onCloseHandler</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="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 20</span> </span><span class="NAME">this.form</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'> 21</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 22</span> </span><span class="COMM">/**
<span class='linenumber'> 23</span> * Show dialog
<span class='linenumber'> 24</span> *
<span class='linenumber'> 25</span> * @param {Object} [options] collection of options
<span class='linenumber'> 26</span> */</span><span class="WHIT">
<span class='linenumber'> 27</span> </span><span class="NAME">show</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">options</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 28</span> </span><span class="NAME">options</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options</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'> 29</span> </span><span class="NAME">options.position</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.position</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">'centerOfWindow'</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 30</span> </span><span class="NAME">options.mode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.mode</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">'modal'</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 31</span> </span><span class="NAME">options.cancelOnEsc</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">options.cancelOnEsc</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'> 32</span>
<span class='linenumber'> 33</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">self</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 34</span>
<span class='linenumber'> 35</span> </span><span class="COMM">// create and append container</span><span class="WHIT">
<span class='linenumber'> 36</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">$</span><span class="PUNC">(</span><span class="NAME">document.createElement</span><span class="PUNC">(</span><span class="STRN">'DIV'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 37</span> </span><span class="NAME">container.style.display</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'none'</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 38</span> </span><span class="NAME">document.body.appendChild</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 39</span>
<span class='linenumber'> 40</span> </span><span class="COMM">// initialize form</span><span class="WHIT">
<span class='linenumber'> 41</span> </span><span class="NAME">container.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.html</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 42</span> </span><span class="NAME">this.form</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">$</span><span class="PUNC">(</span><span class="NAME">container.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">'FORM'</span><span class="PUNC">)</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 class='linenumber'> 43</span>
<span class='linenumber'> 44</span> </span><span class="NAME">this.form.onsubmit</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'> 45</span> </span><span class="NAME">self.onCloseHandler</span><span class="PUNC">(</span><span class="NAME">$</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">serialize</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 46</span> </span><span class="NAME">self.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 47</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'> 48</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 49</span>
<span class='linenumber'> 50</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cancelButton</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.form.getElementsByClassName</span><span class="PUNC">(</span><span class="STRN">'cancel'</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'> 51</span> </span><span class="NAME">cancelButton.onclick</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'> 52</span> </span><span class="NAME">self.onCloseHandler</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 53</span> </span><span class="NAME">self.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 54</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 55</span>
<span class='linenumber'> 56</span> </span><span class="COMM">// append dialog</span><span class="WHIT">
<span class='linenumber'> 57</span> </span><span class="NAME">document.body.appendChild</span><span class="PUNC">(</span><span class="NAME">this.form</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 58</span> </span><span class="NAME">container.parentNode.removeChild</span><span class="PUNC">(</span><span class="NAME">container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 59</span>
<span class='linenumber'> 60</span> </span><span class="COMM">// place dialog to center of window</span><span class="WHIT">
<span class='linenumber'> 61</span> </span><span class="NAME">this.setPosition</span><span class="PUNC">(</span><span class="NAME">options.position</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 62</span>
<span class='linenumber'> 63</span> </span><span class="COMM">// give focus</span><span class="WHIT">
<span class='linenumber'> 64</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">elementToFocus</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.form.getElementsByClassName</span><span class="PUNC">(</span><span class="STRN">'initialFocus'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 65</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">elementToFocus.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">elementToFocus</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">focus</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 66</span>
<span class='linenumber'> 67</span> </span><span class="COMM">// handle cancelOnEsc option</span><span class="WHIT">
<span class='linenumber'> 68</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">options.cancelOnEsc</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 69</span> </span><span class="NAME">Event.observe</span><span class="PUNC">(</span><span class="NAME">this.form</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'keydown'</span><span class="PUNC">,</span><span class="WHIT"> </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'> 70</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">e.keyCode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">27</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 71</span> </span><span class="NAME">this.onCloseHandler</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 72</span> </span><span class="NAME">this.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 73</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 74</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'> 75</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'> 76</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 77</span>
<span class='linenumber'> 78</span> </span><span class="NAME">this.onLoadHandler</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 79</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 80</span> </span><span class="NAME">close</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'> 81</span> </span><span class="NAME">this.form.parentNode.removeChild</span><span class="PUNC">(</span><span class="NAME">this.form</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 82</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 83</span> </span><span class="NAME">setPosition</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</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'> 84</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetElement</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 85</span>
<span class='linenumber'> 86</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'centerOfWindow'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 87</span> </span><span class="NAME">targetElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.documentElement</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 88</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">target</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'centerOfEditor'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 89</span> </span><span class="NAME">targetElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.xed.getDoc</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NAME">xq.Browser.isTrident</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"body"</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"documentElement"</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="KEYW">if</span><span class="PUNC">(</span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'nearbyCaret'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 91</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented yet"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 92</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'> 93</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Invalid argument: "</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'> 94</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 95</span>
<span class='linenumber'> 96</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">targetElement.clientWidth</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 97</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">targetElement.clientHeight</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 98</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dialogWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.form.clientWidth</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 99</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dialogHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.form.clientHeight</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>100</span>
<span class='linenumber'>101</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">targetWidth</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">dialogWidth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="REGX">/ 2);
<span class='linenumber'>102</span> var y = parseInt((targetHeight - dialogHeight) /</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>103</span>
<span class='linenumber'>104</span> </span><span class="NAME">this.form.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>105</span> </span><span class="NAME">this.form.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>106</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>107</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>108</span>
<span class='linenumber'>109</span>
<span class='linenumber'>110</span>
<span class='linenumber'>111</span> </span><span class="NAME">xq.controls.QuickSearchDialog</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'>112</span> </span><span class="COMM">/**
<span class='linenumber'>113</span> * @constructor
<span class='linenumber'>114</span> */</span><span class="WHIT">
<span class='linenumber'>115</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="NAME">xed</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="WHIT">
<span class='linenumber'>116</span> </span><span class="NAME">this.xed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xed</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>117</span>
<span class='linenumber'>118</span> </span><span class="NAME">this.rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.RichDom.createInstance</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>119</span> </span><span class="NAME">this.rdom.setRoot</span><span class="PUNC">(</span><span class="NAME">document.body</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>120</span>
<span class='linenumber'>121</span> </span><span class="NAME">this.param</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">param</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>122</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.param.renderItem</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.param.renderItem</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">item</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>123</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.rdom.getInnerText</span><span class="PUNC">(</span><span class="NAME">item</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>124</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="WHIT">
<span class='linenumber'>125</span>
<span class='linenumber'>126</span> </span><span class="NAME">this.container</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'>127</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>128</span>
<span class='linenumber'>129</span> </span><span class="NAME">getQuery</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'>130</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>131</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._getInputField</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">value</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>132</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>133</span>
<span class='linenumber'>134</span> </span><span class="NAME">onSubmit</span><span class="PUNC">:</span><span class="WHIT"> </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'>135</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.matchCount</span><span class="PUNC">(</span><span class="PUNC">)</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'>136</span> </span><span class="NAME">this.param.onSelect</span><span class="PUNC">(</span><span class="NAME">this.xed</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.list</span><span class="PUNC">[</span><span class="NAME">this._getSelectedIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>137</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>138</span>
<span class='linenumber'>139</span> </span><span class="NAME">this.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>140</span> </span><span class="NAME">Event.stop</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>141</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'>142</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>143</span>
<span class='linenumber'>144</span> </span><span class="NAME">onCancel</span><span class="PUNC">:</span><span class="WHIT"> </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'>145</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.param.onCancel</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.param.onCancel</span><span class="PUNC">(</span><span class="NAME">this.xed</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>146</span> </span><span class="NAME">this.close</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>147</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>148</span>
<span class='linenumber'>149</span> </span><span class="NAME">onBlur</span><span class="PUNC">:</span><span class="WHIT"> </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'>150</span> </span><span class="COMM">// TODO: Ugly</span><span class="WHIT">
<span class='linenumber'>151</span> </span><span class="NAME">setTimeout</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">this.onCancel</span><span class="PUNC">(</span><span class="NAME">e</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><span class="NUMB">400</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>152</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>153</span>
<span class='linenumber'>154</span> </span><span class="NAME">onKey</span><span class="PUNC">:</span><span class="WHIT"> </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'>155</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">esc</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.Shortcut</span><span class="PUNC">(</span><span class="STRN">"ESC"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>156</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enter</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.Shortcut</span><span class="PUNC">(</span><span class="STRN">"ENTER"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>157</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">up</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.Shortcut</span><span class="PUNC">(</span><span class="STRN">"UP"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>158</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">down</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.Shortcut</span><span class="PUNC">(</span><span class="STRN">"DOWN"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>159</span>
<span class='linenumber'>160</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">esc.matches</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>161</span> </span><span class="NAME">this.onCancel</span><span class="PUNC">(</span><span class="NAME">e</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><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">enter.matches</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>163</span> </span><span class="NAME">this.onSubmit</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>164</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">up.matches</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>165</span> </span><span class="NAME">this._moveSelectionUp</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>166</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">down.matches</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>167</span> </span><span class="NAME">this._moveSelectionDown</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>168</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'>169</span> </span><span class="NAME">this.updateList</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>170</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>171</span> </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="NAME">onClick</span><span class="PUNC">:</span><span class="WHIT"> </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'>174</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">e.srcElement</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">e.target</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>175</span> </span><span class="KEYW">if</span><span class="PUNC">(</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="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>176</span>
<span class='linenumber'>177</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._getIndexOfLI</span><span class="PUNC">(</span><span class="NAME">target</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>178</span> </span><span class="NAME">this.param.onSelect</span><span class="PUNC">(</span><span class="NAME">this.xed</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.list</span><span class="PUNC">[</span><span class="NAME">index</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>179</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>180</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>181</span>
<span class='linenumber'>182</span> </span><span class="NAME">onList</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>183</span> </span><span class="NAME">this.list</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">list</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>184</span> </span><span class="NAME">this.renderList</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>185</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>186</span>
<span class='linenumber'>187</span> </span><span class="NAME">updateList</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'>188</span> </span><span class="NAME">window.setTimeout</span><span class="PUNC">(</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'>189</span> </span><span class="NAME">this.param.listProvider</span><span class="PUNC">(</span><span class="NAME">this.getQuery</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.xed</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onList.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'>190</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="WHIT"> </span><span class="NUMB">0</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="NAME">renderList</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>194</span> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>195</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._getListContainer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>196</span> </span><span class="NAME">ol.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'>197</span>
<span class='linenumber'>198</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">&lt;</span><span class="WHIT"> </span><span class="NAME">list.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'>199</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.rdom.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'>200</span> </span><span class="NAME">li.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.param.renderItem</span><span class="PUNC">(</span><span class="NAME">list</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'>201</span> </span><span class="NAME">ol.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'>202</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>203</span>
<span class='linenumber'>204</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">ol.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'>205</span> </span><span class="NAME">ol.firstChild.className</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"selected"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>206</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>207</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>208</span>
<span class='linenumber'>209</span> </span><span class="NAME">show</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'>210</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._create</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>211</span>
<span class='linenumber'>212</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dialog</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rdom.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.rdom.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</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'>213</span> </span><span class="NAME">this.setPosition</span><span class="PUNC">(</span><span class="STRN">'centerOfEditor'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>214</span> </span><span class="NAME">this.updateList</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>215</span> </span><span class="NAME">this.focus</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>216</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>217</span>
<span class='linenumber'>218</span> </span><span class="NAME">close</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'>219</span> </span><span class="NAME">this.rdom.deleteNode</span><span class="PUNC">(</span><span class="NAME">this.container</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>220</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>221</span>
<span class='linenumber'>222</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="WHIT">
<span class='linenumber'>223</span> </span><span class="NAME">this._getInputField</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">focus</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>224</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>225</span>
<span class='linenumber'>226</span> </span><span class="NAME">setPosition</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</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'>227</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetElement</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>228</span>
<span class='linenumber'>229</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">target</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'centerOfWindow'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>230</span> </span><span class="NAME">targetElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document.documentElement</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>231</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">target</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'centerOfEditor'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>232</span> </span><span class="NAME">targetElement</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.xed.getDoc</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">documentElement</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>233</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">target</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'nearbyCaret'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>234</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Not implemented yet"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>235</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'>236</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Invalid argument: "</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'>237</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>238</span>
<span class='linenumber'>239</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">targetElement.clientWidth</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>240</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">targetHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">targetElement.clientHeight</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>241</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dialogWidth</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientWidth</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>242</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dialogHeight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.container.clientHeight</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>243</span>
<span class='linenumber'>244</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parseInt</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">targetWidth</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">dialogWidth</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="REGX">/ 2);
<span class='linenumber'>245</span> var y = parseInt((targetHeight - dialogHeight) /</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>246</span> </span><span class="NAME">this.container.style.left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>247</span> </span><span class="NAME">this.container.style.top</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"px"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>248</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>249</span>
<span class='linenumber'>250</span> </span><span class="NAME">matchCount</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'>251</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.list</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this.list.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'>252</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>253</span>
<span class='linenumber'>254</span> </span><span class="NAME">_create</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'>255</span> </span><span class="COMM">// make container</span><span class="WHIT">
<span class='linenumber'>256</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.rdom.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'>257</span> </span><span class="NAME">container.className</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"xqQuickSearch"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>258</span>
<span class='linenumber'>259</span> </span><span class="COMM">// make title</span><span class="WHIT">
<span class='linenumber'>260</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.param.title</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>261</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">title</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rdom.createElement</span><span class="PUNC">(</span><span class="STRN">"H1"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>262</span> </span><span class="NAME">title.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.param.title</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>263</span> </span><span class="NAME">container.appendChild</span><span class="PUNC">(</span><span class="NAME">title</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>264</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>265</span>
<span class='linenumber'>266</span> </span><span class="COMM">// make input field</span><span class="WHIT">
<span class='linenumber'>267</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inputWrapper</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rdom.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'>268</span> </span><span class="NAME">inputWrapper.className</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"input"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>269</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">form</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rdom.createElement</span><span class="PUNC">(</span><span class="STRN">"FORM"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>270</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">input</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rdom.createElement</span><span class="PUNC">(</span><span class="STRN">"INPUT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>271</span> </span><span class="NAME">input.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"text"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>272</span> </span><span class="NAME">input.value</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'>273</span> </span><span class="NAME">form.appendChild</span><span class="PUNC">(</span><span class="NAME">input</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>274</span> </span><span class="NAME">inputWrapper.appendChild</span><span class="PUNC">(</span><span class="NAME">form</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>275</span> </span><span class="NAME">container.appendChild</span><span class="PUNC">(</span><span class="NAME">inputWrapper</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">// make list</span><span class="WHIT">
<span class='linenumber'>278</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="NAME">this.rdom.createElement</span><span class="PUNC">(</span><span class="STRN">"OL"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>279</span>
<span class='linenumber'>280</span> </span><span class="NAME">Event.observe</span><span class="PUNC">(</span><span class="NAME">input</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'blur'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onBlur.bindAsEventListener</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'>281</span> </span><span class="NAME">Event.observe</span><span class="PUNC">(</span><span class="NAME">input</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'keypress'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onKey.bindAsEventListener</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'>282</span> </span><span class="NAME">Event.observe</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'click'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onClick.bindAsEventListener</span><span class="PUNC">(</span><span class="KEYW">this</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'>283</span> </span><span class="NAME">Event.observe</span><span class="PUNC">(</span><span class="NAME">form</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'submit'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onSubmit.bindAsEventListener</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'>284</span> </span><span class="NAME">Event.observe</span><span class="PUNC">(</span><span class="NAME">form</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'reset'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.onCancel.bindAsEventListener</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'>285</span>
<span class='linenumber'>286</span> </span><span class="NAME">container.appendChild</span><span class="PUNC">(</span><span class="NAME">list</span><span class="PUNC">)</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">container</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="NAME">_getInputField</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'>291</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.container.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">'INPUT'</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'>292</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>293</span>
<span class='linenumber'>294</span> </span><span class="NAME">_getListContainer</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'>295</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.container.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">'OL'</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'>296</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>297</span>
<span class='linenumber'>298</span> </span><span class="NAME">_getSelectedIndex</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'>299</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._getListContainer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>300</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">&lt;</span><span class="WHIT"> </span><span class="NAME">ol.childNodes.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'>301</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">ol.childNodes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">className</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'selected'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>302</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>303</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>304</span>
<span class='linenumber'>305</span> </span><span class="NAME">_getIndexOfLI</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">li</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>306</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._getListContainer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>307</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">&lt;</span><span class="WHIT"> </span><span class="NAME">ol.childNodes.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'>308</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">ol.childNodes</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">li</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>309</span> </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="NAME">_moveSelectionUp</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'>313</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">count</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.matchCount</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>314</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">count</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="PUNC">;</span><span class="WHIT">
<span class='linenumber'>315</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._getSelectedIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>316</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._getListContainer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>317</span> </span><span class="NAME">ol.childNodes</span><span class="PUNC">[</span><span class="NAME">index</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">className</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'>318</span>
<span class='linenumber'>319</span> </span><span class="NAME">index</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>320</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">count</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 class='linenumber'>321</span>
<span class='linenumber'>322</span> </span><span class="NAME">ol.childNodes</span><span class="PUNC">[</span><span class="NAME">index</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">className</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"selected"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>323</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>324</span>
<span class='linenumber'>325</span> </span><span class="NAME">_moveSelectionDown</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'>326</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">count</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.matchCount</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>327</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">count</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="PUNC">;</span><span class="WHIT">
<span class='linenumber'>328</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._getSelectedIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>329</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._getListContainer</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>330</span> </span><span class="NAME">ol.childNodes</span><span class="PUNC">[</span><span class="NAME">index</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">className</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'>331</span>
<span class='linenumber'>332</span> </span><span class="NAME">index</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>333</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">count</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">index</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'>334</span>
<span class='linenumber'>335</span> </span><span class="NAME">ol.childNodes</span><span class="PUNC">[</span><span class="NAME">index</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">className</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"selected"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>336</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>337</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span></pre></body></html>

View file

@ -0,0 +1,325 @@
<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> * Provide various tree operations.
<span class='linenumber'> 3</span> *
<span class='linenumber'> 4</span> * TODO: Add specs
<span class='linenumber'> 5</span> */</span><span class="WHIT">
<span class='linenumber'> 6</span> </span><span class="NAME">xq.DomTree</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="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'> 8</span> </span><span class="NAME">this._blockTags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"DIV"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"DD"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"ADDRESS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"CAPTION"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"DT"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"H1"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"H2"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"H3"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"H4"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"H5"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"H6"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"HR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"P"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"BODY"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"BLOCKQUOTE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"PRE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"PARAM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"DL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"OL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"TABLE"</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="WHIT"> </span><span class="STRN">"TR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"TH"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"TD"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 9</span> </span><span class="NAME">this._blockContainerTags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"DIV"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"DD"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"LI"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"BODY"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"BLOCKQUOTE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"OL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"DL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"TABLE"</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="WHIT"> </span><span class="STRN">"TR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"TH"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"TD"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 10</span> </span><span class="NAME">this._listContainerTags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"OL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"DL"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 11</span> </span><span class="NAME">this._tableCellTags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"TH"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"TD"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 12</span> </span><span class="NAME">this._blockOnlyContainerTags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"BODY"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"BLOCKQUOTE"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"UL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"OL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"DL"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"TABLE"</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="WHIT"> </span><span class="STRN">"TR"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 13</span> </span><span class="NAME">this._atomicTags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">"IMG"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"OBJECT"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"BR"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"HR"</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 14</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 15</span>
<span class='linenumber'> 16</span> </span><span class="NAME">getBlockTags</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'> 17</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._blockTags</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 18</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 19</span>
<span class='linenumber'> 20</span> </span><span class="COMM">/**
<span class='linenumber'> 21</span> * Find common ancestor(parent) and his immediate children(left and right).
<span class='linenumber'> 22</span> *
<span class='linenumber'> 23</span> * A --- B -+- C -+- D -+- E
<span class='linenumber'> 24</span> * |
<span class='linenumber'> 25</span> * +- F -+- G
<span class='linenumber'> 26</span> *
<span class='linenumber'> 27</span> * For example:
<span class='linenumber'> 28</span> * > findCommonAncestorAndImmediateChildrenOf("E", "G")
<span class='linenumber'> 29</span> *
<span class='linenumber'> 30</span> * will return
<span class='linenumber'> 31</span> *
<span class='linenumber'> 32</span> * > {parent:"B", left:"C", right:"F"}
<span class='linenumber'> 33</span> */</span><span class="WHIT">
<span class='linenumber'> 34</span> </span><span class="NAME">findCommonAncestorAndImmediateChildrenOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">left</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">right</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="NAME">left.parentNode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">right.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 36</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 37</span> </span><span class="NAME">left</span><span class="PUNC">:</span><span class="NAME">left</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 38</span> </span><span class="NAME">right</span><span class="PUNC">:</span><span class="NAME">right</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 39</span> </span><span class="NAME">parent</span><span class="PUNC">:</span><span class="NAME">left.parentNode</span><span class="WHIT">
<span class='linenumber'> 40</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 41</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'> 42</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parentsOfLeft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.collectParentsOf</span><span class="PUNC">(</span><span class="NAME">left</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'> 43</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parentsOfRight</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.collectParentsOf</span><span class="PUNC">(</span><span class="NAME">right</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'> 44</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">this.getCommonAncestor</span><span class="PUNC">(</span><span class="NAME">parentsOfLeft</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parentsOfRight</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="KEYW">var</span><span class="WHIT"> </span><span class="NAME">leftAncestor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parentsOfLeft.find</span><span class="PUNC">(</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.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="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 47</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rightAncestor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">parentsOfRight.find</span><span class="PUNC">(</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.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="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 48</span>
<span class='linenumber'> 49</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 50</span> </span><span class="NAME">left</span><span class="PUNC">:</span><span class="NAME">leftAncestor</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 51</span> </span><span class="NAME">right</span><span class="PUNC">:</span><span class="NAME">rightAncestor</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 52</span> </span><span class="NAME">parent</span><span class="PUNC">:</span><span class="NAME">ca</span><span class="WHIT">
<span class='linenumber'> 53</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 54</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 55</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 56</span>
<span class='linenumber'> 57</span> </span><span class="COMM">/**
<span class='linenumber'> 58</span> * Find leaves at edge.
<span class='linenumber'> 59</span> *
<span class='linenumber'> 60</span> * A --- B -+- C -+- D -+- E
<span class='linenumber'> 61</span> * |
<span class='linenumber'> 62</span> * +- F -+- G
<span class='linenumber'> 63</span> *
<span class='linenumber'> 64</span> * For example:
<span class='linenumber'> 65</span> * > getLeavesAtEdge("A")
<span class='linenumber'> 66</span> *
<span class='linenumber'> 67</span> * will return
<span class='linenumber'> 68</span> *
<span class='linenumber'> 69</span> * > ["E", "G"]
<span class='linenumber'> 70</span> */</span><span class="WHIT">
<span class='linenumber'> 71</span> </span><span class="NAME">getLeavesAtEdge</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">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="WHIT"> </span><span class="PUNC">[</span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 73</span>
<span class='linenumber'> 74</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">findLeft</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">el</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 75</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="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">&lt;</span><span class="WHIT"> </span><span class="NAME">el.childNodes.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'> 76</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">el.childNodes</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="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isBlock</span><span class="PUNC">(</span><span class="NAME">el.childNodes</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">findLeft</span><span class="PUNC">(</span><span class="NAME">el.childNodes</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'> 77</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 78</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">el</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 79</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="WHIT">
<span class='linenumber'> 80</span>
<span class='linenumber'> 81</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">findRight</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">el</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 82</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="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">el.childNodes.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="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 83</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">el.childNodes</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="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isBlock</span><span class="PUNC">(</span><span class="NAME">el.childNodes</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">findRight</span><span class="PUNC">(</span><span class="NAME">el.childNodes</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'> 84</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 85</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">el</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 86</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="WHIT">
<span class='linenumber'> 87</span>
<span class='linenumber'> 88</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">left</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">findLeft</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 89</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">right</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">findRight</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 90</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">left</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="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">left</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">right</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="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">right</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 91</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 92</span>
<span class='linenumber'> 93</span> </span><span class="NAME">getCommonAncestor</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">parents1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">parents2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 94</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">&lt;</span><span class="WHIT"> </span><span class="NAME">parents1.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'> 95</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</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">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">parents2.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 96</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">parents1</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">parents2</span><span class="PUNC">[</span><span class="NAME">j</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">parents1</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 97</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 98</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 99</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>100</span>
<span class='linenumber'>101</span> </span><span class="NAME">collectParentsOf</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">includeSelf</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'>102</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="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>103</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">includeSelf</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">parents.push</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>104</span>
<span class='linenumber'>105</span> </span><span class="KEYW">while</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="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">node.nodeName</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"HTML"</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="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">parents.push</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>106</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">parents</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>107</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>108</span>
<span class='linenumber'>109</span> </span><span class="NAME">isDescendantOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">parent</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">child</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>110</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">parent.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="PUNC">{</span><span class="WHIT">
<span class='linenumber'>111</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">&lt;</span><span class="WHIT"> </span><span class="NAME">parent.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'>112</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isDescendantOf</span><span class="PUNC">(</span><span class="NAME">parent</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">child</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">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>113</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>114</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'>115</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>116</span>
<span class='linenumber'>117</span> </span><span class="KEYW">if</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">child</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'>118</span>
<span class='linenumber'>119</span> </span><span class="KEYW">while</span><span class="WHIT"> </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">child.parentNode</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>120</span> </span><span class="KEYW">if</span><span class="WHIT"> </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">parent</span><span class="PUNC">)</span><span class="WHIT"> </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'>121</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'>122</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>123</span>
<span class='linenumber'>124</span> </span><span class="COMM">/**
<span class='linenumber'>125</span> * Perform tree walking (foreward)
<span class='linenumber'>126</span> */</span><span class="WHIT">
<span class='linenumber'>127</span> </span><span class="NAME">walkForward</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'>128</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">node.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="WHIT"> </span><span class="NAME">node.firstChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>129</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">node.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>130</span>
<span class='linenumber'>131</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.parentNode</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">if</span><span class="PUNC">(</span><span class="NAME">node.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node.nextSibling</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 class='linenumber'>135</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'>136</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>137</span>
<span class='linenumber'>138</span> </span><span class="COMM">/**
<span class='linenumber'>139</span> * Perform tree walking (backward)
<span class='linenumber'>140</span> */</span><span class="WHIT">
<span class='linenumber'>141</span> </span><span class="NAME">walkBackward</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'>142</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">node.previousSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>143</span> </span><span class="NAME">node</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="WHIT">
<span class='linenumber'>144</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">node.hasChildNodes</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</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">node.lastChild</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>145</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'>146</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>147</span>
<span class='linenumber'>148</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">node.parentNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>149</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>150</span>
<span class='linenumber'>151</span> </span><span class="COMM">/**
<span class='linenumber'>152</span> * Perform tree walking (to next siblings)
<span class='linenumber'>153</span> */</span><span class="WHIT">
<span class='linenumber'>154</span> </span><span class="NAME">walkNext</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.nextSibling</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>155</span>
<span class='linenumber'>156</span> </span><span class="COMM">/**
<span class='linenumber'>157</span> * Perform tree walking (to next siblings)
<span class='linenumber'>158</span> */</span><span class="WHIT">
<span class='linenumber'>159</span> </span><span class="NAME">walkPrev</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.previousSibling</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>160</span>
<span class='linenumber'>161</span> </span><span class="COMM">/**
<span class='linenumber'>162</span> * Returns true if target is followed by start
<span class='linenumber'>163</span> */</span><span class="WHIT">
<span class='linenumber'>164</span> </span><span class="NAME">checkTargetForward</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">target</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>165</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._check</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.walkForward</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>166</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>167</span>
<span class='linenumber'>168</span> </span><span class="COMM">/**
<span class='linenumber'>169</span> * Returns true if start is followed by target
<span class='linenumber'>170</span> */</span><span class="WHIT">
<span class='linenumber'>171</span> </span><span class="NAME">checkTargetBackward</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">target</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>172</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._check</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.walkBackward</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>173</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>174</span>
<span class='linenumber'>175</span> </span><span class="NAME">findForward</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">condition</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'>176</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._find</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.walkForward</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">condition</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'>177</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>178</span>
<span class='linenumber'>179</span> </span><span class="NAME">findBackward</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">condition</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'>180</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._find</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.walkBackward</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">condition</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'>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">/** @private */</span><span class="WHIT">
<span class='linenumber'>184</span> </span><span class="NAME">_check</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">direction</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">target</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>185</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">target</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'>186</span>
<span class='linenumber'>187</span> </span><span class="KEYW">while</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">direction</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'>188</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">target</span><span class="PUNC">)</span><span class="WHIT"> </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'>189</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>190</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'>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">/** @private */</span><span class="WHIT">
<span class='linenumber'>194</span> </span><span class="NAME">_find</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">direction</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">condition</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'>195</span> </span><span class="KEYW">while</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">direction</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'>196</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">exitCondition</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">(</span><span class="NAME">start</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'>197</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">condition</span><span class="PUNC">(</span><span class="NAME">start</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">start</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>198</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>199</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'>200</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>201</span>
<span class='linenumber'>202</span> </span><span class="COMM">/**
<span class='linenumber'>203</span> * Walks Forward through DOM tree from start to end, and collects all nodes that matches with a filter.
<span class='linenumber'>204</span> * If no filter provided, it just collects all nodes.
<span class='linenumber'>205</span> *
<span class='linenumber'>206</span> * @param function filter a filter function
<span class='linenumber'>207</span> */</span><span class="WHIT">
<span class='linenumber'>208</span> </span><span class="NAME">collectNodesBetween</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="NAME">filter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>209</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="KEYW">return</span><span class="WHIT"> </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="NAME">findAll</span><span class="PUNC">(</span><span class="NAME">filter</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="KEYW">return</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'>210</span>
<span class='linenumber'>211</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">this.collectForward</span><span class="PUNC">(</span><span class="NAME">start</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">end</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>212</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT">
<span class='linenumber'>213</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 class='linenumber'>214</span> </span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
<span class='linenumber'>215</span> </span><span class="NAME">filter</span><span class="PUNC">(</span><span class="NAME">end</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>216</span> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">nodes.push</span><span class="PUNC">(</span><span class="NAME">end</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>217</span>
<span class='linenumber'>218</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'>219</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>220</span>
<span class='linenumber'>221</span> </span><span class="NAME">collectForward</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">exitCondition</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>222</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.collect</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.walkForward</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>223</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>224</span>
<span class='linenumber'>225</span> </span><span class="NAME">collectBackward</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">exitCondition</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>226</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.collect</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.walkBackward</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>227</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>228</span>
<span class='linenumber'>229</span> </span><span class="NAME">collectNext</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">exitCondition</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>230</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.collect</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.walkNext</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>231</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>232</span>
<span class='linenumber'>233</span> </span><span class="NAME">collectPrev</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">exitCondition</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>234</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.collect</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.walkPrev</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>235</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>236</span>
<span class='linenumber'>237</span> </span><span class="NAME">collect</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">next</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>238</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="NAME">start</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>239</span>
<span class='linenumber'>240</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'>241</span> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>242</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT">
<span class='linenumber'>243</span> </span><span class="PUNC">(</span><span class="NAME">start</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><span class="PUNC">||</span><span class="WHIT">
<span class='linenumber'>244</span> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">exitCondition</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>245</span> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>246</span>
<span class='linenumber'>247</span> </span><span class="NAME">nodes.push</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>248</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>249</span>
<span class='linenumber'>250</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"function"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">nodes.findAll</span><span class="PUNC">(</span><span class="NAME">filter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">nodes</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>251</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>252</span>
<span class='linenumber'>253</span>
<span class='linenumber'>254</span> </span><span class="NAME">hasBlocks</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'>255</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">element.childNodes</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>256</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">&lt;</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'>257</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isBlock</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="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>258</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>259</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'>260</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>261</span>
<span class='linenumber'>262</span> </span><span class="NAME">hasMixedContents</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'>263</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.isBlock</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>264</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.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="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>265</span>
<span class='linenumber'>266</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hasTextOrInline</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'>267</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">hasBlock</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'>268</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">&lt;</span><span class="WHIT"> </span><span class="NAME">element.childNodes.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'>269</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.childNodes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>270</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">hasTextOrInline</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.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="NAME">hasTextOrInline</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'>271</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">hasBlock</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.isBlock</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">hasBlock</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'>272</span>
<span class='linenumber'>273</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">hasTextOrInline</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">hasBlock</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>274</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>275</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">hasTextOrInline</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">hasBlock</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'>276</span>
<span class='linenumber'>277</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'>278</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>279</span>
<span class='linenumber'>280</span> </span><span class="NAME">isBlockOnlyContainer</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'>281</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'>282</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._blockOnlyContainerTags.include</span><span class="PUNC">(</span><span class="KEYW">typeof</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">'string'</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">element.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>283</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>284</span>
<span class='linenumber'>285</span> </span><span class="NAME">isTableCell</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'>286</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'>287</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._tableCellTags.include</span><span class="PUNC">(</span><span class="KEYW">typeof</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">'string'</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">element.nodeName</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="NAME">isBlockContainer</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'>291</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'>292</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._blockContainerTags.include</span><span class="PUNC">(</span><span class="KEYW">typeof</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">'string'</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">element.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>293</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>294</span>
<span class='linenumber'>295</span> </span><span class="NAME">isHeading</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'>296</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'>297</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</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">'string'</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">element.nodeName</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">match</span><span class="PUNC">(</span><span class="REGX">/H\d/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>298</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>299</span>
<span class='linenumber'>300</span> </span><span class="NAME">isBlock</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'>301</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'>302</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._blockTags.include</span><span class="PUNC">(</span><span class="KEYW">typeof</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">'string'</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">element.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>303</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>304</span>
<span class='linenumber'>305</span> </span><span class="NAME">isAtomic</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'>306</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'>307</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._atomicTags.include</span><span class="PUNC">(</span><span class="KEYW">typeof</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">'string'</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">element.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>308</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>309</span>
<span class='linenumber'>310</span> </span><span class="NAME">isListContainer</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'>311</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'>312</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this._listContainerTags.include</span><span class="PUNC">(</span><span class="KEYW">typeof</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">'string'</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">element.nodeName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>313</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>314</span>
<span class='linenumber'>315</span> </span><span class="NAME">isTextOrInlineNode</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'>316</span> </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="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="PUNC">!</span><span class="NAME">this.isBlock</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>317</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>318</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span></pre></body></html>

View file

@ -0,0 +1,163 @@
<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> * @fileOverview xq.EditHistory manages editing history and performs UNDO/REDO.
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.EditHistory</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'> 5</span> </span><span class="COMM">/**
<span class='linenumber'> 6</span> * Initializer
<span class='linenumber'> 7</span> *
<span class='linenumber'> 8</span> * @constructor
<span class='linenumber'> 9</span> * @param {xq.RichDom} rdom RichDom instance
<span class='linenumber'> 10</span> * @param {Number} [max] maximum UNDO buffer size(default value is 100).
<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="NAME">rdom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">max</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 13</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">rdom</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'> 14</span>
<span class='linenumber'> 15</span> </span><span class="NAME">this.disabled</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'> 16</span> </span><span class="NAME">this.max</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">max</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NUMB">100</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 17</span> </span><span class="NAME">this.rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 18</span> </span><span class="NAME">this.root</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 19</span> </span><span class="NAME">this.clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 20</span>
<span class='linenumber'> 21</span> </span><span class="NAME">this.lastModified</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Date.get</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 22</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 23</span> </span><span class="NAME">getLastModifiedDate</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'> 24</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.lastModified</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 25</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 26</span> </span><span class="NAME">isUndoable</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'> 27</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.queue.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">this.index</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'> 28</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 29</span> </span><span class="NAME">isRedoable</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'> 30</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.queue.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">this.index</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">this.queue.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 class='linenumber'> 31</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 32</span> </span><span class="NAME">disable</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'> 33</span> </span><span class="NAME">this.disabled</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'> 34</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 35</span> </span><span class="NAME">enable</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'> 36</span> </span><span class="NAME">this.disabled</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'> 37</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 38</span> </span><span class="NAME">undo</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'> 39</span> </span><span class="NAME">this.pushContent</span><span class="PUNC">(</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="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isUndoable</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'> 42</span> </span><span class="NAME">this.index</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 43</span> </span><span class="NAME">this.popContent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 44</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'> 45</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'> 46</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'> 47</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 48</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 49</span> </span><span class="NAME">redo</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'> 50</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.isRedoable</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'> 51</span> </span><span class="NAME">this.index</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 52</span> </span><span class="NAME">this.popContent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 53</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'> 54</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'> 55</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'> 56</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 57</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 58</span> </span><span class="NAME">onCommand</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'> 59</span> </span><span class="NAME">this.lastModified</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Date.get</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 60</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.disabled</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'> 61</span>
<span class='linenumber'> 62</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.pushContent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 63</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 64</span> </span><span class="NAME">onEvent</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">event</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 65</span> </span><span class="NAME">this.lastModified</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Date.get</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 66</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.disabled</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'> 67</span>
<span class='linenumber'> 68</span> </span><span class="COMM">// ignore normal keys</span><span class="WHIT">
<span class='linenumber'> 69</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="STRN">'keydown'</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">event.type</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">event.ctrlKey</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">event.metaKey</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 70</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">'keydown'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'keyup'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'keypress'</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">event.type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">event.ctrlKey</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">event.altKey</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">event.metaKey</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">[</span><span class="NUMB">33</span><span class="PUNC">,</span><span class="NUMB">34</span><span class="PUNC">,</span><span class="NUMB">35</span><span class="PUNC">,</span><span class="NUMB">36</span><span class="PUNC">,</span><span class="NUMB">37</span><span class="PUNC">,</span><span class="NUMB">38</span><span class="PUNC">,</span><span class="NUMB">39</span><span class="PUNC">,</span><span class="NUMB">40</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">event.keyCode</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 71</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">'keydown'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'keyup'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'keypress'</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">event.type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">event.ctrlKey</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">event.metaKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NUMB">89</span><span class="PUNC">,</span><span class="NUMB">90</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">event.keyCode</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 72</span>
<span class='linenumber'> 73</span> </span><span class="COMM">// ignore ctrl/shift/alt/meta keys</span><span class="WHIT">
<span class='linenumber'> 74</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="NUMB">16</span><span class="PUNC">,</span><span class="NUMB">17</span><span class="PUNC">,</span><span class="NUMB">18</span><span class="PUNC">,</span><span class="NUMB">224</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">event.keyCode</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 75</span>
<span class='linenumber'> 76</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.pushContent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 77</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 78</span> </span><span class="NAME">popContent</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'> 79</span> </span><span class="NAME">this.lastModified</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">Date.get</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 80</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">entry</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.queue</span><span class="PUNC">[</span><span class="NAME">this.index</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 81</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">entry.caret</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'> 82</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">html</span><span class="PUNC">=</span><span class="NAME">entry.html.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">entry.caret</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'&lt;span id="caret_marker_00700">&lt;/span>'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">entry.html.substring</span><span class="PUNC">(</span><span class="NAME">entry.caret</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 83</span> </span><span class="NAME">this.root.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'> 84</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'> 85</span> </span><span class="NAME">this.root.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">entry.html</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 86</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 87</span> </span><span class="NAME">this.restoreCaret</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 88</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 89</span> </span><span class="NAME">pushContent</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">ignoreCaret</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 90</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">xq.Browser.isTrident</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ignoreCaret</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.rdom.hasFocus</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 91</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.rdom.getCurrentElement</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 92</span>
<span class='linenumber'> 93</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">html</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.root.innerHTML</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 94</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">html</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.queue</span><span class="PUNC">[</span><span class="NAME">this.index</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">this.queue</span><span class="PUNC">[</span><span class="NAME">this.index</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">html</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">null</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 95</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">caret</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ignoreCaret</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">this.saveCaret</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 96</span>
<span class='linenumber'> 97</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.queue.length</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">this.max</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 98</span> </span><span class="NAME">this.queue.shift</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 99</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'>100</span> </span><span class="NAME">this.index</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>101</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>102</span>
<span class='linenumber'>103</span> </span><span class="NAME">this.queue.splice</span><span class="PUNC">(</span><span class="NAME">this.index</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.queue.length</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.index</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">html</span><span class="PUNC">:</span><span class="NAME">html</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">caret</span><span class="PUNC">:</span><span class="NAME">caret</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>104</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'>105</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>106</span> </span><span class="NAME">clear</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'>107</span> </span><span class="NAME">this.index</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 class='linenumber'>108</span> </span><span class="NAME">this.queue</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'>109</span> </span><span class="NAME">this.pushContent</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>110</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>111</span> </span><span class="NAME">saveCaret</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'>112</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.rdom.hasSelection</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'>113</span>
<span class='linenumber'>114</span> </span><span class="COMM">// FF on Mac has a caret problem with these lines. --2007/11/19</span><span class="WHIT">
<span class='linenumber'>115</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.rdom.pushMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>116</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">str</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.Browser.isTrident</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">'&lt;SPAN class='</span><span class="PUNC">+</span><span class="NAME">marker.className</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'&lt;span class="'</span><span class="PUNC">+</span><span class="NAME">marker.className</span><span class="PUNC">+</span><span class="STRN">'"'</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>117</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">caret</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rdom.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">innerHTML.indexOf</span><span class="PUNC">(</span><span class="NAME">str</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>118</span> </span><span class="NAME">this.rdom.popMarker</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>119</span>
<span class='linenumber'>120</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">caret</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> // This is old code. It also has same problem.
<span class='linenumber'>124</span>
<span class='linenumber'>125</span> if(this.rdom.hasSelection()) return null;
<span class='linenumber'>126</span>
<span class='linenumber'>127</span> var bookmark = this.rdom.saveSelection();
<span class='linenumber'>128</span> var marker = this.rdom.pushMarker();
<span class='linenumber'>129</span>
<span class='linenumber'>130</span> var str = xq.Browser.isTrident ? '&lt;SPAN class='+marker.className : '&lt;span class="'+marker.className+'"';
<span class='linenumber'>131</span> var caret = this.rdom.getRoot().innerHTML.indexOf(str);
<span class='linenumber'>132</span>
<span class='linenumber'>133</span> this.rdom.popMarker();
<span class='linenumber'>134</span> this.rdom.restoreSelection(bookmark);
<span class='linenumber'>135</span>
<span class='linenumber'>136</span> return caret;
<span class='linenumber'>137</span> */</span><span class="WHIT">
<span class='linenumber'>138</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>139</span> </span><span class="NAME">restoreCaret</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'>140</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.rdom.$</span><span class="PUNC">(</span><span class="STRN">'caret_marker_00700'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>141</span>
<span class='linenumber'>142</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">marker</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>143</span> </span><span class="NAME">this.rdom.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'>144</span> </span><span class="NAME">this.rdom.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'>145</span> </span><span class="NAME">this.rdom.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'>146</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'>147</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.rdom.tree.findForward</span><span class="PUNC">(</span><span class="NAME">this.rdom.getRoot</span><span class="PUNC">(</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="WHIT">
<span class='linenumber'>148</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.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.hasBlocks</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><span class="PUNC">}</span><span class="PUNC">.</span><span class="NAME">bind</span><span class="PUNC">(</span><span class="NAME">this.rdom.tree</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>150</span> </span><span class="NAME">this.rdom.selectElement</span><span class="PUNC">(</span><span class="NAME">node</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'>151</span> </span><span class="NAME">this.rdom.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'>152</span>
<span class='linenumber'>153</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>154</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>155</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>156</span> </span></pre></body></html>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,54 @@
<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> * RichDom for Gecko
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.RichDomGecko</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="NAME">xq.RichDomW3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 5</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="WHIT">
<span class='linenumber'> 6</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">holder</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">"BR"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 7</span> </span><span class="NAME">holder.setAttribute</span><span class="PUNC">(</span><span class="STRN">"type"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"_moz"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 8</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">holder</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 9</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 10</span>
<span class='linenumber'> 11</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="WHIT">
<span class='linenumber'> 12</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">'&lt;br type="_moz" />'</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 13</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 14</span>
<span class='linenumber'> 15</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="WHIT">
<span class='linenumber'> 16</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.createElementFromHtml</span><span class="PUNC">(</span><span class="STRN">'&lt;p>&lt;br type="_moz" />&lt;/p>'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 17</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 18</span>
<span class='linenumber'> 19</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="WHIT">
<span class='linenumber'> 20</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">1</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'> 21</span>
<span class='linenumber'> 22</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">typeMatches</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">"BR"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.getAttribute</span><span class="PUNC">(</span><span class="STRN">"type"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"_moz"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 23</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">typeMatches</span><span class="PUNC">)</span><span class="WHIT"> </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'> 24</span>
<span class='linenumber'> 25</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">positionMatches</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">"BR"</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.getNextSibling</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 26</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">positionMatches</span><span class="PUNC">)</span><span class="WHIT"> </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'> 27</span>
<span class='linenumber'> 28</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'> 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="NAME">selectElement</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">entireElement</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 32</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">throw</span><span class="WHIT"> </span><span class="STRN">"[element] is null"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 33</span> </span><span class="KEYW">if</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">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"[element] is not an element"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 34</span>
<span class='linenumber'> 35</span> </span><span class="COMM">// required to avoid Windows FF selection bug.</span><span class="WHIT">
<span class='linenumber'> 36</span> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 37</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">xq.Browser.isMac</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.doc.execCommand</span><span class="PUNC">(</span><span class="STRN">"SelectAll"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 38</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">ignored</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 39</span>
<span class='linenumber'> 40</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">entireElement</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 41</span> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">selectNode</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 42</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'> 43</span> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">selectNodeContents</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 44</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 45</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 46</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 47</span> </span></pre></body></html>

View file

@ -0,0 +1,369 @@
<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> * RichDom for Internet Explorer 6 and 7
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.RichDomTrident</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="NAME">xq.RichDom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 5</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="WHIT">
<span class='linenumber'> 6</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.createTextNode</span><span class="PUNC">(</span><span class="STRN">" "</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 7</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 8</span>
<span class='linenumber'> 9</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="WHIT">
<span class='linenumber'> 10</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">'&nbsp;'</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 11</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 12</span>
<span class='linenumber'> 13</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="WHIT">
<span class='linenumber'> 14</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.createElementFromHtml</span><span class="PUNC">(</span><span class="STRN">"&lt;p>&nbsp;&lt;/p>"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 15</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 16</span>
<span class='linenumber'> 17</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="WHIT">
<span class='linenumber'> 18</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'> 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><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="WHIT">
<span class='linenumber'> 22</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">element.outerHTML</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 23</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 24</span>
<span class='linenumber'> 25</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="WHIT">
<span class='linenumber'> 26</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.hasSelection</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.collapseSelection</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 27</span>
<span class='linenumber'> 28</span> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">pasteHTML</span><span class="PUNC">(</span><span class="STRN">'&lt;span id="xquared_temp">&lt;/span>'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 29</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="STRN">'xquared_temp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 30</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">node.id</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'xquared_temp'</span><span class="PUNC">)</span><span class="WHIT"> </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'> 31</span>
<span class='linenumber'> 32</span> </span><span class="NAME">marker.replaceNode</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 33</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'> 34</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 35</span>
<span class='linenumber'> 36</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="WHIT">
<span class='linenumber'> 37</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="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 38</span>
<span class='linenumber'> 39</span> </span><span class="COMM">// TODO: reimplement to handle atomic tags and so on. (use DomTree)</span><span class="WHIT">
<span class='linenumber'> 40</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">block</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'> 41</span> </span><span class="KEYW">if</span><span class="PUNC">(</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="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 42</span>
<span class='linenumber'> 43</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">text</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.innerText</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 44</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">lastCharCode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">text.charCodeAt</span><span class="PUNC">(</span><span class="NAME">text.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="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 45</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">text.length</span><span class="WHIT"> </span><span class="PUNC">&lt;=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">[</span><span class="NUMB">32</span><span class="PUNC">,</span><span class="NUMB">160</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">lastCharCode</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'> 46</span>
<span class='linenumber'> 47</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">block</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 48</span>
<span class='linenumber'> 49</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.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="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'> 50</span>
<span class='linenumber'> 51</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">node</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 52</span>
<span class='linenumber'> 53</span> </span><span class="COMM">// DO NOT REMOVE OR MODIFY FOLLOWING CODE:</span><span class="WHIT">
<span class='linenumber'> 54</span> </span><span class="COMM">//</span><span class="WHIT">
<span class='linenumber'> 55</span> </span><span class="COMM">// Modifying following code crash IE7</span><span class="WHIT">
<span class='linenumber'> 56</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nodeValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.nodeValue</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 57</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">nodeValue.length</span><span class="WHIT"> </span><span class="PUNC">&lt;=</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'> 58</span> </span><span class="NAME">this.deleteNode</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'> 59</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'> 60</span> </span><span class="NAME">node.nodeValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">nodeValue.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">nodeValue.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="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 61</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 62</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 63</span>
<span class='linenumber'> 64</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="WHIT">
<span class='linenumber'> 65</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.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.isAtomic</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="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 66</span>
<span class='linenumber'> 67</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element.firstChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 68</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">element.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 69</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'> 70</span> </span><span class="NAME">element.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">"&nbsp;"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 71</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 72</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 73</span>
<span class='linenumber'> 74</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'> 75</span> </span><span class="NAME">to.mergeAttributes</span><span class="PUNC">(</span><span class="NAME">from</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">copyId</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 76</span> </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="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="WHIT">
<span class='linenumber'> 79</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.hasFocus</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 80</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.hasSelection</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 81</span>
<span class='linenumber'> 82</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.getCurrentElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 83</span>
<span class='linenumber'> 84</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">"BODY"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 85</span> </span><span class="COMM">// check for atomic block element such as HR</span><span class="WHIT">
<span class='linenumber'> 86</span> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.insertNode</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'> 87</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">block.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 88</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="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 89</span> </span><span class="NAME">block</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">next</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'> 90</span> </span><span class="NAME">this.placeCaretAtStartOf</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 91</span>
<span class='linenumber'> 92</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextBlock</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'> 93</span> </span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 94</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.isBlockOnlyContainer</span><span class="PUNC">(</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="WHIT">
<span class='linenumber'> 95</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 96</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">nextBlock</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 97</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 98</span> </span><span class="NAME">this.placeCaretAtStartOf</span><span class="PUNC">(</span><span class="NAME">nextBlock</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 99</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>100</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'>101</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'>102</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextBlock</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'>103</span> </span><span class="NAME">block</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>104</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.isBlockOnlyContainer</span><span class="PUNC">(</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="WHIT">
<span class='linenumber'>105</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>106</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">nextBlock</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>107</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">block</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>108</span> </span><span class="NAME">this.placeCaretAtStartOf</span><span class="PUNC">(</span><span class="NAME">nextBlock</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>109</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>110</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'>111</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>112</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'>113</span> </span><span class="NAME">block</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'>114</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">block.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="WHIT"> </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'>115</span>
<span class='linenumber'>116</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.hasMixedContents</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'>117</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.pushMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>118</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'>119</span> </span><span class="NAME">this.popMarker</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>120</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'>121</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">this.tree.isTextOrInlineNode</span><span class="PUNC">(</span><span class="NAME">block.previousSibling</span><span class="PUNC">)</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">block.nextSibling</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.tree.hasMixedContents</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'>122</span> </span><span class="COMM">// IE?<3F>서??Blockê³?Inline/Textê°??¸ì ‘??경우 getCurrentElement ?±ì<C2B1>´ ?¤ìž‘?™í•œ??</span><span class="WHIT">
<span class='linenumber'>123</span> </span><span class="COMM">// ?°ë<C2B0>¼???„재 Block 주ë?까ì? ?œë²ˆ???¡ì•„주어???œë‹¤.</span><span class="WHIT">
<span class='linenumber'>124</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.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'>125</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'>126</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'>127</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'>128</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>129</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>130</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>131</span>
<span class='linenumber'>132</span>
<span class='linenumber'>133</span>
<span class='linenumber'>134</span> </span><span class="COMM">//////</span><span class="WHIT">
<span class='linenumber'>135</span> </span><span class="COMM">// Commands</span><span class="WHIT">
<span class='linenumber'>136</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="WHIT">
<span class='linenumber'>137</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.doc.execCommand</span><span class="PUNC">(</span><span class="NAME">commandId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">param</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>138</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>139</span>
<span class='linenumber'>140</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="WHIT">
<span class='linenumber'>141</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"BackColor"</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'>142</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>143</span>
<span class='linenumber'>144</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="WHIT">
<span class='linenumber'>145</span> </span><span class="COMM">// Generate &lt;i> tag. It will be replaced with &lt;emphasis> tag during cleanup phase.</span><span class="WHIT">
<span class='linenumber'>146</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"Italic"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>147</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>148</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="WHIT">
<span class='linenumber'>149</span> </span><span class="COMM">// Generate &lt;b> tag. It will be replaced with &lt;strong> tag during cleanup phase.</span><span class="WHIT">
<span class='linenumber'>150</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"Bold"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>151</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>152</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="WHIT">
<span class='linenumber'>153</span> </span><span class="COMM">// Generate &lt;strike> tag. It will be replaced with &lt;style class="strike"> tag during cleanup phase.</span><span class="WHIT">
<span class='linenumber'>154</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"strikethrough"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>155</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>156</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="WHIT">
<span class='linenumber'>157</span> </span><span class="COMM">// Generate &lt;u> tag. It will be replaced with &lt;em class="underline"> tag during cleanup phase.</span><span class="WHIT">
<span class='linenumber'>158</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"underline"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>159</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>160</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="WHIT">
<span class='linenumber'>161</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"RemoveFormat"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>162</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"Unlink"</span><span class="PUNC">)</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><span class="NAME">execHeading</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">level</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>165</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"FormatBlock"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"&lt;H"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">level</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">">"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>166</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>167</span>
<span class='linenumber'>168</span>
<span class='linenumber'>169</span>
<span class='linenumber'>170</span> </span><span class="COMM">//////</span><span class="WHIT">
<span class='linenumber'>171</span> </span><span class="COMM">// Focus/Caret/Selection</span><span class="WHIT">
<span class='linenumber'>172</span>
<span class='linenumber'>173</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="WHIT">
<span class='linenumber'>174</span> </span><span class="NAME">this.win.focus</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>175</span>
<span class='linenumber'>176</span> </span><span class="COMM">// ?´ê²Œ ?†ìœ¼ë©?초기??caret??P ë°ì—<C3AC> ?„치?˜ë©´?? // getCurrentElementë¥??˜ë©´ Pë¥?리턴?˜ëŠ” 기ì<C2B0>´???„ìƒ<C3AC>??ë°œìƒ<C3AC>.</span><span class="WHIT">
<span class='linenumber'>177</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this._focusedBefore</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>178</span> </span><span class="NAME">this.correctParagraph</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>179</span> </span><span class="NAME">this.placeCaretAtStartOf</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'>180</span> </span><span class="NAME">this._focusedBefore</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'>181</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>182</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>183</span>
<span class='linenumber'>184</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="WHIT">
<span class='linenumber'>185</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.doc.selection</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>186</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>187</span>
<span class='linenumber'>188</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="WHIT">
<span class='linenumber'>189</span> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>190</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>191</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sel</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><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">sel.createRange</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>192</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">ignored</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>193</span> </span><span class="COMM">// IE often fails</span><span class="WHIT">
<span class='linenumber'>194</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'>195</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>196</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>197</span>
<span class='linenumber'>198</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="WHIT">
<span class='linenumber'>199</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">selectionType</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">type.toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>200</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="STRN">"none"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">selectionType</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'>201</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="STRN">"text"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">selectionType</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.getSelectionAsHtml</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">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="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>202</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'>203</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>204</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="WHIT">
<span class='linenumber'>205</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.getSelectionAsText</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="NAME">this.sel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">clear</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>206</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>207</span>
<span class='linenumber'>208</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="WHIT">
<span class='linenumber'>209</span> </span><span class="COMM">// If there's no empty span, caret sometimes moves into a previous node.</span><span class="WHIT">
<span class='linenumber'>210</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ph</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">"SPAN"</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">"start"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>211</span> </span><span class="NAME">this.selectElement</span><span class="PUNC">(</span><span class="NAME">ph</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>212</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'>213</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">ph</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>214</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>215</span>
<span class='linenumber'>216</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">element</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="WHIT">
<span class='linenumber'>217</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">throw</span><span class="WHIT"> </span><span class="STRN">"[element] is null"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>218</span> </span><span class="KEYW">if</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">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"[element] is not an element"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>219</span>
<span class='linenumber'>220</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>221</span> </span><span class="NAME">rng.moveToElementText</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>222</span> </span><span class="NAME">rng.select</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>223</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>224</span>
<span class='linenumber'>225</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="WHIT">
<span class='linenumber'>226</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>227</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rngTemp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>228</span>
<span class='linenumber'>229</span> </span><span class="NAME">rngTemp.moveToElementText</span><span class="PUNC">(</span><span class="NAME">start</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>230</span> </span><span class="NAME">rng.setEndPoint</span><span class="PUNC">(</span><span class="STRN">"StartToStart"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rngTemp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>231</span>
<span class='linenumber'>232</span> </span><span class="NAME">rngTemp.moveToElementText</span><span class="PUNC">(</span><span class="NAME">end</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>233</span> </span><span class="NAME">rng.setEndPoint</span><span class="PUNC">(</span><span class="STRN">"EndToEnd"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rngTemp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>234</span>
<span class='linenumber'>235</span> </span><span class="NAME">rng.select</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>236</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>237</span>
<span class='linenumber'>238</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="WHIT">
<span class='linenumber'>239</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>240</span> </span><span class="NAME">rng.collapse</span><span class="PUNC">(</span><span class="NAME">toStart</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>241</span> </span><span class="NAME">rng.select</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>242</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>243</span>
<span class='linenumber'>244</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="WHIT">
<span class='linenumber'>245</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>246</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">rng.htmlText</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">rng.htmlText</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">""</span><span class="WHIT">
<span class='linenumber'>247</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>248</span>
<span class='linenumber'>249</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="WHIT">
<span class='linenumber'>250</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>251</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">rng.text</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">rng.text</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'>252</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>253</span>
<span class='linenumber'>254</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="WHIT">
<span class='linenumber'>255</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">element.id</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">element.className</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">element.style.cssText</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>256</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>257</span>
<span class='linenumber'>258</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="WHIT">
<span class='linenumber'>259</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="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>260</span> </span><span class="KEYW">if</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="PUNC">!</span><span class="NAME">element.nodeValue</span><span class="PUNC">)</span><span class="WHIT"> </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'>261</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"&nbsp;"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">""</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">element.innerHTML</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">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>262</span>
<span class='linenumber'>263</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'>264</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>265</span>
<span class='linenumber'>266</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="WHIT">
<span class='linenumber'>267</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="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="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>268</span>
<span class='linenumber'>269</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="NAME">reverse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>270</span>
<span class='linenumber'>271</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">&lt;</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'>272</span> </span><span class="KEYW">if</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="NAME">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">nodes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">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><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'>273</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>274</span>
<span class='linenumber'>275</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'>276</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>277</span>
<span class='linenumber'>278</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="WHIT">
<span class='linenumber'>279</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.sel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">type.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">"control"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">item</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>280</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">parentElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>281</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>282</span>
<span class='linenumber'>283</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="WHIT">
<span class='linenumber'>284</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>285</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rng.duplicate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>286</span> </span><span class="NAME">dup.collapse</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>287</span>
<span class='linenumber'>288</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</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">dup.parentElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>289</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">result.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="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">result.firstChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>290</span>
<span class='linenumber'>291</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>292</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>293</span>
<span class='linenumber'>294</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="WHIT">
<span class='linenumber'>295</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>296</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">dup</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rng.duplicate</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>297</span> </span><span class="NAME">dup.collapse</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>298</span>
<span class='linenumber'>299</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">result</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">dup.parentElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</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">result.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="NAME">result</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">result.lastChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>301</span>
<span class='linenumber'>302</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">result</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>303</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>304</span>
<span class='linenumber'>305</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="WHIT">
<span class='linenumber'>306</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='linenumber'>307</span> </span><span class="NAME">this.getBlockElementAtSelectionStart</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>308</span> </span><span class="NAME">this.getBlockElementAtSelectionEnd</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>309</span> </span><span class="PUNC">]</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="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="WHIT">
<span class='linenumber'>313</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isCaretAtEmptyBlock</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">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>314</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.hasSelection</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>315</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.getCurrentBlockElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>316</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.pushMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>317</span>
<span class='linenumber'>318</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isTrue</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'>319</span> </span><span class="KEYW">while</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">this.getFirstChild</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'>320</span> </span><span class="KEYW">if</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">marker</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>321</span> </span><span class="NAME">isTrue</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'>322</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>323</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>324</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>325</span>
<span class='linenumber'>326</span> </span><span class="NAME">this.popMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>327</span>
<span class='linenumber'>328</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">isTrue</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>329</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>330</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="WHIT">
<span class='linenumber'>331</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isCaretAtEmptyBlock</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">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>332</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.hasSelection</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>333</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.getCurrentBlockElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>334</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.pushMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>335</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isTrue</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'>336</span> </span><span class="KEYW">while</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">this.getLastChild</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'>337</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nodeValue</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">node.nodeValue</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>338</span>
<span class='linenumber'>339</span> </span><span class="KEYW">if</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">marker</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>340</span> </span><span class="NAME">isTrue</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'>341</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>342</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="WHIT">
<span class='linenumber'>343</span> </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 class='linenumber'>344</span> </span><span class="NAME">node.previousSibling</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">marker</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
<span class='linenumber'>345</span> </span><span class="PUNC">(</span><span class="NAME">nodeValue</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="PUNC">(</span><span class="NAME">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><span class="NAME">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="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>346</span> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>347</span> </span><span class="NAME">isTrue</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'>348</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>349</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>350</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>351</span>
<span class='linenumber'>352</span> </span><span class="NAME">this.popMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>353</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">isTrue</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>354</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>355</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="WHIT">
<span class='linenumber'>356</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>357</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>358</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="WHIT">
<span class='linenumber'>359</span> </span><span class="NAME">bookmark.select</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>360</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>361</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>362</span> </span></pre></body></html>

View file

@ -0,0 +1,382 @@
<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> * RichDom for W3C Standard Engine
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.RichDomW3</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="NAME">xq.RichDom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 5</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="WHIT">
<span class='linenumber'> 6</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 7</span> </span><span class="NAME">rng.insertNode</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 8</span> </span><span class="NAME">rng.selectNode</span><span class="PUNC">(</span><span class="NAME">node</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 9</span> </span><span class="NAME">rng.collapse</span><span class="PUNC">(</span><span class="KEYW">false</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 10</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'> 11</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 12</span>
<span class='linenumber'> 13</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="WHIT">
<span class='linenumber'> 14</span> </span><span class="COMM">// TODO: do nothing</span><span class="WHIT">
<span class='linenumber'> 15</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 16</span>
<span class='linenumber'> 17</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="WHIT">
<span class='linenumber'> 18</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">element.ownerDocument.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'> 19</span> </span><span class="NAME">div.appendChild</span><span class="PUNC">(</span><span class="NAME">element.cloneNode</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 20</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">div.innerHTML</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 21</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 22</span>
<span class='linenumber'> 23</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="WHIT">
<span class='linenumber'> 24</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.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.isAtomic</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="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 25</span>
<span class='linenumber'> 26</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">element.firstChild</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'> 27</span> </span><span class="NAME">this.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">element.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 28</span> </span><span class="KEYW">else</span><span class="WHIT">
<span class='linenumber'> 29</span> </span><span class="NAME">element.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'> 30</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 31</span>
<span class='linenumber'> 32</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="WHIT">
<span class='linenumber'> 33</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.hasSelection</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 34</span>
<span class='linenumber'> 35</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.getCurrentElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 36</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">modified</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'> 37</span>
<span class='linenumber'> 38</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">block</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 39</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"InsertParagraph"</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">// check for atomic block element such as HR</span><span class="WHIT">
<span class='linenumber'> 42</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.getCurrentElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 43</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">newBlock.previousSibling</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 44</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextBlock</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'> 45</span> </span><span class="NAME">newBlock</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 46</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.isBlockOnlyContainer</span><span class="PUNC">(</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="WHIT">
<span class='linenumber'> 47</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 48</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">nextBlock</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 49</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">newBlock</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 50</span> </span><span class="NAME">this.placeCaretAtStartOf</span><span class="PUNC">(</span><span class="NAME">nextBlock</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 51</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 52</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 53</span> </span><span class="NAME">modified</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'> 54</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.hasMixedContents</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'> 55</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'> 56</span> </span><span class="NAME">modified</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'> 57</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 58</span>
<span class='linenumber'> 59</span> </span><span class="NAME">block</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'> 60</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlock</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">this._hasPlaceHolderAtEnd</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'> 61</span> </span><span class="NAME">block.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'> 62</span> </span><span class="NAME">modified</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'> 63</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 64</span>
<span class='linenumber'> 65</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlock</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'> 66</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">parentsLastChild</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.parentNode.lastChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 67</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isPlaceHolder</span><span class="PUNC">(</span><span class="NAME">parentsLastChild</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 68</span> </span><span class="NAME">this.deleteNode</span><span class="PUNC">(</span><span class="NAME">parentsLastChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 69</span> </span><span class="NAME">modified</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'> 70</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 71</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 72</span>
<span class='linenumber'> 73</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">modified</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 74</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 75</span>
<span class='linenumber'> 76</span> </span><span class="NAME">_hasPlaceHolderAtEnd</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'> 77</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">block.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="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 78</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.isPlaceHolder</span><span class="PUNC">(</span><span class="NAME">block.lastChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this._hasPlaceHolderAtEnd</span><span class="PUNC">(</span><span class="NAME">block.lastChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 79</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 80</span>
<span class='linenumber'> 81</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="WHIT">
<span class='linenumber'> 82</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"styleWithCSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"true"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 83</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"hilitecolor"</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'> 84</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"styleWithCSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"false"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 85</span>
<span class='linenumber'> 86</span> </span><span class="COMM">// 0. Save current selection</span><span class="WHIT">
<span class='linenumber'> 87</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bookmark</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.saveSelection</span><span class="PUNC">(</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="COMM">// 1. Get selected blocks</span><span class="WHIT">
<span class='linenumber'> 90</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.getSelectedBlockElements</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 91</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">blocks.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="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 92</span>
<span class='linenumber'> 93</span> </span><span class="COMM">// 2. Apply background-color to all adjust inline elements</span><span class="WHIT">
<span class='linenumber'> 94</span> </span><span class="COMM">// 3. Remove background-color from blocks</span><span class="WHIT">
<span class='linenumber'> 95</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">&lt;</span><span class="WHIT"> </span><span class="NAME">blocks.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'> 96</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">(</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="WHIT"> </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">blocks.length</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><span class="PUNC">!</span><span class="NAME">blocks</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">style.backgroundColor</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">continue</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 97</span>
<span class='linenumber'> 98</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spans</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">"SPAN"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blocks</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="WHIT">
<span class='linenumber'> 99</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</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">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">spans.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>100</span> </span><span class="NAME">spans</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">style.backgroundColor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">color</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>101</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>102</span> </span><span class="NAME">blocks</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">style.backgroundColor</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'>103</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>104</span>
<span class='linenumber'>105</span> </span><span class="COMM">// 4. Restore selection</span><span class="WHIT">
<span class='linenumber'>106</span> </span><span class="NAME">this.restoreSelection</span><span class="PUNC">(</span><span class="NAME">bookmark</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>107</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>108</span>
<span class='linenumber'>109</span>
<span class='linenumber'>110</span>
<span class='linenumber'>111</span>
<span class='linenumber'>112</span> </span><span class="COMM">//////</span><span class="WHIT">
<span class='linenumber'>113</span> </span><span class="COMM">// Commands</span><span class="WHIT">
<span class='linenumber'>114</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="WHIT">
<span class='linenumber'>115</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.doc.execCommand</span><span class="PUNC">(</span><span class="NAME">commandId</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">param</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>116</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>117</span>
<span class='linenumber'>118</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="WHIT">
<span class='linenumber'>119</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>120</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="NAME">rng.startContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rng.startOffset</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rng.endContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rng.endOffset</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>121</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>122</span>
<span class='linenumber'>123</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="WHIT">
<span class='linenumber'>124</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>125</span> </span><span class="NAME">rng.setStart</span><span class="PUNC">(</span><span class="NAME">bookmark</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bookmark</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'>126</span> </span><span class="NAME">rng.setEnd</span><span class="PUNC">(</span><span class="NAME">bookmark</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">bookmark</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>127</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>128</span>
<span class='linenumber'>129</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="WHIT">
<span class='linenumber'>130</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"RemoveFormat"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>131</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"Unlink"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>132</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>133</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="WHIT">
<span class='linenumber'>134</span> </span><span class="COMM">// Generate &lt;i> tag. It will be replaced with &lt;emphasis> tag during cleanup phase.</span><span class="WHIT">
<span class='linenumber'>135</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"styleWithCSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"false"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>136</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"italic"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>137</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>138</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="WHIT">
<span class='linenumber'>139</span> </span><span class="COMM">// Generate &lt;b> tag. It will be replaced with &lt;strong> tag during cleanup phase.</span><span class="WHIT">
<span class='linenumber'>140</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"styleWithCSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"false"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>141</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"bold"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>142</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>143</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="WHIT">
<span class='linenumber'>144</span> </span><span class="COMM">// Generate &lt;strike> tag. It will be replaced with &lt;style class="strike"> tag during cleanup phase.</span><span class="WHIT">
<span class='linenumber'>145</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"styleWithCSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"false"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>146</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"strikethrough"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>147</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>148</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="WHIT">
<span class='linenumber'>149</span> </span><span class="COMM">// Generate &lt;u> tag. It will be replaced with &lt;em class="underline"> tag during cleanup phase.</span><span class="WHIT">
<span class='linenumber'>150</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"styleWithCSS"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"false"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>151</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"underline"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>152</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>153</span> </span><span class="NAME">execHeading</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">level</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>154</span> </span><span class="NAME">this.execCommand</span><span class="PUNC">(</span><span class="STRN">"Heading"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"H"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">level</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>155</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>156</span>
<span class='linenumber'>157</span>
<span class='linenumber'>158</span>
<span class='linenumber'>159</span> </span><span class="COMM">//////</span><span class="WHIT">
<span class='linenumber'>160</span> </span><span class="COMM">// Focus/Caret/Selection</span><span class="WHIT">
<span class='linenumber'>161</span>
<span class='linenumber'>162</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="WHIT">
<span class='linenumber'>163</span> </span><span class="NAME">setTimeout</span><span class="PUNC">(</span><span class="NAME">this._focus.bind</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>164</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>165</span>
<span class='linenumber'>166</span> </span><span class="COMM">/** @private */</span><span class="WHIT">
<span class='linenumber'>167</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="WHIT">
<span class='linenumber'>168</span> </span><span class="NAME">this.win.focus</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>169</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.hasSelection</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.getCurrentElement</span><span class="PUNC">(</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">"HTML"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>170</span> </span><span class="NAME">this.selectElement</span><span class="PUNC">(</span><span class="NAME">this.doc.body.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>171</span> </span><span class="NAME">this.collapseSelection</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>172</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>173</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>174</span>
<span class='linenumber'>175</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="WHIT">
<span class='linenumber'>176</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.win.getSelection</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>177</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>178</span>
<span class='linenumber'>179</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="WHIT">
<span class='linenumber'>180</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>181</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">sel</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">sel.rangeCount</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><span class="KEYW">null</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">sel.getRangeAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>182</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>183</span>
<span class='linenumber'>184</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="WHIT">
<span class='linenumber'>185</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.sel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>186</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">sel</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">sel.isCollapsed</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>187</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>188</span>
<span class='linenumber'>189</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="WHIT">
<span class='linenumber'>190</span> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">deleteContents</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>191</span> </span><span class="NAME">this.sel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">collapseToStart</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>192</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>193</span>
<span class='linenumber'>194</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">element</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 yet"</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>195</span>
<span class='linenumber'>196</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="WHIT">
<span class='linenumber'>197</span> </span><span class="COMM">// required to avoid FF selection bug.</span><span class="WHIT">
<span class='linenumber'>198</span> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>199</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">xq.Browser.isMac</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">this.doc.execCommand</span><span class="PUNC">(</span><span class="STRN">"SelectAll"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>200</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">ignored</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>201</span>
<span class='linenumber'>202</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>203</span> </span><span class="NAME">rng.setStart</span><span class="PUNC">(</span><span class="NAME">start.firstChild</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>204</span> </span><span class="NAME">rng.setEnd</span><span class="PUNC">(</span><span class="NAME">end</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">end.childNodes.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>205</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>206</span>
<span class='linenumber'>207</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="WHIT">
<span class='linenumber'>208</span> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">collapse</span><span class="PUNC">(</span><span class="NAME">toStart</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>209</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>210</span>
<span class='linenumber'>211</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="WHIT">
<span class='linenumber'>212</span> </span><span class="KEYW">while</span><span class="PUNC">(</span><span class="NAME">this.tree.isBlock</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'>213</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'>214</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>215</span> </span><span class="NAME">this.selectElement</span><span class="PUNC">(</span><span class="NAME">element</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'>216</span> </span><span class="NAME">this.collapseSelection</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>217</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>218</span>
<span class='linenumber'>219</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="WHIT">
<span class='linenumber'>220</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">document.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'>221</span> </span><span class="NAME">container.appendChild</span><span class="PUNC">(</span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">cloneContents</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>222</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">container.innerHTML</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>223</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>224</span>
<span class='linenumber'>225</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="WHIT">
<span class='linenumber'>226</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>227</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>228</span>
<span class='linenumber'>229</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="WHIT">
<span class='linenumber'>230</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">element.id</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">element.className</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">element.style.cssText</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>231</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>232</span>
<span class='linenumber'>233</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="WHIT">
<span class='linenumber'>234</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="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>235</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'>236</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">&lt;</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'>237</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.isPlaceHolder</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">this.isEmptyTextNode</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><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>238</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>239</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'>240</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>241</span>
<span class='linenumber'>242</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="WHIT">
<span class='linenumber'>243</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="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="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>244</span>
<span class='linenumber'>245</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="NAME">reverse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>246</span>
<span class='linenumber'>247</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">&lt;</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'>248</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">this.isPlaceHolder</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="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </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'>249</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>250</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'>251</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>252</span>
<span class='linenumber'>253</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="WHIT">
<span class='linenumber'>254</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>255</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">rng</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'>256</span>
<span class='linenumber'>257</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">rng.startContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>258</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">container.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">container.parentNode</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>259</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>260</span>
<span class='linenumber'>261</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="WHIT">
<span class='linenumber'>262</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">this.getBlockElementAtSelectionStart</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>263</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">this.getBlockElementAtSelectionEnd</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>264</span>
<span class='linenumber'>265</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">reversed</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'>266</span>
<span class='linenumber'>267</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">naturalOrder</span><span class="WHIT"> </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">end</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.tree.checkTargetBackward</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><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>268</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">temp</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'>269</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="PUNC">;</span><span class="WHIT">
<span class='linenumber'>270</span> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">temp</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>271</span>
<span class='linenumber'>272</span> </span><span class="NAME">reversed</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'>273</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>274</span>
<span class='linenumber'>275</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">ignoreEmptyEdges</span><span class="WHIT"> </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">end</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>276</span> </span><span class="COMM">// TODO - Firefox sometimes selects one more block.</span><span class="WHIT">
<span class='linenumber'>277</span> </span><span class="COMM">/*
<span class='linenumber'>278</span>
<span class='linenumber'>279</span> var sel = this.sel();
<span class='linenumber'>280</span> if(reversed) {
<span class='linenumber'>281</span> if(sel.focusNode.nodeType == 1) start = start.nextSibling;
<span class='linenumber'>282</span> if(sel.anchorNode.nodeType == 3 && sel.focusOffset == 0) end = end.previousSibling;
<span class='linenumber'>283</span> } else {
<span class='linenumber'>284</span> if(sel.anchorNode.nodeType == 1) start = start.nextSibling;
<span class='linenumber'>285</span> if(sel.focusNode.nodeType == 3 && sel.focusOffset == 0) end = end.previousSibling;
<span class='linenumber'>286</span> }
<span class='linenumber'>287</span> */</span><span class="WHIT">
<span class='linenumber'>288</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>289</span>
<span class='linenumber'>290</span> </span><span class="KEYW">return</span><span class="WHIT"> </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'>291</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>292</span>
<span class='linenumber'>293</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="WHIT">
<span class='linenumber'>294</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">this.sel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">anchorNode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>295</span>
<span class='linenumber'>296</span> </span><span class="COMM">// find bottom-most first block child</span><span class="WHIT">
<span class='linenumber'>297</span> </span><span class="KEYW">while</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="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">block.firstChild</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">block.firstChild</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>298</span> </span><span class="NAME">block</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'>299</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>300</span>
<span class='linenumber'>301</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'>302</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>303</span>
<span class='linenumber'>304</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="WHIT">
<span class='linenumber'>305</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">this.sel</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">focusNode</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="COMM">// find bottom-most last block child</span><span class="WHIT">
<span class='linenumber'>308</span> </span><span class="KEYW">while</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="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">block.lastChild</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">block.lastChild</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>309</span> </span><span class="NAME">block</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">block.lastChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>310</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>311</span>
<span class='linenumber'>312</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'>313</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>314</span>
<span class='linenumber'>315</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="WHIT">
<span class='linenumber'>316</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isCaretAtEmptyBlock</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">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>317</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.hasSelection</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>318</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>319</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.getCurrentBlockElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>320</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isTrue</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'>321</span>
<span class='linenumber'>322</span> </span><span class="KEYW">if</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">rng.startContainer</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">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.pushMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>324</span> </span><span class="KEYW">while</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">this.getFirstChild</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'>325</span> </span><span class="KEYW">if</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">marker</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>326</span> </span><span class="NAME">isTrue</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'>327</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>328</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>329</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>330</span> </span><span class="NAME">this.popMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>331</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'>332</span> </span><span class="KEYW">while</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">node.firstChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>333</span> </span><span class="KEYW">if</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">rng.startContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">rng.startOffset</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'>334</span> </span><span class="NAME">isTrue</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'>335</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>336</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>337</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>338</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>339</span>
<span class='linenumber'>340</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">isTrue</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>341</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>342</span>
<span class='linenumber'>343</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="WHIT">
<span class='linenumber'>344</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.isCaretAtEmptyBlock</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">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>345</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.hasSelection</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">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>346</span>
<span class='linenumber'>347</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rng</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rng</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>348</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.getCurrentBlockElement</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>349</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isTrue</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'>350</span>
<span class='linenumber'>351</span> </span><span class="KEYW">if</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">rng.startContainer</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>352</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.pushMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>353</span> </span><span class="KEYW">while</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">this.getLastChild</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'>354</span> </span><span class="KEYW">if</span><span class="WHIT"> </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="NAME">marker</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.isPlaceHolder</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.previousSibling</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">marker</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>355</span> </span><span class="NAME">isTrue</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'>356</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>357</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>358</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>359</span> </span><span class="NAME">this.popMarker</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>360</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'>361</span> </span><span class="KEYW">while</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">this.getLastChild</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'>362</span> </span><span class="KEYW">if</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">rng.endContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">rng.endContainer.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="PUNC">{</span><span class="WHIT">
<span class='linenumber'>363</span> </span><span class="NAME">isTrue</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'>364</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>365</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">node</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">rng.endContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">rng.endOffset</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">node.nodeValue.length</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>366</span> </span><span class="NAME">isTrue</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'>367</span> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>368</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>369</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>370</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>371</span>
<span class='linenumber'>372</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">isTrue</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>373</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>374</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>375</span> </span></pre></body></html>

View file

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

View file

@ -0,0 +1,209 @@
<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="NAME">xq.RichTable</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'> 2</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="NAME">rdom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">table</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 3</span> </span><span class="WHIT"> </span><span class="NAME">this.rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="WHIT"> </span><span class="NAME">this.table</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">table</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 5</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 6</span> </span><span class="NAME">insertNewRowAt</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tr</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'> 7</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">row</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rdom.createElement</span><span class="PUNC">(</span><span class="STRN">"TR"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 8</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cells</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">tr.cells</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 9</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">&lt;</span><span class="WHIT"> </span><span class="NAME">cells.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'> 10</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cell</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rdom.createElement</span><span class="PUNC">(</span><span class="NAME">cells</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 class='linenumber'> 11</span> </span><span class="NAME">this.rdom.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 12</span> </span><span class="NAME">row.appendChild</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 13</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 14</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.rdom.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">row</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tr</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'> 15</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 16</span> </span><span class="NAME">insertNewCellAt</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cell</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'> 17</span> </span><span class="COMM">// collect cells;</span><span class="WHIT">
<span class='linenumber'> 18</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cells</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'> 19</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getXIndexOf</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 20</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</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'> 21</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'> 22</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.getCellAt</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 23</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">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 24</span> </span><span class="NAME">cells.push</span><span class="PUNC">(</span><span class="NAME">cur</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 25</span> </span><span class="NAME">y</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 26</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 27</span>
<span class='linenumber'> 28</span> </span><span class="COMM">// insert new cells</span><span class="WHIT">
<span class='linenumber'> 29</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">&lt;</span><span class="WHIT"> </span><span class="NAME">cells.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'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cell</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.rdom.createElement</span><span class="PUNC">(</span><span class="NAME">cells</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 class='linenumber'> 31</span> </span><span class="NAME">this.rdom.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 32</span> </span><span class="NAME">this.rdom.insertNodeAt</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cells</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">where</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 33</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 34</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 35</span> </span><span class="NAME">deleteRow</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">tr</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 36</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.rdom.removeBlock</span><span class="PUNC">(</span><span class="NAME">tr</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 37</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 38</span> </span><span class="NAME">deleteCell</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 39</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">cell.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">cell.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 40</span> </span><span class="NAME">this.rdom.deleteNode</span><span class="PUNC">(</span><span class="NAME">this.table</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 41</span> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 42</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 43</span>
<span class='linenumber'> 44</span> </span><span class="COMM">// collect cells;</span><span class="WHIT">
<span class='linenumber'> 45</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cells</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'> 46</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getXIndexOf</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 47</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</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'> 48</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'> 49</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.getCellAt</span><span class="PUNC">(</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 50</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">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 51</span> </span><span class="NAME">cells.push</span><span class="PUNC">(</span><span class="NAME">cur</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 52</span> </span><span class="NAME">y</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 53</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 54</span>
<span class='linenumber'> 55</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">&lt;</span><span class="WHIT"> </span><span class="NAME">cells.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'> 56</span> </span><span class="NAME">this.rdom.deleteNode</span><span class="PUNC">(</span><span class="NAME">cells</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'> 57</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 58</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 59</span> </span><span class="NAME">getPreviousCellOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 60</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">cell.previousSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cell.previousSibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 61</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">adjRow</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPreviousRowOf</span><span class="PUNC">(</span><span class="NAME">cell.parentNode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 62</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">adjRow</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">adjRow.lastChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 63</span> </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'> 64</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 65</span> </span><span class="WHIT"> </span><span class="NAME">getNextCellOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 66</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">cell.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">cell.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 67</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">adjRow</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getNextRowOf</span><span class="PUNC">(</span><span class="NAME">cell.parentNode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 68</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">adjRow</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">adjRow.firstChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 69</span> </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'> 70</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 71</span> </span><span class="WHIT"> </span><span class="NAME">getPreviousRowOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">row</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 72</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">row.previousSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">row.previousSibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 73</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rowContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">row.parentNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">rowContainer.previousSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">rowContainer.previousSibling.lastChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rowContainer.previousSibling.lastChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 75</span> </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'> 76</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 77</span> </span><span class="WHIT"> </span><span class="NAME">getNextRowOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">row</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 78</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">row.nextSibling</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">row.nextSibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 79</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rowContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">row.parentNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 80</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">rowContainer.nextSibling</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">rowContainer.nextSibling.firstChild</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rowContainer.nextSibling.firstChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 81</span> </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'> 82</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 83</span> </span><span class="WHIT"> </span><span class="NAME">getAboveCellOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 84</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">row</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getPreviousRowOf</span><span class="PUNC">(</span><span class="NAME">cell.parentNode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 85</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">row</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'> 86</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'> 87</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getXIndexOf</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 88</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">row.cells</span><span class="PUNC">[</span><span class="NAME">x</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 89</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 90</span> </span><span class="WHIT"> </span><span class="NAME">getBelowCellOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 91</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">row</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getNextRowOf</span><span class="PUNC">(</span><span class="NAME">cell.parentNode</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 92</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">row</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'> 93</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'> 94</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getXIndexOf</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 95</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">row.cells</span><span class="PUNC">[</span><span class="NAME">x</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 96</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 97</span> </span><span class="WHIT"> </span><span class="NAME">getXIndexOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 98</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">row</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cell.parentNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 99</span> </span><span class="WHIT"> </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">&lt;</span><span class="WHIT"> </span><span class="NAME">row.cells.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'>100</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">row.cells</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">cell</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>101</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>102</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>103</span> </span><span class="WHIT"> </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="WHIT">
<span class='linenumber'>104</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>105</span> </span><span class="WHIT"> </span><span class="NAME">getYIndexOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>106</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</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 class='linenumber'>107</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>108</span> </span><span class="WHIT"> </span><span class="COMM">// find y</span><span class="WHIT">
<span class='linenumber'>109</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">group</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">row.parentNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>110</span> </span><span class="WHIT"> </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">&lt;</span><span class="NAME">group.rows.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'>111</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">group.rows</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">row</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>112</span> </span><span class="WHIT"> </span><span class="NAME">y</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'>113</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>114</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>115</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>116</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.hasHeadingAtTop</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">group.nodeName</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"TBODY"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">y</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 class='linenumber'>117</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>118</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>119</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>120</span> </span><span class="WHIT"> </span><span class="COMM">/**
<span class='linenumber'>121</span> * TODO: Not used. Delete or not?
<span class='linenumber'>122</span> */</span><span class="WHIT">
<span class='linenumber'>123</span> </span><span class="WHIT"> </span><span class="NAME">getLocationOf</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>124</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">x</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getXIndexOf</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>125</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">y</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getYIndexOf</span><span class="PUNC">(</span><span class="NAME">cell</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>126</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="NAME">x</span><span class="PUNC">:</span><span class="NAME">x</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">y</span><span class="PUNC">:</span><span class="NAME">y</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>127</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>128</span> </span><span class="WHIT"> </span><span class="NAME">getCellAt</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">col</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">row</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">row</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getRowAt</span><span class="PUNC">(</span><span class="NAME">row</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>130</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">row</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">row.cells.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">col</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">row.cells</span><span class="PUNC">[</span><span class="NAME">col</span><span class="PUNC">]</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'>131</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>132</span> </span><span class="WHIT"> </span><span class="NAME">getRowAt</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">index</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>133</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.hasHeadingAtTop</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'>134</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">index</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">this.table.tHead.rows</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="NAME">this.table.tBodies</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rows</span><span class="PUNC">[</span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>135</span> </span><span class="WHIT"> </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'>136</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rows</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.table.tBodies</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rows</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>137</span> </span><span class="KEYW">return</span><span class="WHIT"> </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="NAME">index</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">rows</span><span class="PUNC">[</span><span class="NAME">index</span><span class="PUNC">]</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'>138</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>139</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>140</span> </span><span class="WHIT"> </span><span class="NAME">getDom</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'>141</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.table</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>142</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>143</span> </span><span class="WHIT"> </span><span class="NAME">hasHeadingAtTop</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'>144</span> </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="NAME">this.table.tHead</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.table.tHead.rows</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 class='linenumber'>145</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>146</span> </span><span class="WHIT"> </span><span class="NAME">hasHeadingAtLeft</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'>147</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.table.tBodies</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">rows</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">cells</span><span class="PUNC">[</span><span class="NUMB">0</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">"TH"</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>148</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>149</span> </span><span class="WHIT"> </span><span class="NAME">correctEmptyCells</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'>150</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">cells</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">this.table.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">"TH"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>151</span> </span><span class="WHIT"> </span><span class="NAME">cells.push</span><span class="PUNC">(</span><span class="NAME">$A</span><span class="PUNC">(</span><span class="NAME">this.table.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">"TD"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>152</span> </span><span class="WHIT"> </span><span class="NAME">cells</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">cells.flatten</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>153</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>154</span> </span><span class="WHIT"> </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">&lt;</span><span class="WHIT"> </span><span class="NAME">cells.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'>155</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.rdom.isEmptyBlock</span><span class="PUNC">(</span><span class="NAME">cells</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="NAME">this.rdom.correctEmptyElement</span><span class="PUNC">(</span><span class="NAME">cells</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>156</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>157</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>158</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>159</span> </span><span class="WHIT">
<span class='linenumber'>160</span> </span><span class="NAME">xq.RichTable.create</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">rdom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">cols</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">rows</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">headerPositions</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>161</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"t"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"tl"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"lt"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">headerPositions</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">headingAtTop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT">
<span class='linenumber'>162</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"l"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"tl"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"lt"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">headerPositions</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">headingAtLeft</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT">
<span class='linenumber'>163</span>
<span class='linenumber'>164</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sb</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='linenumber'>165</span> </span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;table class="datatable">'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>166</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>167</span> </span><span class="WHIT"> </span><span class="COMM">// thead</span><span class="WHIT">
<span class='linenumber'>168</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">headingAtTop</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>169</span> </span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;thead>&lt;tr>'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>170</span> </span><span class="WHIT"> </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">&lt;</span><span class="WHIT"> </span><span class="NAME">cols</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="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;th>&lt;/th>'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>171</span> </span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;/tr>&lt;/thead>'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>172</span> </span><span class="WHIT"> </span><span class="NAME">rows</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT">
<span class='linenumber'>173</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>174</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>175</span> </span><span class="WHIT"> </span><span class="COMM">// tbody</span><span class="WHIT">
<span class='linenumber'>176</span> </span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;tbody>'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>177</span> </span><span class="WHIT"> </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">&lt;</span><span class="WHIT"> </span><span class="NAME">rows</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'>178</span> </span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;tr>'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>179</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>180</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</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">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">cols</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>181</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">headingAtLeft</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">j</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'>182</span> </span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;th>&lt;/th>'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>183</span> </span><span class="WHIT"> </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'>184</span> </span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;td>&lt;/td>'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>185</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>186</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>187</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>188</span> </span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;/tr>'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>189</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>190</span> </span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;/tbody>'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>191</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>192</span> </span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="STRN">'&lt;/table>'</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'>193</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>194</span> </span><span class="WHIT"> </span><span class="COMM">// create DOM element</span><span class="WHIT">
<span class='linenumber'>195</span> </span><span class="WHIT"> </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">rdom.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'>196</span> </span><span class="WHIT"> </span><span class="NAME">container.innerHTML</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sb.join</span><span class="PUNC">(</span><span class="STRN">""</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>197</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='linenumber'>198</span> </span><span class="WHIT"> </span><span class="COMM">// correct empty cells and return</span><span class="WHIT">
<span class='linenumber'>199</span> </span><span class="WHIT"> </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="NAME">rdom</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">container.firstChild</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>200</span> </span><span class="NAME">rtable.correctEmptyCells</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>201</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">rtable</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>202</span> </span><span class="PUNC">}</span></pre></body></html>

View file

@ -0,0 +1,135 @@
<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="NAME">xq.Shortcut</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'> 2</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="NAME">keymapOrExpression</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 3</span> </span><span class="NAME">this.keymap</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">keymapOrExpression</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"string"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.Shortcut.interprete</span><span class="PUNC">(</span><span class="NAME">keymapOrExpression</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">keymap</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='linenumber'> 5</span> </span><span class="NAME">keymapOrExpression</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 6</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 7</span> </span><span class="NAME">matches</span><span class="PUNC">:</span><span class="WHIT"> </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'> 8</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">which</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.Browser.isGecko</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">xq.Browser.isMac</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">e.keyCode</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">e.charCode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">e.keyCode</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 9</span>
<span class='linenumber'> 10</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keyMatches</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='linenumber'> 11</span> </span><span class="PUNC">(</span><span class="NAME">this.keymap.which</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">which</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
<span class='linenumber'> 12</span> </span><span class="PUNC">(</span><span class="NAME">this.keymap.which</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">which</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">25</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 25 is SPACE in Type-3 keyboard.</span><span class="WHIT">
<span class='linenumber'> 13</span>
<span class='linenumber'> 14</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">e.metaKey</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">e.metaKey</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'> 15</span>
<span class='linenumber'> 16</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">modifierMatches</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='linenumber'> 17</span> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.keymap.shiftKey</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.keymap.shiftKey</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">e.shiftKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
<span class='linenumber'> 18</span> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.keymap.altKey</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.keymap.altKey</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">e.altKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
<span class='linenumber'> 19</span> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.keymap.ctrlKey</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.keymap.ctrlKey</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">e.ctrlKey</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
<span class='linenumber'> 20</span> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">this.keymap.metaKey</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">this.keymap.metaKey</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">e.metaKey</span><span class="PUNC">)</span><span class="WHIT">
<span class='linenumber'> 21</span>
<span class='linenumber'> 22</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">modifierMatches</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">keyMatches</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 23</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 24</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 25</span>
<span class='linenumber'> 26</span> </span><span class="NAME">xq.Shortcut.interprete</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">expression</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 27</span> </span><span class="NAME">expression</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">expression.toUpperCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 28</span>
<span class='linenumber'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">which</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.Shortcut._interpreteWhich</span><span class="PUNC">(</span><span class="NAME">expression.split</span><span class="PUNC">(</span><span class="STRN">"+"</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">pop</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 30</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ctrlKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.Shortcut._interpreteModifier</span><span class="PUNC">(</span><span class="NAME">expression</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"CTRL"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 31</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">altKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.Shortcut._interpreteModifier</span><span class="PUNC">(</span><span class="NAME">expression</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"ALT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">shiftKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.Shortcut._interpreteModifier</span><span class="PUNC">(</span><span class="NAME">expression</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"SHIFT"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 33</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">metaKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.Shortcut._interpreteModifier</span><span class="PUNC">(</span><span class="NAME">expression</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"META"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 34</span>
<span class='linenumber'> 35</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">keymap</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'> 36</span>
<span class='linenumber'> 37</span> </span><span class="NAME">keymap.which</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">which</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 38</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">ctrlKey</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">keymap.ctrlKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">ctrlKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 39</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">altKey</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">keymap.altKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">altKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 40</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">shiftKey</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">keymap.shiftKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">shiftKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 41</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">metaKey</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">keymap.metaKey</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">metaKey</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 42</span>
<span class='linenumber'> 43</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">xq.Shortcut</span><span class="PUNC">(</span><span class="NAME">keymap</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 44</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 45</span>
<span class='linenumber'> 46</span> </span><span class="NAME">xq.Shortcut._interpreteModifier</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">expression</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">modifierName</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 47</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">expression.match</span><span class="PUNC">(</span><span class="STRN">"\\("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">modifierName</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'> 48</span> </span><span class="NAME">undefined</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='linenumber'> 49</span> </span><span class="NAME">expression.match</span><span class="PUNC">(</span><span class="NAME">modifierName</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT">
<span class='linenumber'> 50</span> </span><span class="KEYW">true</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'> 51</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 52</span> </span><span class="NAME">xq.Shortcut._interpreteWhich</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">keyName</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 53</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">which</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">keyName.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'> 54</span> </span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">xq.Browser.isMac</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">xq.Browser.isGecko</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="STRN">"0_"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyName.toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">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="NAME">keyName.charCodeAt</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 class='linenumber'> 55</span> </span><span class="NAME">xq.Shortcut._keyNames</span><span class="PUNC">[</span><span class="NAME">keyName</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 56</span>
<span class='linenumber'> 57</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">which</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">"undefined"</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">"Unknown special key name: ["</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">keyName</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"]"</span><span class="WHIT">
<span class='linenumber'> 58</span>
<span class='linenumber'> 59</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">which</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 60</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 61</span> </span><span class="NAME">xq.Shortcut._keyNames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='linenumber'> 62</span> </span><span class="NAME">xq.Browser.isMac</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">xq.Browser.isGecko</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT">
<span class='linenumber'> 63</span> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 64</span> </span><span class="NAME">BACKSPACE</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"8_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 65</span> </span><span class="NAME">TAB</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"9_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 66</span> </span><span class="NAME">RETURN</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"13_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 67</span> </span><span class="NAME">ENTER</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"13_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 68</span> </span><span class="NAME">ESC</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"27_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 69</span> </span><span class="NAME">SPACE</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"0_32"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 70</span> </span><span class="NAME">LEFT</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"37_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 71</span> </span><span class="NAME">UP</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"38_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 72</span> </span><span class="NAME">RIGHT</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"39_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 73</span> </span><span class="NAME">DOWN</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"40_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 74</span> </span><span class="NAME">DELETE</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"46_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 75</span> </span><span class="NAME">HOME</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"36_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 76</span> </span><span class="NAME">END</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"35_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 77</span> </span><span class="NAME">PAGEUP</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"33_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 78</span> </span><span class="NAME">PAGEDOWN</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"34_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 79</span> </span><span class="NAME">COMMA</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"0_44"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 80</span> </span><span class="NAME">HYPHEN</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"0_45"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 81</span> </span><span class="NAME">EQUAL</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"0_61"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 82</span> </span><span class="NAME">PERIOD</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"0_46"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 83</span> </span><span class="NAME">SLASH</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"0_47"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 84</span> </span><span class="NAME">F1</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"112_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 85</span> </span><span class="NAME">F2</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"113_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 86</span> </span><span class="NAME">F3</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"114_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 87</span> </span><span class="NAME">F4</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"115_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 88</span> </span><span class="NAME">F5</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"116_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 89</span> </span><span class="NAME">F6</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"117_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 90</span> </span><span class="NAME">F7</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"118_0"</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 91</span> </span><span class="NAME">F8</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">"119_0"</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="WHIT">
<span class='linenumber'> 95</span> </span><span class="NAME">BACKSPACE</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">8</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 96</span> </span><span class="NAME">TAB</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">9</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 97</span> </span><span class="NAME">RETURN</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">13</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 98</span> </span><span class="NAME">ENTER</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">13</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 99</span> </span><span class="NAME">ESC</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">27</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>100</span> </span><span class="NAME">SPACE</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">32</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>101</span> </span><span class="NAME">LEFT</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">37</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>102</span> </span><span class="NAME">UP</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">38</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>103</span> </span><span class="NAME">RIGHT</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">39</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>104</span> </span><span class="NAME">DOWN</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">40</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>105</span> </span><span class="NAME">DELETE</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">46</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>106</span> </span><span class="NAME">HOME</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">36</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>107</span> </span><span class="NAME">END</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">35</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>108</span> </span><span class="NAME">PAGEUP</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">33</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>109</span> </span><span class="NAME">PAGEDOWN</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">34</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>110</span> </span><span class="NAME">COMMA</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">188</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>111</span> </span><span class="NAME">HYPHEN</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">xq.Browser.isTrident</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">189</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">109</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>112</span> </span><span class="NAME">EQUAL</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">xq.Browser.isTrident</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NUMB">187</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">61</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>113</span> </span><span class="NAME">PERIOD</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">190</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>114</span> </span><span class="NAME">SLASH</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NUMB">191</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>115</span> </span><span class="NAME">F1</span><span class="PUNC">:</span><span class="NUMB">112</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>116</span> </span><span class="NAME">F2</span><span class="PUNC">:</span><span class="NUMB">113</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>117</span> </span><span class="NAME">F3</span><span class="PUNC">:</span><span class="NUMB">114</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>118</span> </span><span class="NAME">F4</span><span class="PUNC">:</span><span class="NUMB">115</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>119</span> </span><span class="NAME">F5</span><span class="PUNC">:</span><span class="NUMB">116</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>120</span> </span><span class="NAME">F6</span><span class="PUNC">:</span><span class="NUMB">117</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>121</span> </span><span class="NAME">F7</span><span class="PUNC">:</span><span class="NUMB">118</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>122</span> </span><span class="NAME">F8</span><span class="PUNC">:</span><span class="NUMB">119</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>123</span> </span><span class="NAME">F9</span><span class="PUNC">:</span><span class="NUMB">120</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>124</span> </span><span class="NAME">F10</span><span class="PUNC">:</span><span class="NUMB">121</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>125</span> </span><span class="NAME">F11</span><span class="PUNC">:</span><span class="NUMB">122</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>126</span> </span><span class="NAME">F12</span><span class="PUNC">:</span><span class="NUMB">123</span><span class="WHIT">
<span class='linenumber'>127</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>128</span> </span></pre></body></html>

View file

@ -0,0 +1,235 @@
<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> * Validates and invalidates designmode contents
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.Validator</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'> 5</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="NAME">curUrl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">urlValidationMode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedTags</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedAttrs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 6</span> </span><span class="NAME">this.allowedTags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">allowedTags</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'a'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'abbr'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'acronym'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'address'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'blockquote'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'br'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'caption'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'cite'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'code'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'dd'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'dfn'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'div'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'dl'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'dt'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'em'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'h1'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'h2'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'h3'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'h4'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'h5'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'h6'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'hr'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'img'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'kbd'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'li'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'ol'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'p'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'pre'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'q'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'samp'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'span'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'sup'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'sub'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'strong'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'table'</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="WHIT"> </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="WHIT"> </span><span class="STRN">'tr'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'ul'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'var'</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">join</span><span class="PUNC">(</span><span class="STRN">' '</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'> 7</span> </span><span class="NAME">this.allowedAttrs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">allowedAttrs</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="STRN">'alt'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'cite'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'class'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'datetime'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'height'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'href'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'id'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'rel'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'rev'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'src'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'style'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'title'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'width'</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">join</span><span class="PUNC">(</span><span class="STRN">' '</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'> 8</span>
<span class='linenumber'> 9</span> </span><span class="NAME">this.curUrl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">curUrl</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 10</span> </span><span class="NAME">this.curUrlParts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">curUrl</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">curUrl.parseURL</span><span class="PUNC">(</span><span class="PUNC">)</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'> 11</span> </span><span class="NAME">this.urlValidationMode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlValidationMode</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 12</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 13</span>
<span class='linenumber'> 14</span> </span><span class="COMM">/**
<span class='linenumber'> 15</span> * Perform validation on given element
<span class='linenumber'> 16</span> *
<span class='linenumber'> 17</span> * @param {Element} element Target element. It is not affected by validation.
<span class='linenumber'> 18</span> * @param {boolean} fullValidation Perform full validation. If you just want to use the result to assign innerHTML, set it false
<span class='linenumber'> 19</span> *
<span class='linenumber'> 20</span> * @returns {String} Validated HTML string
<span class='linenumber'> 21</span> */</span><span class="WHIT">
<span class='linenumber'> 22</span> </span><span class="NAME">validate</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">fullValidation</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'> 23</span>
<span class='linenumber'> 24</span> </span><span class="COMM">/**
<span class='linenumber'> 25</span> * Perform invalidation on given element to make the designmode works well.
<span class='linenumber'> 26</span> *
<span class='linenumber'> 27</span> * @param {Element} element Target element.
<span class='linenumber'> 28</span> * @returns {String} Invalidated HTML string
<span class='linenumber'> 29</span> */</span><span class="WHIT">
<span class='linenumber'> 30</span> </span><span class="NAME">invalidate</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'> 31</span>
<span class='linenumber'> 32</span> </span><span class="NAME">validateStrike</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 33</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="REGX">/&lt;strike(>|\s+[^>]*>)/ig</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"&lt;span class=\"strike\"$1"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 34</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="REGX">/&lt;\/strike>/ig</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"&lt;/span>"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 35</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 36</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 37</span>
<span class='linenumber'> 38</span> </span><span class="NAME">validateUnderline</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 39</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="REGX">/&lt;u(>|\s+[^>]*>)/ig</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"&lt;em class=\"underline\"$1"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 40</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="REGX">/&lt;\/u>/ig</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"&lt;/em>"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 41</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 42</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 43</span>
<span class='linenumber'> 44</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">content</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'> 45</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="STRN">"(&lt;/?)"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">from</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"(>|\\s+[^>]*>)"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"ig"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"$1"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">to</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">"$2"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 46</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 47</span>
<span class='linenumber'> 48</span> </span><span class="NAME">validateSelfClosingTags</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 49</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="REGX">/&lt;(br|hr|img)([^>]*?)>/img</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">tag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 50</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"&lt;"</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="NAME">attrs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">" />"</span><span class="WHIT">
<span class='linenumber'> 51</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 52</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 53</span>
<span class='linenumber'> 54</span> </span><span class="NAME">removeComments</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 55</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="REGX">/&lt;!--.*?-->/img</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 56</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 57</span>
<span class='linenumber'> 58</span> </span><span class="NAME">removeDangerousElements</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'> 59</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">scripts</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.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">'SCRIPT'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">reverse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 60</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">&lt;</span><span class="WHIT"> </span><span class="NAME">scripts.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'> 61</span> </span><span class="NAME">scripts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">parentNode.removeChild</span><span class="PUNC">(</span><span class="NAME">scripts</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'> 62</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 63</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 64</span>
<span class='linenumber'> 65</span> </span><span class="COMM">// TODO: very slow</span><span class="WHIT">
<span class='linenumber'> 66</span> </span><span class="NAME">applyWhitelist</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 67</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">allowedTags</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.allowedTags</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 68</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">allowedAttrs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.allowedAttrs</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 69</span>
<span class='linenumber'> 70</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="STRN">"(&lt;/?)([^>]+?)(>|\\s+([^>]*?)(\\s?/?)>)"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"g"</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">str</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">head</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">tail</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">selfClosing</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 71</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">allowedTags.indexOf</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="PUNC">-</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="STRN">''</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 72</span>
<span class='linenumber'> 73</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">attrs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 74</span> </span><span class="NAME">attrs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">attrs.replace</span><span class="PUNC">(</span><span class="REGX">/(^|\s")([^"=]+)(\s|$)/g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'$1$2="$2"$3'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// for IE</span><span class="WHIT">
<span class='linenumber'> 75</span>
<span class='linenumber'> 76</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">sb</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'> 77</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">attrs.match</span><span class="PUNC">(</span><span class="REGX">/([^=]+)="[^"]*?"/g</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 78</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">&lt;</span><span class="WHIT"> </span><span class="NAME">m.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'> 79</span> </span><span class="NAME">m</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">m</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">strip</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 80</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">split</span><span class="PUNC">(</span><span class="STRN">'='</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'> 81</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">allowedAttrs.indexOf</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="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">sb.push</span><span class="PUNC">(</span><span class="NAME">m</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'> 82</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 83</span> </span><span class="NAME">attrs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sb.join</span><span class="PUNC">(</span><span class="STRN">' '</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 84</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">attrs</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">attrs</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">attrs</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 85</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">head</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="NAME">attrs</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">selfClosing</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'> 86</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'> 87</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 88</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 89</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 90</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 91</span>
<span class='linenumber'> 92</span> </span><span class="NAME">makeUrlsRelative</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 93</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curUrl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.curUrl</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 94</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">urlParts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.curUrlParts</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 95</span>
<span class='linenumber'> 96</span> </span><span class="COMM">// 1. find attributes and...</span><span class="WHIT">
<span class='linenumber'> 97</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="REGX">/(&lt;\w+\s+)(\/|([^>]+?)(\/?))>/g</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">head</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ignored</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tail</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 98</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">attrs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 99</span> </span><span class="COMM">// 2. validate URL part</span><span class="WHIT">
<span class='linenumber'>100</span> </span><span class="NAME">attrs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">attrs.replace</span><span class="PUNC">(</span><span class="REGX">/(href|src)="([^"]+)"/g</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">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>101</span> </span><span class="COMM">// 3. first, make it absolute</span><span class="WHIT">
<span class='linenumber'>102</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">abs</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'>103</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">url.charAt</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="STRN">'#'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>104</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includeQuery</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>105</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">url.charAt</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="STRN">'?'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>106</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>107</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">url.charAt</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="STRN">'/'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>108</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includeHost</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>109</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">url.match</span><span class="PUNC">(</span><span class="REGX">/^\w+:\/\//</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>110</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>111</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'>112</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includeBase</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>113</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>114</span>
<span class='linenumber'>115</span> </span><span class="COMM">// 4. make it relative by removing same part</span><span class="WHIT">
<span class='linenumber'>116</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">abs</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>117</span>
<span class='linenumber'>118</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">abs.indexOf</span><span class="PUNC">(</span><span class="NAME">urlParts.includeQuery</span><span class="PUNC">)</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'>119</span> </span><span class="NAME">rel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">abs.substring</span><span class="PUNC">(</span><span class="NAME">urlParts.includeQuery.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>120</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">abs.indexOf</span><span class="PUNC">(</span><span class="NAME">urlParts.includePath</span><span class="PUNC">)</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'>121</span> </span><span class="NAME">rel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">abs.substring</span><span class="PUNC">(</span><span class="NAME">urlParts.includePath.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>122</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">abs.indexOf</span><span class="PUNC">(</span><span class="NAME">urlParts.includeBase</span><span class="PUNC">)</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'>123</span> </span><span class="NAME">rel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">abs.substring</span><span class="PUNC">(</span><span class="NAME">urlParts.includeBase.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>124</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">abs.indexOf</span><span class="PUNC">(</span><span class="NAME">urlParts.includeHost</span><span class="PUNC">)</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'>125</span> </span><span class="NAME">rel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">abs.substring</span><span class="PUNC">(</span><span class="NAME">urlParts.includeHost.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>126</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>127</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">rel</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">rel</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'>128</span>
<span class='linenumber'>129</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">name</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">rel</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'>130</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>131</span>
<span class='linenumber'>132</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">head</span><span class="WHIT"> </span><span class="PUNC">+</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">tail</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'>133</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'>134</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>135</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>136</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>137</span>
<span class='linenumber'>138</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>139</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>140</span>
<span class='linenumber'>141</span> </span><span class="NAME">makeUrlsHostRelative</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>142</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curUrl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.curUrl</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>143</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">urlParts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.curUrlParts</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>144</span>
<span class='linenumber'>145</span> </span><span class="COMM">// 1. find attributes and...</span><span class="WHIT">
<span class='linenumber'>146</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="REGX">/(&lt;\w+\s+)(\/|([^>]+?)(\/?))>/g</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">head</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ignored</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tail</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>147</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">attrs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>148</span> </span><span class="COMM">// 2. validate URL part</span><span class="WHIT">
<span class='linenumber'>149</span> </span><span class="NAME">attrs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">attrs.replace</span><span class="PUNC">(</span><span class="REGX">/(href|src)="([^"]+)"/g</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">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>150</span> </span><span class="COMM">// 3. first, make it absolute</span><span class="WHIT">
<span class='linenumber'>151</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">abs</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'>152</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">url.charAt</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="STRN">'#'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>153</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includeQuery</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>154</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">url.charAt</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="STRN">'?'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>155</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>156</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">url.charAt</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="STRN">'/'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>157</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includeHost</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>158</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">url.match</span><span class="PUNC">(</span><span class="REGX">/^\w+:\/\//</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>159</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>160</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'>161</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includeBase</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</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 class='linenumber'>164</span> </span><span class="COMM">// 4. make it relative by removing same part</span><span class="WHIT">
<span class='linenumber'>165</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">abs</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>166</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">abs.indexOf</span><span class="PUNC">(</span><span class="NAME">urlParts.includeHost</span><span class="PUNC">)</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'>167</span> </span><span class="NAME">rel</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">abs.substring</span><span class="PUNC">(</span><span class="NAME">urlParts.includeHost.length</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>168</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>169</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">rel</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">rel</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'>170</span>
<span class='linenumber'>171</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">name</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">rel</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'>172</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>173</span>
<span class='linenumber'>174</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">head</span><span class="WHIT"> </span><span class="PUNC">+</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">tail</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'>175</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'>176</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>177</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>178</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>179</span>
<span class='linenumber'>180</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</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="NAME">makeUrlsAbsolute</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>184</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">curUrl</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.curUrl</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>185</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">urlParts</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.curUrlParts</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>186</span>
<span class='linenumber'>187</span> </span><span class="COMM">// 1. find attributes and...</span><span class="WHIT">
<span class='linenumber'>188</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="REGX">/(&lt;\w+\s+)(\/|([^>]+?)(\/?))>/g</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">head</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ignored</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tail</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>189</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">attrs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>190</span> </span><span class="COMM">// 2. validate URL part</span><span class="WHIT">
<span class='linenumber'>191</span> </span><span class="NAME">attrs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">attrs.replace</span><span class="PUNC">(</span><span class="REGX">/(href|src)="([^"]+)"/g</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">name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>192</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">abs</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'>193</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">url.charAt</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="STRN">'#'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>194</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includeQuery</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>195</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">url.charAt</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="STRN">'?'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>196</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>197</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">url.charAt</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="STRN">'/'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>198</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includeHost</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>199</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">url.match</span><span class="PUNC">(</span><span class="REGX">/^\w+:\/\//</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>200</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>201</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'>202</span> </span><span class="NAME">abs</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">urlParts.includeBase</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>203</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>204</span>
<span class='linenumber'>205</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">name</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">abs</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'>206</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>207</span>
<span class='linenumber'>208</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">head</span><span class="WHIT"> </span><span class="PUNC">+</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">tail</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'>209</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'>210</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">str</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>211</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>212</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>213</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>214</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>215</span>
<span class='linenumber'>216</span> </span><span class="COMM">/**
<span class='linenumber'>217</span> * Creates and returns instance of browser specific implementation.
<span class='linenumber'>218</span> */</span><span class="WHIT">
<span class='linenumber'>219</span> </span><span class="NAME">xq.Validator.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="NAME">curUrl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">urlValidationMode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedTags</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedAttrs</span><span class="PUNC">)</span><span class="WHIT"> </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">xq.Browser.isTrident</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>221</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">xq.ValidatorTrident</span><span class="PUNC">(</span><span class="NAME">curUrl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">urlValidationMode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedTags</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedAttrs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>222</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'>223</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">xq.ValidatorWebkit</span><span class="PUNC">(</span><span class="NAME">curUrl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">urlValidationMode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedTags</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedAttrs</span><span class="PUNC">)</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="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">xq.ValidatorGecko</span><span class="PUNC">(</span><span class="NAME">curUrl</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">urlValidationMode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedTags</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">allowedAttrs</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>226</span> </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></pre></body></html>

View file

@ -0,0 +1,12 @@
<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> * Validator for Gecko Engine
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.ValidatorGecko</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="NAME">xq.ValidatorW3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 5</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span></pre></body></html>

View file

@ -0,0 +1,147 @@
<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> * Validator for Internet Explorer 6 and 7
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.ValidatorTrident</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="NAME">xq.Validator</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 5</span> </span><span class="NAME">validate</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">fullValidation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 6</span> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.cloneNode</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 7</span>
<span class='linenumber'> 8</span> </span><span class="NAME">this.removeDangerousElements</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 9</span> </span><span class="NAME">this.validateFontColor</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 10</span> </span><span class="NAME">this.validateBackgroundColor</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 11</span>
<span class='linenumber'> 12</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.innerHTML</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 13</span>
<span class='linenumber'> 14</span> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 15</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.validateStrike</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 16</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.validateUnderline</span><span class="PUNC">(</span><span class="NAME">content</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="KEYW">if</span><span class="PUNC">(</span><span class="NAME">fullValidation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.performFullValidation</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 19</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">ignored</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 20</span>
<span class='linenumber'> 21</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 22</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 23</span>
<span class='linenumber'> 24</span> </span><span class="NAME">invalidate</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'> 25</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.RichDom.createInstance</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 26</span> </span><span class="NAME">rdom.setRoot</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 27</span>
<span class='linenumber'> 28</span> </span><span class="NAME">this.invalidateFontColor</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 29</span> </span><span class="NAME">this.invalidateBackgroundColor</span><span class="PUNC">(</span><span class="NAME">element</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">// &lt;span class="strike"> -> &lt;strike></span><span class="WHIT">
<span class='linenumber'> 32</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">strikes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom.findByAttribute</span><span class="PUNC">(</span><span class="STRN">"className"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"strike"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 33</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">&lt;</span><span class="WHIT"> </span><span class="NAME">strikes.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'> 34</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="STRN">"SPAN"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">strikes</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">rdom.replaceTag</span><span class="PUNC">(</span><span class="STRN">"strike"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">strikes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">removeAttribute</span><span class="PUNC">(</span><span class="STRN">"className"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 35</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 36</span>
<span class='linenumber'> 37</span> </span><span class="COMM">// &lt;em|i class="underline"> -> &lt;u></span><span class="WHIT">
<span class='linenumber'> 38</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">underlines</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom.findByAttribute</span><span class="PUNC">(</span><span class="STRN">"className"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"underline"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 39</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">&lt;</span><span class="WHIT"> </span><span class="NAME">underlines.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'> 40</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"EM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"I"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">underlines</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="NAME">rdom.replaceTag</span><span class="PUNC">(</span><span class="STRN">"u"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">underlines</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">removeAttribute</span><span class="PUNC">(</span><span class="STRN">"className"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 41</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 42</span>
<span class='linenumber'> 43</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">innerHTML</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 44</span>
<span class='linenumber'> 45</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.removeComments</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 46</span>
<span class='linenumber'> 47</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 48</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 49</span>
<span class='linenumber'> 50</span> </span><span class="NAME">performFullValidation</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 51</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.lowerTagNamesAndUniformizeQuotation</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 52</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.validateSelfClosingTags</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 53</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.applyWhitelist</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 54</span>
<span class='linenumber'> 55</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.urlValidationMode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'relative'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 56</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.makeUrlsRelative</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 57</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.urlValidationMode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'host_relative'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 58</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.makeUrlsHostRelative</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 59</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.urlValidationMode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'absolute'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 60</span> </span><span class="COMM">// Trident always use absolute URL so we don't need to do anything.</span><span class="WHIT">
<span class='linenumber'> 61</span> </span><span class="COMM">//</span><span class="WHIT">
<span class='linenumber'> 62</span> </span><span class="COMM">// content = this.makeUrlsAbsolute(content);</span><span class="WHIT">
<span class='linenumber'> 63</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 64</span>
<span class='linenumber'> 65</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 66</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 67</span>
<span class='linenumber'> 68</span> </span><span class="NAME">validateFontColor</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'> 69</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.RichDom.createInstance</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 70</span> </span><span class="NAME">rdom.setRoot</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 71</span>
<span class='linenumber'> 72</span> </span><span class="COMM">// It should be reversed to deal with nested elements</span><span class="WHIT">
<span class='linenumber'> 73</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fonts</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.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">'FONT'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">reverse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 74</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">&lt;</span><span class="WHIT"> </span><span class="NAME">fonts.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'> 75</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">font</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fonts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 76</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">font.getAttribute</span><span class="PUNC">(</span><span class="STRN">'color'</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">if</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'> 79</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">span</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom.replaceTag</span><span class="PUNC">(</span><span class="STRN">"span"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">font</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 80</span> </span><span class="NAME">span.removeAttribute</span><span class="PUNC">(</span><span class="STRN">'color'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 81</span> </span><span class="NAME">span.style.color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">color</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 82</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 83</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 84</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 85</span>
<span class='linenumber'> 86</span> </span><span class="NAME">invalidateFontColor</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'> 87</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.RichDom.createInstance</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 88</span> </span><span class="NAME">rdom.setRoot</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 89</span>
<span class='linenumber'> 90</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spans</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.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">'SPAN'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">reverse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 91</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">&lt;</span><span class="WHIT"> </span><span class="NAME">spans.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'> 92</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">span</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">spans</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 93</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">span.style.color</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 94</span>
<span class='linenumber'> 95</span> </span><span class="KEYW">if</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'> 96</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">font</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom.replaceTag</span><span class="PUNC">(</span><span class="STRN">"font"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">span</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 97</span> </span><span class="NAME">font.style.color</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'> 98</span> </span><span class="NAME">font.setAttribute</span><span class="PUNC">(</span><span class="STRN">'color'</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'> 99</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>100</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>101</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>102</span>
<span class='linenumber'>103</span> </span><span class="NAME">validateBackgroundColor</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'>104</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.RichDom.createInstance</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>105</span> </span><span class="NAME">rdom.setRoot</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>106</span>
<span class='linenumber'>107</span> </span><span class="COMM">// It should be reversed to deal with nested elements</span><span class="WHIT">
<span class='linenumber'>108</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fonts</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.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">'FONT'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">reverse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>109</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">&lt;</span><span class="WHIT"> </span><span class="NAME">fonts.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'>110</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">fonts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">style.color</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">fonts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">style.backgroundColor</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">rdom.replaceTag</span><span class="PUNC">(</span><span class="STRN">"span"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fonts</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'>111</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>112</span> </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="NAME">invalidateBackgroundColor</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'>115</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.RichDom.createInstance</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>116</span> </span><span class="NAME">rdom.setRoot</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>117</span>
<span class='linenumber'>118</span> </span><span class="COMM">// It should be reversed to deal with nested elements</span><span class="WHIT">
<span class='linenumber'>119</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">spans</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.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">'SPAN'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">reverse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>120</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">&lt;</span><span class="WHIT"> </span><span class="NAME">spans.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'>121</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">spans</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">style.color</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">spans</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">style.backgroundColor</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">rdom.replaceTag</span><span class="PUNC">(</span><span class="STRN">"font"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">spans</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'>122</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>123</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>124</span>
<span class='linenumber'>125</span> </span><span class="NAME">lowerTagNamesAndUniformizeQuotation</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>126</span> </span><span class="COMM">// Uniformize quotation, turn tag names and attribute names into lower case</span><span class="WHIT">
<span class='linenumber'>127</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="REGX">/&lt;(\/?)(\w+)([^>]*?)>/img</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">closingMark</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">tagName</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">attrs</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>128</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">"&lt;"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">closingMark</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">tagName.toLowerCase</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.correctHtmlAttrQuotation</span><span class="PUNC">(</span><span class="NAME">attrs</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'>129</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'>130</span>
<span class='linenumber'>131</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>132</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>133</span>
<span class='linenumber'>134</span> </span><span class="NAME">correctHtmlAttrQuotation</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'>135</span> </span><span class="NAME">html</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">html.replace</span><span class="PUNC">(</span><span class="REGX">/\s(\w+?)=\s+"([^"]+)"/mg</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str</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="KEYW">return</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name.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">'='</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">value</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'"'</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>136</span> </span><span class="NAME">html</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">html.replace</span><span class="PUNC">(</span><span class="REGX">/\s(\w+?)=([^ "]+)/mg</span><span class="PUNC">,</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">str</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="KEYW">return</span><span class="WHIT"> </span><span class="STRN">" "</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name.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">'='</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">value</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'"'</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>137</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">html</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>138</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>139</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>140</span> </span></pre></body></html>

View file

@ -0,0 +1,112 @@
<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> * Validator for W3C Standard Engine
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.ValidatorW3</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="NAME">xq.Validator</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 5</span> </span><span class="NAME">validate</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">fullValidation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 6</span> </span><span class="NAME">element</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.cloneNode</span><span class="PUNC">(</span><span class="KEYW">true</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 7</span>
<span class='linenumber'> 8</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.RichDom.createInstance</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 9</span> </span><span class="NAME">rdom.setRoot</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 10</span> </span><span class="NAME">rdom.removePlaceHoldersAndEmptyNodes</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 11</span> </span><span class="NAME">this.removeDangerousElements</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 12</span> </span><span class="NAME">this.validateFontColor</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 13</span>
<span class='linenumber'> 14</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">element.innerHTML</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 15</span>
<span class='linenumber'> 16</span> </span><span class="KEYW">try</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 17</span> </span><span class="NAME">content</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">content</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"b"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"strong"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 18</span> </span><span class="NAME">content</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">content</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"i"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"em"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 19</span>
<span class='linenumber'> 20</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.validateStrike</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 21</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.validateUnderline</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 22</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.addNbspToEmptyBlocks</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 23</span>
<span class='linenumber'> 24</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">fullValidation</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.performFullValidation</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 25</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">ignored</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 26</span>
<span class='linenumber'> 27</span> </span><span class="COMM">// insert newline between block-tags</span><span class="WHIT">
<span class='linenumber'> 28</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">rdom.tree.getBlockTags</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">join</span><span class="PUNC">(</span><span class="STRN">"|"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 29</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">regex</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">RegExp</span><span class="PUNC">(</span><span class="STRN">"&lt;/("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")>([^\n])"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"img"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 30</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="NAME">regex</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'&lt;/$1>\n$2'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 31</span>
<span class='linenumber'> 32</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 33</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 34</span> </span><span class="NAME">invalidate</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'> 35</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.RichDom.createInstance</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 36</span> </span><span class="NAME">rdom.setRoot</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 37</span>
<span class='linenumber'> 38</span> </span><span class="COMM">// &lt;span class="strike"> -> &lt;strike></span><span class="WHIT">
<span class='linenumber'> 39</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">strikes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom.findByAttribute</span><span class="PUNC">(</span><span class="STRN">"class"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"strike"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 40</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">&lt;</span><span class="WHIT"> </span><span class="NAME">strikes.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'> 41</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="STRN">"SPAN"</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">strikes</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">rdom.replaceTag</span><span class="PUNC">(</span><span class="STRN">"strike"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">strikes</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">removeAttribute</span><span class="PUNC">(</span><span class="STRN">"class"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 42</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 43</span>
<span class='linenumber'> 44</span> </span><span class="COMM">// &lt;em|i class="underline"> -> &lt;u></span><span class="WHIT">
<span class='linenumber'> 45</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">underlines</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom.findByAttribute</span><span class="PUNC">(</span><span class="STRN">"class"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"underline"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 46</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">&lt;</span><span class="WHIT"> </span><span class="NAME">underlines.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'> 47</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">[</span><span class="STRN">"EM"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"I"</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">include</span><span class="PUNC">(</span><span class="NAME">underlines</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="NAME">rdom.replaceTag</span><span class="PUNC">(</span><span class="STRN">"u"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">underlines</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">removeAttribute</span><span class="PUNC">(</span><span class="STRN">"class"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 48</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 49</span>
<span class='linenumber'> 50</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom.getRoot</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">innerHTML</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 51</span>
<span class='linenumber'> 52</span> </span><span class="NAME">content</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">content</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"strong"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"b"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 53</span> </span><span class="NAME">content</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">content</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"em"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">"i"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 54</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.removeComments</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 55</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.replaceNbspToBr</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 56</span>
<span class='linenumber'> 57</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 58</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 59</span>
<span class='linenumber'> 60</span> </span><span class="NAME">performFullValidation</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 61</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.validateSelfClosingTags</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 62</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.applyWhitelist</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 63</span>
<span class='linenumber'> 64</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">this.urlValidationMode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'relative'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 65</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.makeUrlsRelative</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 66</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.urlValidationMode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'host_relative'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 67</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.makeUrlsHostRelative</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 68</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.urlValidationMode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'absolute'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 69</span> </span><span class="NAME">content</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.makeUrlsAbsolute</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 70</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 71</span>
<span class='linenumber'> 72</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 73</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 74</span>
<span class='linenumber'> 75</span> </span><span class="NAME">validateFontColor</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'> 76</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.RichDom.createInstance</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 77</span> </span><span class="NAME">rdom.setRoot</span><span class="PUNC">(</span><span class="NAME">element</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 78</span>
<span class='linenumber'> 79</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">fonts</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.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">'FONT'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">reverse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 80</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">&lt;</span><span class="WHIT"> </span><span class="NAME">fonts.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'> 81</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">font</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">fonts</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 82</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">font.getAttribute</span><span class="PUNC">(</span><span class="STRN">'color'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 83</span>
<span class='linenumber'> 84</span> </span><span class="KEYW">if</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'> 85</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">span</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">rdom.replaceTag</span><span class="PUNC">(</span><span class="STRN">"span"</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">font</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 86</span> </span><span class="NAME">span.removeAttribute</span><span class="PUNC">(</span><span class="STRN">'color'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 87</span> </span><span class="NAME">span.style.color</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">color</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 88</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 89</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 90</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 91</span>
<span class='linenumber'> 92</span> </span><span class="NAME">addNbspToEmptyBlocks</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 93</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="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="NAME">getBlockTags</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">join</span><span class="PUNC">(</span><span class="STRN">"|"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 94</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">regex</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">RegExp</span><span class="PUNC">(</span><span class="STRN">"&lt;("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")>\\s*?&lt;/("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">blocks</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="STRN">"img"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 95</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="NAME">regex</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'&lt;$1>&nbsp;&lt;/$2>'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 96</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 97</span>
<span class='linenumber'> 98</span> </span><span class="NAME">replaceNbspToBr</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">content</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 99</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="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="NAME">getBlockTags</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">join</span><span class="PUNC">(</span><span class="STRN">"|"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>100</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">regex</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">RegExp</span><span class="PUNC">(</span><span class="STRN">"&lt;("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">blocks</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">")>(&nbsp;)?&lt;/("</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">blocks</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="STRN">"img"</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>101</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">rdom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.RichDom.createInstance</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>102</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">content.replace</span><span class="PUNC">(</span><span class="NAME">regex</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'&lt;$1>'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">rdom.makePlaceHolderString</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'&lt;/$3>'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>103</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>104</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>105</span> </span></pre></body></html>

View file

@ -0,0 +1,21 @@
<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> * Validator for Webkit
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="NAME">xq.ValidatorWebkit</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="NAME">xq.ValidatorW3</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 5</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 6</span>
<span class='linenumber'> 7</span> </span><span class="COMM">/*
<span class='linenumber'> 8</span> if(node.nodeName == "SPAN" && node.className == "Apple-style-span" && node.style.fontStyle == "italic") em = true;
<span class='linenumber'> 9</span> if(node.nodeName == "SPAN" && node.className == "Apple-style-span" && node.style.fontWeight == "bold") strong = true;
<span class='linenumber'> 10</span> if(node.nodeName == "SPAN" && node.className == "Apple-style-span" && node.style.textDecoration == "line-through") strike = true;
<span class='linenumber'> 11</span> if(node.nodeName == "SPAN" && node.className == "Apple-style-span" && node.style.textDecoration == "underline") underline = true;
<span class='linenumber'> 12</span> if(node.nodeName == "SPAN" && node.className == "Apple-style-span" && node.style.cssText.indexOf("vertical-align: super;") != -1) superscription = true;
<span class='linenumber'> 13</span> if(node.nodeName == "SPAN" && node.className == "Apple-style-span" && node.style.cssText.indexOf("vertical-align: sub;") != -1) subscription = true;
<span class='linenumber'> 14</span> */</span></pre></body></html>

View file

@ -0,0 +1,157 @@
<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> * Namespace for entire Xquared classes
<span class='linenumber'> 3</span> */</span><span class="WHIT">
<span class='linenumber'> 4</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">xq</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 5</span> </span><span class="NAME">majorVersion</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'0.1'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 6</span> </span><span class="NAME">minorVersion</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="STRN">'2007119'</span><span class="WHIT">
<span class='linenumber'> 7</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 8</span>
<span class='linenumber'> 9</span> </span><span class="COMM">/**
<span class='linenumber'> 10</span> * Make given object as event source
<span class='linenumber'> 11</span> *
<span class='linenumber'> 12</span> * @param {Object} object target object
<span class='linenumber'> 13</span> * @param {String} prefix prefix for generated functions
<span class='linenumber'> 14</span> * @param {Array} events array of string which contains name of events
<span class='linenumber'> 15</span> */</span><span class="WHIT">
<span class='linenumber'> 16</span> </span><span class="NAME">xq.asEventSource</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">object</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">events</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 17</span> </span><span class="NAME">object._listeners</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="PUNC">]</span><span class="WHIT">
<span class='linenumber'> 18</span> </span><span class="NAME">object._registerEventFirer</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">prefix</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 19</span> </span><span class="KEYW">this</span><span class="PUNC">[</span><span class="STRN">"_fireOn"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">]</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'> 20</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">&lt;</span><span class="WHIT"> </span><span class="NAME">this._listeners.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'> 21</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">listener</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this._listeners</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 22</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">func</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">listener</span><span class="PUNC">[</span><span class="STRN">"on"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">prefix</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 23</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">func</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">func.apply</span><span class="PUNC">(</span><span class="NAME">listener</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">$A</span><span class="PUNC">(</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 24</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 25</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 26</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 27</span> </span><span class="NAME">object.addListener</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">l</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 28</span> </span><span class="NAME">this._listeners.push</span><span class="PUNC">(</span><span class="NAME">l</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 29</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 30</span>
<span class='linenumber'> 31</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">&lt;</span><span class="WHIT"> </span><span class="NAME">events.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'> 32</span> </span><span class="NAME">object._registerEventFirer</span><span class="PUNC">(</span><span class="NAME">prefix</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">events</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'> 33</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 34</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 35</span>
<span class='linenumber'> 36</span> </span><span class="COMM">/**
<span class='linenumber'> 37</span> * Returns the index of given element
<span class='linenumber'> 38</span> *
<span class='linenumber'> 39</span> * @returns {Number} index or -1
<span class='linenumber'> 40</span> */</span><span class="WHIT">
<span class='linenumber'> 41</span> </span><span class="NAME">Array.prototype.indexOf</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">n</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 42</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">&lt;</span><span class="WHIT"> </span><span class="NAME">this.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'> 43</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">this</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">n</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 44</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 45</span>
<span class='linenumber'> 46</span> </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="WHIT">
<span class='linenumber'> 47</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 48</span>
<span class='linenumber'> 49</span> </span><span class="NAME">Date.preset</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'> 50</span> </span><span class="NAME">Date.pass</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">msec</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 51</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">Date.preset</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><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 52</span> </span><span class="NAME">Date.preset</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">Date</span><span class="PUNC">(</span><span class="NAME">Date.preset.getTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">msec</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 53</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 54</span> </span><span class="NAME">Date.get</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'> 55</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Date.preset</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="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Date</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">Date.preset</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 56</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 57</span> </span><span class="NAME">Date.prototype.elapsed</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">msec</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 58</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">Date.get</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getTime</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.getTime</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">msec</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 59</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 60</span>
<span class='linenumber'> 61</span> </span><span class="NAME">String.prototype.merge</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">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 62</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">newString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 63</span> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">data</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 64</span> </span><span class="NAME">newString</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">newString.replace</span><span class="PUNC">(</span><span class="STRN">"{"</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">k</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">data</span><span class="PUNC">[</span><span class="NAME">k</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 65</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 66</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">newString</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 67</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 68</span>
<span class='linenumber'> 69</span> </span><span class="NAME">String.prototype.parseURL</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'> 70</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.match</span><span class="PUNC">(</span><span class="REGX">/((((\w+):\/\/(((([^@:]+)(:([^@]+))?)@)?([^:\/\?#]+)?(:(\d+))?))?([^\?#]+)?)(\?([^#]+))?)(#(.+))?/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 71</span>
<span class='linenumber'> 72</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">includeAnchor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">0</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 73</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">includeQuery</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</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><span class="NAME">undefined</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">includePath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</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">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 75</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">includeHost</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 76</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">includeBase</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'> 77</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">protocol</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">4</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 78</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">user</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">8</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 79</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">password</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">10</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 80</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">domain</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">11</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 81</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">port</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">13</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 82</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">14</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 83</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">query</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">16</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 84</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">anchor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">18</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">undefined</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 85</span>
<span class='linenumber'> 86</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">path</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'> 87</span> </span><span class="NAME">includeBase</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">includeHost</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'> 88</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'> 89</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.lastIndexOf</span><span class="PUNC">(</span><span class="STRN">'/'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 90</span> </span><span class="NAME">includeBase</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">includeHost</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path.substring</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">index</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 91</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'> 92</span>
<span class='linenumber'> 93</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'> 94</span> </span><span class="NAME">includeAnchor</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">includeAnchor</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 95</span> </span><span class="NAME">includeQuery</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">includeQuery</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 96</span> </span><span class="NAME">includePath</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">includePath</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 97</span> </span><span class="NAME">includeBase</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">includeBase</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 98</span> </span><span class="NAME">includeHost</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">includeHost</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'> 99</span> </span><span class="NAME">protocol</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">protocol</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>100</span> </span><span class="NAME">user</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">user</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>101</span> </span><span class="NAME">password</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">password</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>102</span> </span><span class="NAME">domain</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">domain</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>103</span> </span><span class="NAME">port</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">port</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>104</span> </span><span class="NAME">path</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">path</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>105</span> </span><span class="NAME">query</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">query</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>106</span> </span><span class="NAME">anchor</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">anchor</span><span class="WHIT">
<span class='linenumber'>107</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>108</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>109</span>
<span class='linenumber'>110</span> </span><span class="NAME">xq.findXquaredScript</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'>111</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">$A</span><span class="PUNC">(</span><span class="NAME">document.getElementsByTagName</span><span class="PUNC">(</span><span class="STRN">"script"</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">find</span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">script</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>112</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">script.src</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">script.src.match</span><span class="PUNC">(</span><span class="REGX">/xquared\.js/i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>113</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>114</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>115</span> </span><span class="NAME">xq.shouldLoadOthers</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'>116</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">script</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.findXquaredScript</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>117</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">script</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">!</span><span class="NAME">script.src.match</span><span class="PUNC">(</span><span class="REGX">/xquared\.js\?load_others=1/i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>118</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>119</span> </span><span class="NAME">xq.loadScript</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">url</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='linenumber'>120</span> </span><span class="NAME">document.write</span><span class="PUNC">(</span><span class="STRN">'&lt;script type="text/javascript" src="'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">url</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'">&lt;/script>'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>121</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='linenumber'>122</span> </span><span class="NAME">xq.loadOthers</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'>123</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">script</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">xq.findXquaredScript</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>124</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">basePath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">script.src.match</span><span class="PUNC">(</span><span class="REGX">/(.*\/)xquared\.js.*/i</span><span class="PUNC">)</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>125</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">others</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">[</span><span class="WHIT">
<span class='linenumber'>126</span> </span><span class="STRN">'Editor.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>127</span> </span><span class="STRN">'Browser.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>128</span> </span><span class="STRN">'Shortcut.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>129</span> </span><span class="STRN">'DomTree.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>130</span> </span><span class="STRN">'RichDom.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>131</span> </span><span class="STRN">'RichDomW3.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>132</span> </span><span class="STRN">'RichDomGecko.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>133</span> </span><span class="STRN">'RichDomWebkit.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>134</span> </span><span class="STRN">'RichDomTrident.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>135</span> </span><span class="STRN">'RichTable.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>136</span> </span><span class="STRN">'Validator.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>137</span> </span><span class="STRN">'ValidatorW3.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>138</span> </span><span class="STRN">'ValidatorGecko.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>139</span> </span><span class="STRN">'ValidatorWebkit.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>140</span> </span><span class="STRN">'ValidatorTrident.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>141</span> </span><span class="STRN">'EditHistory.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>142</span> </span><span class="STRN">'Controls.js'</span><span class="PUNC">,</span><span class="WHIT">
<span class='linenumber'>143</span> </span><span class="STRN">'_ui_templates.js'</span><span class="WHIT">
<span class='linenumber'>144</span> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>145</span> </span><span class="NAME">others.each</span><span class="PUNC">(</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="PUNC">{</span><span class="WHIT">
<span class='linenumber'>146</span> </span><span class="NAME">xq.loadScript</span><span class="PUNC">(</span><span class="NAME">basePath</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">name</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>147</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'>148</span> </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">xq.shouldLoadOthers</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">xq.loadOthers</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span></pre></body></html>

View file

@ -0,0 +1,16 @@
<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="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">xq</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">xq</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'> 2</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">xq.ui_templates</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">xq.ui_templates</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'> 3</span>
<span class='linenumber'> 4</span> </span><span class="NAME">xq.ui_templates.basicColorPickerDialog</span><span class="PUNC">=</span><span class="STRN">'&lt;form action="#" class="xqFormDialog xqBasicColorPickerDialog">\n &lt;div>\n &lt;label>\n &lt;input type="radio" class="initialFocus" name="color" value="black" checked="checked" />\n &lt;span style="color: black;">Black&lt;/span>\n &lt;/label>\n &lt;label>\n &lt;input type="radio" name="color" value="red" />\n &lt;span style="color: red;">Red&lt;/span>\n &lt;/label>\n &lt;input type="radio" name="color" value="yellow" />\n &lt;span style="color: yellow;">Yellow&lt;/span>\n &lt;/label>\n &lt;/label>\n &lt;input type="radio" name="color" value="pink" />\n &lt;span style="color: pink;">Pink&lt;/span>\n &lt;/label>\n &lt;label>\n &lt;input type="radio" name="color" value="blue" />\n &lt;span style="color: blue;">Blue&lt;/span>\n &lt;/label>\n &lt;label>\n &lt;input type="radio" name="color" value="green" />\n &lt;span style="color: green;">Green&lt;/span>\n &lt;/label>\n \n &lt;input type="submit" value="Ok" />\n &lt;input type="button" class="cancel" value="Cancel" />\n &lt;/div>\n &lt;/form>'</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 5</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">xq</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">xq</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'> 6</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">xq.ui_templates</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="NAME">xq.ui_templates</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'> 7</span>
<span class='linenumber'> 8</span> </span><span class="NAME">xq.ui_templates.basicLinkDialog</span><span class="PUNC">=</span><span class="STRN">'&lt;form action="#" class="xqFormDialog xqBasicLinkDialog">\n &lt;h3>Link&lt;/h3>\n &lt;div>\n &lt;input type="text" class="initialFocus" name="text" value="" />\n &lt;input type="text" name="url" value="http://" />\n \n &lt;input type="submit" value="Ok" />\n &lt;input type="button" class="cancel" value="Cancel" />\n &lt;/div>\n &lt;/form>'</span><span class="PUNC">;</span><span class="WHIT">
<span class='linenumber'> 9</span> </span></pre></body></html>

View file

@ -0,0 +1,78 @@
<!-- 스킨 css 로드 -->
<!--%import("examples/css/xq_ui.css")-->
<!--%import("css/default.css")-->
<script type="text/javascript">
var editor_path = "{$editor_path}";
</script>
<!-- 기본 js/언어파일 로드 -->
<!--%import("../../tpl/js/editor_common.js")-->
<!--%import("js/prototype.js")-->
<!--%import("js/xquared.js")-->
<!--%import("js/xe_interface.js")-->
<!-- 에디터 활성화 -->
<script type="text/javascript">//<![CDATA[
var auto_saved_msg = "{$lang->msg_auto_saved}";
var xed_{$editor_sequence};
xAddEventListener(window, 'load', function() {
if($("comment_{$editor_sequence}") == null || $("comment_{$editor_sequence}").style.display != 'none'){
editorStart_xq(xed_{$editor_sequence}, $("xqEditor_{$editor_sequence}"), {$editor_sequence}, "{$editor_content_key_name}", "{$editor_height}px", "{$editor_primary_key_name}");
}});
//]]></script>
<!-- 자동저장용 폼 -->
<!--@if($enable_autosave)-->
<input type="hidden" name="_saved_doc_title" value="{htmlspecialchars($saved_doc->title)}" />
<input type="hidden" name="_saved_doc_content" value="{htmlspecialchars($saved_doc->content)}" />
<input type="hidden" name="_saved_doc_message" value="{$lang->msg_load_saved_doc}" />
<!--@end-->
<!-- 에디터 -->
<div class="xeEditor" style="margin-top:5px; margin-bottom:5px;">
<!-- HTML 모드 사용 기능 및 자동저장 메세지 출력용 -->
<!--<div class="editor_info">
<div class="editor_option">
<input type="checkbox" id="use_html_{$editor_sequence}" value="Y" onclick="editorChangeMode(this, '{$editor_sequence}');" /> <label for="use_html_{$editor_sequence}">HTML</label>
</div>
<div class="editor_autosaved_message" id="editor_autosaved_message_{$editor_sequence}">&nbsp;</div>
</div>-->
<!-- 에디터 출력 -->
<div id = "xqEditor_{$editor_sequence}"></div>
<textarea id="editor_textarea_{$editor_sequence}" class="editor_iframe_textarea" style="display:none; height:{$editor_height}" rows="10" cols="10"></textarea>
<!-- 에디터 크기 조절 bar -->
<!-- <div class="textAreaDragIndicator"><div class="textAreaDragIndicatorBar" id="editor_drag_bar_{$editor_sequence}"></div></div>-->
<!--@if($allow_fileupload)-->
<!-- 첨부파일 영역 -->
<!--%import("../../tpl/js/uploader.js")-->
<script type="text/javascript">//<![CDATA[
var zbxe_session_name = "{session_name()}";
var uploader_setting = { "allowed_filesize" : "{$file_config->allowed_filesize}", "allowed_filetypes" : "{$file_config->allowed_filetypes}", "allowed_filetypes_description" : "{$file_config->allowed_filetypes}" }
<!--@if(!$editor_manual_start)-->
editor_upload_init("{$editor_sequence}", editorGetForm_xq($("xqEditor_{$editor_sequence}")));
<!--@end-->
//]]></script>
<div class="fileAttach">
<div class="preview" id="preview_uploaded_{$editor_sequence}"><img src="./images/blank.gif" alt="preview" width="100" height="100" /></div>
<!-- 파일 업로드 영역 -->
<div class="fileListArea">
<select id="uploaded_file_list_{$editor_sequence}" multiple="multiple" size="5" class="fileList" onclick="editor_preview(this, '{$editor_sequence}');"></select>
<span class="file_attach_info" id="uploader_status_{$editor_sequence}">{$upload_status}</span>
</div>
<div class="fileUploadControl"><a href="#" onclick="editor_upload_file('{$editor_sequence}');return false;" class="button"><span>{$lang->edit->upload_file}</span></a></div>
<div class="fileUploadControl"><a href="#" onclick="editor_remove_file('{$editor_sequence}');return false;" class="button"><span>{$lang->edit->delete_selected}</span></a></div>
<div class="fileUploadControl"><a href="#" onclick="editor_insert_file_xq('{$editor_sequence}');return false;" class="button"><span>{$lang->edit->link_file}</span></a></div>
<div class="clear"></div>
</div>
<!--@end-->
</div>

View file

@ -0,0 +1,122 @@
/* Basic */
.xed {
color: #494949;
padding: 0.3em;
font-size: 0.833em;
font-family: Arial, dotum, sans-serif;
}
.xed * {
margin: 0;
padding: 0;
}
/* Headings and paragraph */
.xed h1,
.xed h2,
.xed h3,
.xed h4,
.xed h5,
.xed h6 {
border-bottom: 2px solid #425e89;
line-height: 1em;
padding-bottom: 0.2em;
margin: 0.2em 0;
}
.xed h1 {font-size: 2.845em;}
.xed h2 {font-size: 2.460em;}
.xed h3 {font-size: 2.153em;}
.xed h4 {font-size: 1.922em;}
.xed h5 {font-size: 1.461em;}
.xed h6 {font-size: 1.230em;}
.xed p {
margin: 0.614em 0;
line-height: 1.230em;
}
.xed hr {
}
/* List */
.xed ul,
.xed ol {
padding-left: 2em;
margin: 0.614em 0;
}
.xed li {
line-height: 1.306em;
}
/* Other block containers */
.xed ol.code,
.xed div,
.xed blockquote {
margin: 1em 0;
padding-left: 2.460em;
padding-right: 1em;
border-width: 0 3px;
border-style: solid;
line-height: 1.306em;
}
.xed ol.code {
font-family: monospace;
list-style-type: none;
border-color: #ffb781;
background: url(../img/content/code.gif) no-repeat 0 0;
}
.xed div {
border-color: #8ccfff;
background: url(../img/content/div.gif) no-repeat 0 0;
}
.xed blockquote {
border-color: #c9c9c9;
background: url(../img/content/blockquote.gif) no-repeat 0 0;
}
/* Inline elements */
.xed em.underline {
font-style: normal;
text-decoration: underline;
}
.xed span.strike {
text-decoration: line-through;
}
/* table */
.xed table.datatable {
width: 100%;
/width: auto;
border-collapse: collapse;
table-layout: fixed;
}
.xed table.datatable th {
font-weight: normal;
padding: 0.25em 0.307em;
}
.xed table.datatable td {
padding: 0.25em 0.307em;
}
.xed table.datatable {
border-left: 1px solid #000;
border-top: 1px solid #000;
}
.xed table.datatable th {
background-color: #e7e7e7;
border-bottom: 1px solid #000;
border-right: 1px solid #000;
}
.xed table.datatable td {
border-bottom: 1px solid #000;
border-right: 1px solid #000;
}

View file

@ -0,0 +1,233 @@
/**
* Default Toolbar
*/
.xquared {
border: 1px solid #c2c2c2;
}
.xquared div.toolbar {
position: relative;
background-color: #ebebeb;
background-position: 0 0;
background-repeat: repeat-x;
background-image: url(../img/toolbar/toolbarBg.gif);
}
.xquared ul.buttons {
margin: 0;
padding: 5px 4px 2px;
list-style: none;
border-top: 1px solid #fff;
border-bottom: 1px solid #fff;
overflow: hidden;
height: 100%;
}
.xquared ul.buttons li {
float: left;
padding-bottom: 3px;
background-position: 0 0;
background-repeat: repeat-x;
background-image: url(../img/toolbar/toolbarButtonBg.gif);
}
.xquared ul.buttons li.xq_separator {
padding-left: 8px;
margin-left: 8px;
background-position: 0 0;
background-repeat: repeat-x;
background-image: url(../img/toolbar/toolbarSeparator.gif);
}
.xquared ul.buttons li a {
display: block;
padding: 2px;
font-size: 0;
border: 1px solid #d2d2d2;
margin-right: -1px;
position: relative;
height: 100%;
_height: auto;
z-index: 0;
}
.xquared ul.buttons li a img {
margin: 0;
padding: 0;
border: none;
font-size: 1.25em;
}
/* selected */
.xquared ul.buttons li a.selected {
background-color: #ffea5f;
border: 1px solid #a0a0a0;
position: relative;
z-index: 1;
}
/* mouseover */
.xquared ul.buttons li a:hover {
border: 1px solid #000;
background-color: transparent;
position: relative;
z-index: 2;
}
/* disabled */
.xquared .disabled ul.buttons li a,
.xquared ul.buttons li .disabled a {
background-color: #fff;
opacity: 0.3;
filter:alpha(opacity=30);
_width: 1px;
_height: 1px;
cursor: default;
}
.xquared .disabled ul.buttons li a,
.xquared ul.buttons li .disabled a:hover {
border: 1px solid #dbdbdb;
position: relative;
z-index: 0;
}
.xquared .disabled ul.buttons li a,
.xquared ul.buttons li .disabled a.selected {
border: 1px solid #dbdbdb;
}
.xquared .editor {
border: 0 none;
border-top:1px solid #c2c2c2;
height:300px;
}
.xquared .editor textarea,
.xquared .editor iframe {
margin: 0;
padding: 0;
border: 0 none;
height: 100%;
width: 100%;
}
.xquared .editor textarea {
_height: expression(this.parentNode.clientHeight - 2); /* TODO remove IE6 hack */
}
*+html .xquared .editor textarea {
height: expression(this.parentNode.clientHeight - 1); /* TODO remove IE7 hack */
}
.xquared .source_editor {
padding-left: 0.3em;
}
/**
* Context Menu
*/
.xqContextMenu {
position:absolute;
z-index: 902;
font-size: medium;
font-family: arial, "돋움";
width:auto;
margin:0;
padding:3px;
border:1px solid #aaa;
list-style:none;
background-color: #fff;
}
.xqContextMenu li {
padding:2px 3px 2px 20px;
background-position:left;
background-repeat:no-repeat;
color:#aaa;
display:block;
width:200px;
}
.xqContextMenu a {
color:#000;
text-decoration:none;
}
.xqContextMenu .separator {
margin-top:5px;
padding-bottom:0px;
line-height:0em;
height: 1px;
/height: auto;
border-top: 1px solid #aaa;
}
/**
* Controls - BasicLinkDialog
*/
.xqFormDialog {
position:absolute;
z-index: 902;
border:1px solid #aaa;
background-color: #fff;
padding: 0.5em;
overflow:auto; /* to fix FF caret bug */
}
.xqFormDialog h3 {
font-size: 1.2em;
margin: 0;
}
/**
* Controls - QuickSearchDialog
*/
.xqQuickSearch {
position:absolute;
z-index: 902;
font-size: medium;
font-family: arial, "돋움";
width:15em;
margin:0;
padding:0;
border:1px solid #aaa;
list-style:none;
background-color: #fff;
overflow:auto; /* to fix FF caret bug */
}
.xqQuickSearch h1 {
font-size: medium;
font-weight: bold;
margin: 2px;
padding: 2px;
}
.xqQuickSearch .input {
border: 1px solid #aaa;
padding: 2px;
margin: 2px;
}
.xqQuickSearch form {
padding: 0;
margin: 0;
}
.xqQuickSearch input {
border-width: 0;
margin: 0 2px;
width: 98%;
}
.xqQuickSearch ol {
border: 1px solid #aaa;
padding: 2px;
margin: 2px;
height: 10em;
overflow: auto;
}
.xqQuickSearch li {
list-style: none;
padding-bottom: 1px;
border-bottom: 1px solid #ddd;
cursor: pointer;
_cursor: hand;
}
.xqQuickSearch li.selected {
background-color: #ffd;
}

View file

@ -0,0 +1,77 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Xquared example - Default</title>
<link rel="stylesheet" type="text/css" href="css/xq_ui.css" />
<script type="text/javascript" src="../js/prototype.js"></script>
<script type="text/javascript" src="../js/xquared.js"></script>
<script type="text/javascript">//<![CDATA[
var xed;
window.onload = function() {
xed = new xq.Editor($("xqEditor"));
xed.setEditMode('wysiwyg');
xed.loadStylesheet("css/xq_contents.css");
xed.focus();
}
//]]></script>
</head>
<body>
<div id="xqEditor">
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<p>This holds true both for individuals as well as whole tagging communities.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
<p>This holds true both for individuals as well as whole tagging communities.</p>
<ul>
<li>
<p>Item 1</p>
<ol>
<li>Item 1</li>
<li>Item 2</li>
</ol>
</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<p>This holds true both for individuals as well as whole tagging communities.</p>
<div>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<blockquote>
<p>This holds true both for individuals as well as whole tagging communities.</p>
</blockquote>
</div>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<blockquote>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<blockquote>
<p>This holds true both for individuals as well as whole tagging communities.</p>
</blockquote>
</blockquote>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h1>Heading 1</h1>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h4>Heading 4</h4>
<h5>Heading 5</h5>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h6>Heading 6</h6>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<ol class="code">
<li>print "Hello World"</li>
<li>print "Hello World"</li>
</ol>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
</div>
</body>
</html>

View file

@ -0,0 +1,308 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Xquared example - Extension point</title>
<link rel="stylesheet" type="text/css" href="css/xq_ui.css" />
<script type="text/javascript" src="../js/prototype.js"></script>
<script type="text/javascript" src="../js/xquared.js"></script>
<script type="text/javascript">//<![CDATA[
var xed;
window.onload = function() {
xed = new xq.Editor($("xqEditor"));
xed.setEditMode('wysiwyg');
xed.addShortcuts(getAdditionalShortcuts());
xed.addAutocorrections(getAdditionalAutocorrections());
xed.addAutocompletions(getAdditionalAutocompletions());
xed.addContextMenuHandler('test', contextMenuHandler);
xed.loadStylesheet("css/xq_contents.css");
xed.focus();
}
function getAdditionalAutocompletions() {
return [
{
id:'isbn',
criteria: /@ISBN:\d+$/i,
handler: function(xed, rdom, block, wrapper, text) {
var isbn = text.split(":")[1]
var korean = isbn.indexOf("97889") == 0 || isbn.indexOf("89") == 0
var href = korean ?
"http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=" :
"http://www.amazon.com/exec/obidos/ISBN="
var node = rdom.createElement('A');
node.innerHTML = 'ISBN:' + isbn;
node.href = href + isbn;
node.className = 'external';
node.title = 'ISBN:' + isbn;
wrapper.innerHTML = "";
wrapper.appendChild(node);
}
},
{
id:'anchor',
criteria: /@A(:(.+))?$/i,
handler: function(xed, rdom, block, wrapper, text) {
var m = text.match(/@A(:(.+))?$/i);
var anchorId = m[2] ? m[2] : function() {
var id = 0;
while(true) {
var element = rdom.$("a" + (id));
if(!element) return "a" + id;
id++;
}
}();
var node = rdom.createElement('A');
node.id = anchorId;
node.href = '#' + anchorId;
node.className = 'anchor';
node.title = 'Anchor ' + anchorId;
node.innerHTML = '(' + anchorId + ')';
wrapper.innerHTML = "";
wrapper.appendChild(node);
}
}
];
}
function getAdditionalAutocorrections() {
return [
{id:'bullet', criteria: /^(\s|\&nbsp\;)*(\*|-)(\s|\&nbsp\;).+$/, handler: function(xed, rdom, block, text) {
rdom.pushMarker();
rdom.removePlaceHoldersAndEmptyNodes(block);
block.innerHTML = block.innerHTML.replace(/((\s|&nbsp;)*(\*|\-)\s*)/, "");
if(block.nodeName == "LI") xed.handleIndent();
if(block.parentNode.nodeName != "UL") xed.handleList('UL');
rdom.popMarker(true);
}},
{id:'numbering', criteria: /^(\s|\&nbsp\;)*(\d\.|#)(\s|\&nbsp\;).+$/, handler: function(xed, rdom, block, text) {
rdom.pushMarker();
rdom.removePlaceHoldersAndEmptyNodes(block);
block.innerHTML = block.innerHTML.replace(/(\s|&nbsp;)*(\d\.|\#)\s*/, "")
if(block.nodeName == "LI") xed.handleIndent();
if(block.parentNode.nodeName != "OL") xed.handleList('OL');
rdom.popMarker(true);
}},
{id:'imageUrl', criteria: /https?:\/\/.*?\/(.*?\.(jpg|jpeg|gif|bmp|png))$/i, handler: function(xed, rdom, block, text) {
var fileName = text.match(/https?:\/\/.*?\/(.*?\.(jpg|jpeg|gif|bmp|png))$/i)[1];
block.innerHTML = "";
var img = rdom.createElement("img");
img.src = text;
img.alt = fileName;
img.title = fileName;
block.appendChild(img);
rdom.selectElement(block);
rdom.collapseSelection(false);
}},
{id:'separator', criteria: /^----*$/, handler: function(xed, rdom, block, text) {
if(rdom.tree.isBlockContainer(block)) block = rdom.wrapAllInlineOrTextNodesAs("P", block, true)[0];
block.innerHTML = "";
block.appendChild(rdom.createElement("HR"));
rdom.selectElement(block);
rdom.collapseSelection();
}},
{id:'heading', criteria: /^\=+[^=]*\=+(\&nbsp;)*$/, handler: function(xed, rdom, block, text) {
var textWithoutEqualMarks = text.strip().replace(/=/g, "");
var level = Math.min(6, parseInt((text.length - textWithoutEqualMarks.length) / 2))
xed.handleApplyBlock('H' + level);
block = rdom.getCurrentBlockElement();
block.innerHTML = textWithoutEqualMarks;
rdom.selectElement(block);
rdom.collapseSelection();
}}
];
}
function getAdditionalShortcuts() {
if(xq.Browser.isMac) {
// Mac FF & Safari
return [
{event:"Ctrl+Shift+SPACE", handler:"this.handleAutocompletion(); stop = true;"},
{event:"Ctrl+Meta+0", handler:"xed.handleApplyBlock('P')"},
{event:"Ctrl+Meta+1", handler:"xed.handleApplyBlock('H1')"},
{event:"Ctrl+Meta+2", handler:"xed.handleApplyBlock('H2')"},
{event:"Ctrl+Meta+3", handler:"xed.handleApplyBlock('H3')"},
{event:"Ctrl+Meta+4", handler:"xed.handleApplyBlock('H4')"},
{event:"Ctrl+Meta+5", handler:"xed.handleApplyBlock('H5')"},
{event:"Ctrl+Meta+6", handler:"xed.handleApplyBlock('H6')"},
{event:"Ctrl+Meta+B", handler:"xed.handleApplyBlock('BLOCKQUOTE')"},
{event:"Ctrl+Meta+D", handler:"xed.handleApplyBlock('DIV')"},
{event:"Ctrl+Meta+EQUAL", handler:"xed.handleSeparator()"},
{event:"Ctrl+Meta+O", handler:"xed.handleList('OL')"},
{event:"Ctrl+Meta+U", handler:"xed.handleList('UL')"},
{event:"Ctrl+Meta+E", handler:"xed.handleRemoveBlock()"},
{event:"Ctrl+(Meta)+COMMA", handler:"xed.handleJustify('left')"},
{event:"Ctrl+(Meta)+PERIOD", handler:"xed.handleJustify('center')"},
{event:"Ctrl+(Meta)+SLASH", handler:"xed.handleJustify('right')"},
{event:"Meta+UP", handler:"xed.handleMoveBlock(true)"},
{event:"Meta+DOWN", handler:"xed.handleMoveBlock(false)"}
];
} else if(xq.Browser.isUbuntu) {
// Ubunto FF
return [
{event:"Ctrl+SPACE", handler:"xed.handleAutocompletion(); stop = true;"},
{event:"Ctrl+0", handler:"xed.handleApplyBlock('P')"},
{event:"Ctrl+1", handler:"xed.handleApplyBlock('H1')"},
{event:"Ctrl+2", handler:"xed.handleApplyBlock('H2')"},
{event:"Ctrl+3", handler:"xed.handleApplyBlock('H3')"},
{event:"Ctrl+4", handler:"xed.handleApplyBlock('H4')"},
{event:"Ctrl+5", handler:"xed.handleApplyBlock('H5')"},
{event:"Ctrl+6", handler:"xed.handleApplyBlock('H6')"},
{event:"Ctrl+Alt+B", handler:"xed.handleApplyBlock('BLOCKQUOTE')"},
{event:"Ctrl+Alt+D", handler:"xed.handleApplyBlock('DIV')"},
{event:"Alt+HYPHEN", handler:"xed.handleSeparator()"},
{event:"Ctrl+Alt+O", handler:"xed.handleList('OL')"},
{event:"Ctrl+Alt+U", handler:"xed.handleList('UL')"},
{event:"Ctrl+Alt+E", handler:"xed.handleRemoveBlock()"},
{event:"Alt+COMMA", handler:"xed.handleJustify('left')"},
{event:"Alt+PERIOD", handler:"xed.handleJustify('center')"},
{event:"Alt+SLASH", handler:"xed.handleJustify('right')"},
{event:"Alt+UP", handler:"xed.handleMoveBlock(true)"},
{event:"Alt+DOWN", handler:"xed.handleMoveBlock(false)"}
];
} else {
// Win IE & FF
return [
{event:"Ctrl+SPACE", handler:"xed.handleAutocompletion(); stop = true;"},
{event:"Alt+0", handler:"xed.handleApplyBlock('P')"},
{event:"Alt+1", handler:"xed.handleApplyBlock('H1')"},
{event:"Alt+2", handler:"xed.handleApplyBlock('H2')"},
{event:"Alt+3", handler:"xed.handleApplyBlock('H3')"},
{event:"Alt+4", handler:"xed.handleApplyBlock('H4')"},
{event:"Alt+5", handler:"xed.handleApplyBlock('H5')"},
{event:"Alt+6", handler:"xed.handleApplyBlock('H6')"},
{event:"Ctrl+Alt+B", handler:"xed.handleApplyBlock('BLOCKQUOTE')"},
{event:"Ctrl+Alt+D", handler:"xed.handleApplyBlock('DIV')"},
{event:"Alt+HYPHEN", handler:"xed.handleSeparator()"},
{event:"Ctrl+Alt+O", handler:"xed.handleList('OL')"},
{event:"Ctrl+Alt+U", handler:"xed.handleList('UL')"},
{event:"Ctrl+Alt+E", handler:"xed.handleRemoveBlock()"},
{event:"Alt+COMMA", handler:"xed.handleJustify('left')"},
{event:"Alt+PERIOD", handler:"xed.handleJustify('center')"},
{event:"Alt+SLASH", handler:"xed.handleJustify('right')"},
{event:"Alt+UP", handler:"xed.handleMoveBlock(true)"},
{event:"Alt+DOWN", handler:"xed.handleMoveBlock(false)"}
];
}
}
var quickSearch = function(xed) {
var dialog = new xq.controls.QuickSearchDialog(xed, {
listProvider: function(query, xed, callback) {
var headings = xed.rdom.searchHeadings();
var matched = headings.findAll(function(h) {
return xed.rdom.getInnerText(h).toLowerCase().indexOf(query.toLowerCase()) != -1;
});
callback(matched);
},
onSelect: function(xed, selected) {
xed.focus();
xed.rdom.scrollIntoView(selected, true, true);
}
});
dialog.show();
}
var contextMenuHandler = function(editor, element, x, y) {
if(element.nodeName != "P") return false;
editor.showContextMenu([
{
title: '볼드',
handler: editor.handleStrongEmphasis.bind(xed)
},
{
title: '언더라인',
handler: editor.handleUnderline.bind(xed)
},
{
title: '----'
},
{
title: 'QuickSearch',
handler: quickSearch
}
], x, y);
return true;
}
//]]></script>
</head>
<body>
<div id="xqEditor">
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<p>This holds true both for individuals as well as whole tagging communities.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
<p>This holds true both for individuals as well as whole tagging communities.</p>
<ul>
<li>
<p>Item 1</p>
<ol>
<li>Item 1</li>
<li>Item 2</li>
</ol>
</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<p>This holds true both for individuals as well as whole tagging communities.</p>
<div>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<blockquote>
<p>This holds true both for individuals as well as whole tagging communities.</p>
</blockquote>
</div>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<blockquote>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<blockquote>
<p>This holds true both for individuals as well as whole tagging communities.</p>
</blockquote>
</blockquote>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h1>Heading 1</h1>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h4>Heading 4</h4>
<h5>Heading 5</h5>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h6>Heading 6</h6>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<ol class="code">
<li>print "Hello World"</li>
<li>print "Hello World"</li>
</ol>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
</div>
</body>
</html>

View file

@ -0,0 +1,30 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Xquared example - Form and Textarea</title>
<link rel="stylesheet" type="text/css" href="css/xq_ui.css" />
<script type="text/javascript" src="../js/prototype.js"></script>
<script type="text/javascript" src="../js/xquared.js"></script>
<script type="text/javascript">//<![CDATA[
var xed;
window.onload = function() {
xed = new xq.Editor($("xqEditor"));
xed.setEditMode('wysiwyg');
xed.loadStylesheet("css/xq_contents.css");
xed.focus();
}
//]]></script>
</head>
<body>
<form action="#" method="post" onsubmit="alert(document.getElementById('xqEditor').value); return false;">
<label>Subject: <input type="text" name="subject" /></label>
<label>Content:
<textarea name="content" id="xqEditor">&lt;p&gt;Hello &lt;a href="#"&gt;World&lt;/a&gt;!&lt;/p&gt;</textarea>
</label>
<input type="submit" />
</form>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 963 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

View file

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Xquared example - Custom toolbar 1</title>
<link rel="stylesheet" type="text/css" href="css/xq_ui.css" />
<script type="text/javascript" src="../js/prototype.js"></script>
<script type="text/javascript" src="../js/xquared.js"></script>
<script type="text/javascript">//<![CDATA[
var xed;
window.onload = function() {
xed = new xq.Editor($("xqEditor"));
xed.config.defaultToolbarButtonMap = [
[
{className:"foregroundColor", title:"Foreground color", handler:"xed.handleForegroundColor('red')"},
{className:"backgroundColor", title:"Background color", handler:"xed.handleBackgroundColor('yellow')"}
],
[
{className:"strongEmphasis", title:"Strong emphasis", handler:"xed.handleStrongEmphasis()"},
{className:"emphasis", title:"Emphasis", handler:"xed.handleEmphasis()"},
{className:"underline", title:"Underline", handler:"xed.handleUnderline()"},
{className:"strike", title:"Strike", handler:"xed.handleStrike()"}
],
[
{className:"superscription", title:"Superscription", handler:"xed.handleSuperscription()"},
{className:"subscription", title:"Subscription", handler:"xed.handleSubscription()"}
],
[
{className:"removeFormat", title:"Remove format", handler:"xed.handleRemoveFormat()"}
]
];
xed.setEditMode('wysiwyg');
xed.loadStylesheet("css/xq_contents.css");
xed.focus();
}
//]]></script>
</head>
<body>
<div id="xqEditor"></div>
</body>
</html>

View file

@ -0,0 +1,92 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Xquared example - Custom toolbar 2</title>
<link rel="stylesheet" type="text/css" href="css/xq_ui.css" />
<style type="text/css">
.toolbar .buttons .selected {
font-weight: bold;
}
</style>
<script type="text/javascript" src="../js/prototype.js"></script>
<script type="text/javascript" src="../js/xquared.js"></script>
<script type="text/javascript">//<![CDATA[
var xed;
window.onload = function() {
xed = new xq.Editor($("xqEditor"), $("xqToolbarContainer"));
xed.setEditMode('wysiwyg');
xed.loadStylesheet("css/xq_contents.css");
xed.focus();
}
//]]></script>
</head>
<body>
<div class="toolbar">
<ul id="xqToolbarContainer" class="buttons">
<li class="foregroundColor"><a href="#" title="Foreground color" onclick="xed.handleForegroundColor('red');return false;" onmousedown="return false;">Foreground color</a></li>
<li class="strongEmphasis"><a href="#" title="Strong emphasis" onclick="xed.handleStrongEmphasis();return false;" onmousedown="return false;">Strong emphasis</a></li>
<li class="undo"><a href="#" title="Undo" onclick="xed.handleUndo();return false;" onmousedown="return false;">Undo</a></li>
<li class="redo"><a href="#" title="Redo" onclick="xed.handleRedo();return false;" onmousedown="return false;">Redo</a></li>
</ul>
</div>
<div>
<div id="xqEditor" class="editor">
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<p>This holds true both for individuals as well as whole tagging communities.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
<p>This holds true both for individuals as well as whole tagging communities.</p>
<ul>
<li>
<p>Item 1</p>
<ol>
<li>Item 1</li>
<li>Item 2</li>
</ol>
</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<p>This holds true both for individuals as well as whole tagging communities.</p>
<div>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<blockquote>
<p>This holds true both for individuals as well as whole tagging communities.</p>
</blockquote>
</div>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<blockquote>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<blockquote>
<p>This holds true both for individuals as well as whole tagging communities.</p>
</blockquote>
</blockquote>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h1>Heading 1</h1>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h4>Heading 4</h4>
<h5>Heading 5</h5>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<h6>Heading 6</h6>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
<ol class="code">
<li>print "Hello World"</li>
<li>print "Hello World"</li>
</ol>
<p>Most notably, it has been confirmed in many empirical studies on tagging(see e.g. [Golder:2005, Hotho:2006, Cattuto:2006]), that tag distributions tend follow a power law—a small number of tags is used very often, while a very large number of tags occurs very rarely.</p>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Xquared example - No toolbar</title>
<link rel="stylesheet" type="text/css" href="css/xq_ui.css" />
<script type="text/javascript" src="../js/prototype.js"></script>
<script type="text/javascript" src="../js/xquared.js"></script>
<script type="text/javascript">//<![CDATA[
var xed;
window.onload = function() {
xed = new xq.Editor($("xqEditor"));
// Turn off default toolbar
xed.config.generateDefaultToolbar = false;
xed.setEditMode('wysiwyg');
xed.loadStylesheet("css/xq_contents.css");
xed.focus();
}
//]]></script>
</head>
<body>
<div id="xqEditor"></div>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,95 @@
function editorGetForm_xq(element) {
var fo_obj = element.parentNode;
while(fo_obj.nodeName != 'FORM') { fo_obj = fo_obj.parentNode; }
if(fo_obj.nodeName == 'FORM') return fo_obj;
return;
}
function getAdditionalAutocompletions() {
return [
{
id:'link',
criteria: /"[^"]+":http:\/\/[^ ]+$/i,
handler: function(xed, rdom, block, wrapper, text) {
var sp = text.split("\"");
var node = rdom.createElement('A');
node.innerHTML = sp[1];
node.href = sp[2].substr(1);
wrapper.innerHTML = "";
wrapper.appendChild(node);
}
}
];
}
function editorSync_xq(editor_sequence) {
var editor = editorRelKeys[editor_sequence]['editor'];
editorRelKeys[editor_sequence]['content'].value = editor.getCurrentContent(true);
return;
}
function editorStart_xq(editor, element, editor_sequence, content_key, editor_height, primary_key) {
editor = new xq.Editor(element);
editorRelKeys[editor_sequence] = new Array();
editorRelKeys[editor_sequence]['editor'] = editor;
editorRelKeys[editor_sequence]['func'] = editorSync_xq;
editorMode[editor_sequence] = null;
var fo_obj = editorGetForm_xq(element);
fo_obj.setAttribute('editor_sequence', editor_sequence);
editor.setStaticContent(fo_obj[content_key].value);
editorRelKeys[editor_sequence]['content'] = fo_obj[content_key];
editorRelKeys[editor_sequence]['primary'] = fo_obj[primary_key];
editor.setEditMode('wysiwyg');
editor.loadStylesheet(request_uri+editor_path+"/examples/css/xq_contents.css");
editor.getFrame().style.width = "100%";
editor.getFrame().parentNode.style.height = editor_height;
editor.addAutocompletions(getAdditionalAutocompletions());
}
xq.Editor.prototype.insertHTML = function (html) {
this.rdom.insertHtml(html);
}
function editor_insert_file_xq(editor_sequence) {
if(editorMode[editor_sequence]=='html') return;
var obj = xGetElementById('uploaded_file_list_'+editor_sequence);
if(obj.options.length<1) return;
var editor = editorRelKeys[editor_sequence]['editor'];
editor.focus();
for(var i=0;i<obj.options.length;i++) {
var sel_obj = obj.options[i];
if(!sel_obj.selected) continue;
var file_srl = sel_obj.value;
if(!file_srl) continue;
var file_obj = uploaded_files[file_srl];
var filename = file_obj.filename;
var sid = file_obj.sid;
var url = file_obj.uploaded_filename.replace(request_uri,'');
if(url.indexOf("binaries")==-1) {
// 이미지 파일의 경우 image_link 컴포넌트 열결
if(/\.(jpg|jpeg|png|gif)$/i.test(url)) {
var text = "<img editor_component=\"image_link\" src=\""+url+"\" alt=\""+file_obj.filename+"\" />";
editor.insertHTML(text);
// 이미지외의 경우는 multimedia_link 컴포넌트 연결
} else {
var text = "<img src=\"./common/tpl/images/blank.gif\" editor_component=\"multimedia_link\" multimedia_src=\""+url+"\" width=\"400\" height=\"320\" style=\"display:block;width:400px;height:320px;border:2px dotted #4371B9;background:url(./modules/editor/components/multimedia_link/tpl/multimedia_link_component.gif) no-repeat center;\" auto_start=\"false\" alt=\"\" />";
editor.insertHTML(text);
}
// binary파일의 경우 url_link 컴포넌트 연결
} else {
var mid = fo_obj.mid.value;
var url = request_uri+"/?module=file&amp;act=procFileDownload&amp;file_srl="+file_srl+"&amp;sid="+sid;
var text = "<a href=\""+url+"\">"+filename+"</a><br />\n";
editor.insertHTML(text);
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<skin>
<title xml:lang="ko">ZeroboardXE Xquared Editor Skin</title>
<title xml:lang="en">ZeroboardXE Xquared Editor Skin</title>
<maker email_address="haneul0318@gmail.com" link="http://haneul.zetyx.net" date="2007. 11. 21">
<name xml:lang="ko">haneul</name>
<name xml:lang="en">haneul</name>
<description xml:lang="ko">
오픈소스 에디터인 Xquared를 이용한 위지윅 에디터입니다.
자세한 정보는 Xquared 홈페이지를 참조하세요.
http://labs.openmaru.com/projects/xquared
Xquared is copyrighted free software by Alan Kang <jania902@gmail.com>.
</description>
<description xml:lang="en">
This is the editor skin based on the open source WYSIWYG Editor, Xquared.
You can find more deatiled information from Xquared's official homepage.
http://labs.openmaru.com/projects/xquared/
Xquared is copyrighted free software by Alan Kang <jania902@gmail.com>.
</description>
</maker>
</skin>