for (i = 0, l = head_array.length; i < l; i++) {
if (false && i > 0) {
// Firefox/38.0 在兩個 hade 相鄰的情況,anchor 似乎無法正常作動。
// 只好手動助之加入
// ** 無用! 需於 中手動加入!
matched = node.nextSibling;
while (matched.nodeType === TEXT_NODE)
matched = matched.nextSibling;
if (matched === head_array[i])
new_node({
p : ' '
}, [ node, 3 ]);
}
set_class(node = head_array[i], auto_TOC.CSS_prefix + 'head');
new_node({
a : '📑',
href : href + id,
C : auto_TOC.CSS_prefix + 'back',
// T : '↑Back to TOC',
R : back_title,
target : '_self'
// TODO: element 本身可能是浮動的,因此應跳到下一個內文本文的元素,並採用
// .nextElementSibling.scrollIntoView()。
// @see function go_to_anchor(anchor) @ reviews.original.js
}, [ node, 1 ]);
}
list_array = [
// 設定目錄定位。
{
span : [ {
span : CSS_position_sticky ? auto_TOC.icon.unpin : '',
onclick : function() {
node.style.position = node.style.position
//
? '' : 'static';
this.innerHTML = auto_TOC.icon[
//
node.style.position ? 'pin' : 'unpin'];
set_height();
},
// gettext_config:{"id":"pin-unpin-the-toc"}
R : 'Pin/unpin the TOC'
}, {
span : auto_TOC.icon.right,
onclick : function() {
node.style.cssFloat = node.style.cssFloat
//
? '' : 'right';
this.innerHTML = auto_TOC.icon[
//
node.style.cssFloat ? 'left' : 'right'];
},
// gettext_config:{"id":"set-toc-to-left-or-right"}
R : 'Set TOC to left or right'
} ],
C : auto_TOC.CSS_prefix + 'position_control'
}, {
// U+1F4D1 BOOKMARK TABS
// http://www.utf8-chartable.de/unicode-utf8-table.pl?start=128000
// http://www.fileformat.info/info/emoji/list.htm
// http://codepoints.net/U+1F4D1
div : [ '📑', {
// gettext_config:{"id":"contents-of-$1"}
T : title ? [ 'Contents of [%1]', options.title_name
//
&& options.title_name(title) || title ]
// gettext_config:{"id":"contents"}
: 'Contents'
} ],
C : auto_TOC.CSS_prefix + 'control',
// gettext_config:{"id":"expand"}
title : gettext('expand'),
onclick : function() {
var expand_now = toggle_display(TOC_list) !== 'none';
// show/hide (顯示/隱藏), 展開/收合目錄 click to expand
// gettext_config:{"id":"collapse"}
this.title = gettext(expand_now ? 'collapse'
// gettext_config:{"id":"expand"}
: 'expand');
if (expand_now)
set_height();
}
}, {
div : list_array,
id : TOC_list,
C : auto_TOC.CSS_prefix + 'list'
} ];
var class_name = auto_TOC.CSS_prefix
// 若是不具有此屬性,則明確指定不使用此屬性;預防有瀏覽器雖然已實現此屬性,但是並沒有被本函式庫偵測出來。
+ (CSS_position_sticky ? 'box' : 'box_no_sticky');
if (node = get_element(id)) {
_.remove_all_child(node);
set_class(node, class_name);
new_node(list_array, node);
} else {
node = new_node({
div : list_array,
id : id,
C : class_name
}, [ content_node, 1 ]);
}
// auto_TOC.set_text(id);
// 作 cache。
TOC_list = get_element(TOC_list);
// 載入 CSS resource(s)。
// include resources of module.
library_namespace.run(library_namespace.get_module_path(
module_name, 'auto_TOC.css'));
} else
library_namespace.warn('auto_TOC: No ' + level + ' found.');
// Release memory. 釋放被占用的記憶體.
head_array = list_array = null;
}
// title 最大長度 in px。
auto_TOC.max_length = 80;
// CSS class name 前綴。
auto_TOC.CSS_prefix = 'TOC_';
// TODO: set domain
auto_TOC.set_text = function(id) {
// 目錄
gettext.translate_nodes(get_element(id).childNodes);
// ↑回到目錄
gettext.translate_nodes('.' + auto_TOC.CSS_prefix + 'back');
};
auto_TOC.icon = {
pin : '⚓',
unpin : '⇧',
left : '⇦',
right : '⇨'
};
_// JSDT:_module_
.auto_TOC = auto_TOC;
// ---------------------------------------------------------------------//
function random_color(from, gap) {
function scale(from, gap) {
return from + (Math.random() * gap) | 0;
}
from |= 0;
if (from < 0 || from > 255)
from = 0;
if (!gap)
gap = 256 - from;
var color = [], i = 3;
while (i--)
color.push(scale(from, gap));
return 'rgb(' + color + ');';
}
function parse_frame(document_node) {
function parse_frameset(frameset) {
var nodes = frameset.childNodes, i = 0, length = nodes.length, tag, list = [], cols = frameset.cols
.trim(), cell, node, background = random_color(210),
//
get_info = function() {
var name = node.name + '(' + layout.shift() + ')';
return node.src ? {
b : name,
title : node.src
} : name;
},
// IE 先看 cols,之後才看 rows。
layout = (cols || frameset.rows.trim()).split(/\s*,\s*/);
// cols = !!cols;
for (; i < length; i++) {
if ((tag = (node = nodes[i]).tagName)
&& (cell = (tag = tag.toLowerCase()) === 'frame' ? {
a : get_info(),
href : '#',
onclick : function() {
// application.debug.show_value first
if (library_namespace.show_value)
// Error null: 462 [Error] (facility
// code
// 10): 遠端伺服器不存在或無法使用
try {
library_namespace.show_value(this,
this.id || this.name);
} catch (e) {
library_namespace.error(e);
}
else {
library_namespace.warn(
//
'Need to include application.debug first!'
//
+ ' Trying now...');
library_namespace.run('application.debug');
}
return false;
}.bind(node)
} : tag === 'frameset' && [ {
div : get_info(),
S : 'width:100%;color:#e73;background-color:'
//
+ background + ';'
}, parse_frameset(node) ])) {
cell = {
td : cell,
S : 'background-color:' + background + ';'
};
list.push(cols ? cell : {
tr : cell
});
}
}
return {
table : {
tbody : cols ? {
tr : list
} : list
},
S : 'width:100%;border-collapse:collapse;'
};
}
try {
// IE 只會取第一個