blob: b49a709a2b33e8e70c67d72c9eda883359607386 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
var CONTAINER_ELEMENTS = new Array(HTML_COUNT);
CONTAINER_ELEMENTS[HTML_DOCUMENT] = true;
CONTAINER_ELEMENTS[HTML_HTML] = true;
CONTAINER_ELEMENTS[HTML_BODY] = true;
CONTAINER_ELEMENTS[HTML_UL] = true;
CONTAINER_ELEMENTS[HTML_OL] = true,
CONTAINER_ELEMENTS[HTML_LI] = true;
CONTAINER_ELEMENTS[HTML_TABLE] = true;
CONTAINER_ELEMENTS[HTML_CAPTION] = true;
CONTAINER_ELEMENTS[HTML_THEAD] = true;
CONTAINER_ELEMENTS[HTML_TFOOT] = true;
CONTAINER_ELEMENTS[HTML_TBODY] = true;
CONTAINER_ELEMENTS[HTML_TR] = true;
CONTAINER_ELEMENTS[HTML_TH] = true;
CONTAINER_ELEMENTS[HTML_TD] = true;
CONTAINER_ELEMENTS[HTML_COL] = true;
CONTAINER_ELEMENTS[HTML_FIGURE] = true;
CONTAINER_ELEMENTS[HTML_FIGCAPTION] = true;
CONTAINER_ELEMENTS[HTML_NAV] = true;
var PARAGRAPH_ELEMENTS = new Array(HTML_COUNT);
PARAGRAPH_ELEMENTS[HTML_P] = true;
PARAGRAPH_ELEMENTS[HTML_H1] = true;
PARAGRAPH_ELEMENTS[HTML_H2] = true;
PARAGRAPH_ELEMENTS[HTML_H3] = true;
PARAGRAPH_ELEMENTS[HTML_H4] = true;
PARAGRAPH_ELEMENTS[HTML_H5] = true;
PARAGRAPH_ELEMENTS[HTML_H6] = true;
PARAGRAPH_ELEMENTS[HTML_DIV] = true;
PARAGRAPH_ELEMENTS[HTML_PRE] = true;
PARAGRAPH_ELEMENTS[HTML_BLOCKQUOTE] = true;
var BLOCK_ELEMENTS = new Array(HTML_COUNT);
for (var i = 0; i < HTML_COUNT; i++)
BLOCK_ELEMENTS[i] = (CONTAINER_ELEMENTS[i] || PARAGRAPH_ELEMENTS[i]);
var INLINE_ELEMENTS = new Array(HTML_COUNT);
for (var i = 0; i < HTML_COUNT; i++)
INLINE_ELEMENTS[i] = !BLOCK_ELEMENTS[i];
var HEADING_ELEMENTS = new Array(HTML_COUNT);
HEADING_ELEMENTS[HTML_H1] = true;
HEADING_ELEMENTS[HTML_H2] = true;
HEADING_ELEMENTS[HTML_H3] = true;
HEADING_ELEMENTS[HTML_H4] = true;
HEADING_ELEMENTS[HTML_H5] = true;
HEADING_ELEMENTS[HTML_H6] = true;
var CONTAINERS_ALLOWING_CHILDREN = new Array(HTML_COUNT);
CONTAINERS_ALLOWING_CHILDREN[HTML_BODY] = true;
CONTAINERS_ALLOWING_CHILDREN[HTML_LI] = true;
CONTAINERS_ALLOWING_CHILDREN[HTML_CAPTION] = true;
CONTAINERS_ALLOWING_CHILDREN[HTML_TH] = true;
CONTAINERS_ALLOWING_CHILDREN[HTML_TD] = true;
CONTAINERS_ALLOWING_CHILDREN[HTML_FIGURE] = true;
CONTAINERS_ALLOWING_CHILDREN[HTML_FIGCAPTION] = true;
CONTAINERS_ALLOWING_CHILDREN[HTML_NAV] = true;
var OUTLINE_TITLE_ELEMENTS = new Array(HTML_COUNT);
OUTLINE_TITLE_ELEMENTS[HTML_H1] = true;
OUTLINE_TITLE_ELEMENTS[HTML_H2] = true;
OUTLINE_TITLE_ELEMENTS[HTML_H3] = true;
OUTLINE_TITLE_ELEMENTS[HTML_H4] = true;
OUTLINE_TITLE_ELEMENTS[HTML_H5] = true;
OUTLINE_TITLE_ELEMENTS[HTML_H6] = true;
OUTLINE_TITLE_ELEMENTS[HTML_FIGCAPTION] = true;
OUTLINE_TITLE_ELEMENTS[HTML_CAPTION] = true;
var Keys = {
HEADING_NUMBER: "uxwrite-heading-number",
FIGURE_NUMBER: "uxwrite-figure-number",
TABLE_NUMBER: "uxwrite-table-number",
SECTION_TOC: "tableofcontents",
FIGURE_TOC: "listoffigures",
TABLE_TOC: "listoftables",
SELECTION_HIGHLIGHT: "uxwrite-selection-highlight",
AUTOCORRECT_ENTRY: "uxwrite-autocorrect-entry",
UXWRITE_PREFIX: "uxwrite-",
NONE_STYLE: "__none",
AUTOCORRECT_CLASS: "uxwrite-autocorrect",
SELECTION_CLASS: "uxwrite-selection",
ABSTRACT_ELEMENT: "uxwrite-abstract",
SPELLING_CLASS: "uxwrite-spelling",
MATCH_CLASS: "uxwrite-match",
};
var ITEM_NUMBER_CLASSES = {
"uxwrite-heading-number": true,
"uxwrite-figure-number": true,
"uxwrite-table-number": true,
};
var OPAQUE_NODE_CLASSES = {
"uxwrite-heading-number": true,
"uxwrite-figure-number": true,
"uxwrite-table-number": true,
"tableofcontents": true,
"listoffigures": true,
"listoftables": true,
"uxwrite-selection-highlight": true,
"uxwrite-field": true,
};
function isContainerNode(node)
{
return CONTAINER_ELEMENTS[node._type];
}
function isParagraphNode(node)
{
return PARAGRAPH_ELEMENTS[node._type];
}
function isHeadingNode(node)
{
return HEADING_ELEMENTS[node._type];
}
function isBlockNode(node)
{
return BLOCK_ELEMENTS[node._type];
}
function isBlockOrNoteNode(node)
{
return BLOCK_ELEMENTS[node._type] || isNoteNode(node);
}
function isInlineNode(node)
{
return INLINE_ELEMENTS[node._type];
}
function isListNode(node)
{
var type = node._type;
return ((type == HTML_UL) || (type == HTML_OL));
}
function isTableCell(node)
{
switch (node._type) {
case HTML_TD:
case HTML_TH:
return true;
default:
return false;
}
}
function isRefNode(node)
{
return ((node._type == HTML_A) &&
node.hasAttribute("href") &&
node.getAttribute("href").charAt(0) == "#");
}
function isNoteNode(node)
{
if (node._type != HTML_SPAN)
return false;
var className = DOM_getAttribute(node,"class");
return ((className == "footnote") || (className == "endnote"));
}
function isEmptyNoteNode(node)
{
return isNoteNode(node) && !nodeHasContent(node);
}
function isItemNumber(node)
{
if (node.nodeType == Node.TEXT_NODE) {
return isItemNumber(node.parentNode);
}
else if (node.nodeType == Node.ELEMENT_NODE) {
if ((node._type == HTML_SPAN) && node.hasAttribute("class")) {
return ITEM_NUMBER_CLASSES[node.getAttribute("class")];
}
}
return false;
}
function isOpaqueNode(node)
{
if (node == null)
return false;
switch (node._type) {
case HTML_TEXT:
case HTML_COMMENT:
return isOpaqueNode(node.parentNode);
case HTML_IMG:
return true;
case HTML_A:
return node.hasAttribute("href");
case HTML_DOCUMENT:
return false;
default:
if (node.hasAttribute("class") && OPAQUE_NODE_CLASSES[node.getAttribute("class")])
return true;
else
return isOpaqueNode(node.parentNode);
}
}
function isAutoCorrectNode(node)
{
return ((node._type == HTML_SPAN) &&
(node.getAttribute("class") == Keys.AUTOCORRECT_CLASS));
}
function isSelectionHighlight(node)
{
return ((node.nodeType == Node.ELEMENT_NODE) &&
node.getAttribute("class") == Keys.SELECTION_CLASS);
}
function isSelectionSpan(node)
{
return ((node != null) &&
(node._type == HTML_SPAN) &&
(DOM_getAttribute(node,"class") == Keys.SELECTION_CLASS));
};
function isTOCNode(node)
{
if (node._type == HTML_NAV) {
var cls = node.getAttribute("class");
if ((cls == Keys.SECTION_TOC) ||
(cls == Keys.FIGURE_TOC) ||
(cls == Keys.TABLE_TOC))
return true;
}
return false;
}
function isInTOC(node)
{
if (isTOCNode(node))
return true;
if (node.parentNode != null)
return isInTOC(node.parentNode);
return false;
}
function isSpecialBlockNode(node)
{
switch (node._type) {
case HTML_TABLE:
case HTML_FIGURE:
return true;
case HTML_NAV:
return isTOCNode(node);
default:
return false;
}
}
function isAbstractSpan(node)
{
return ((node._type == HTML_SPAN) && node.hasAttribute(Keys.ABSTRACT_ELEMENT));
}