/[pub]/test/html-webhacc/cc-script.js
Suika

Contents of /test/html-webhacc/cc-script.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (show annotations) (download) (as text)
Sun Aug 10 11:49:43 2008 UTC (15 years, 9 months ago) by wakaba
Branch: MAIN
Changes since 1.5: +89 -1 lines
File MIME type: application/javascript
++ ChangeLog	10 Aug 2008 11:48:40 -0000
2008-08-10  Wakaba  <wakaba@suika.fam.cx>

	* cc-script.js: Functions for tabbing are added.

	* cc-style.css: Tab styling rules are added.

++ html/WebHACC/ChangeLog	10 Aug 2008 11:49:39 -0000
2008-08-10  Wakaba  <wakaba@suika.fam.cx>

	* Output.pm (html_header, start_section): Generate
	script elements for tab styling.

	* Result.pm: Link to error list section of transfer-protocol-level
	errors.

1 function addSourceToParseErrorList (idPrefix, dlId) {
2 var parseErrorsList = document.getElementById
3 (idPrefix + dlId);
4 if (!parseErrorsList) return;
5 var childs = parseErrorsList.childNodes;
6 var childsL = childs.length;
7 var line = 0;
8 var column = 0;
9 for (var i = 0; i < childsL; i++) {
10 var child = childs[i];
11 if (child.nodeType != 1) continue;
12 if (child.nodeName == 'DT') {
13 line = parseInt (child.getAttribute ('data-line') || 0);
14 column = parseInt (child.getAttribute ('data-column') || 0);
15 } else if (child.nodeName == 'DD') {
16 if (line > 0) {
17 var lineEl = document.getElementById (idPrefix + 'line-' + line);
18 if (lineEl) {
19 lineText = lineEl.innerHTML
20 .replace (/<var>U\+([0-9A-F]{4})<\/var>/g, function (s) {
21 return String.fromCharCode (parseInt (s, 16));
22 })
23 .replace (/&lt;/g, '<')
24 .replace (/&gt;/g, '>')
25 .replace (/&nbsp;/g, '\u00A0')
26 .replace (/&quot;/g, '"')
27 .replace (/&amp;/g, '&');
28 var p = document.createElement ('p');
29 p.className = 'source-fragment';
30 var code = document.createElement ('code');
31 if (lineText.length > 50) {
32 if (column - 25 > 0) {
33 p.appendChild (document.createElement ('var')).innerHTML
34 = '...';
35 lineText = lineText.substring (column - 25, column + 24);
36 code.appendChild (document.createTextNode
37 (lineText.substring (0, 24)));
38 code.appendChild (document.createElement ('mark'))
39 .appendChild (document.createTextNode
40 (lineText.charAt (24)));
41 code.appendChild (document.createTextNode
42 (lineText.substring (25, lineText.length)));
43 p.appendChild (code);
44 p.appendChild (document.createElement ('var')).innerHTML
45 = '...';
46 } else {
47 lineText = lineText.substring (0, 50);
48 if (column > 0) {
49 code.appendChild (document.createTextNode
50 (lineText.substring (0, column - 1)));
51 code.appendChild (document.createElement ('mark'))
52 .appendChild (document.createTextNode
53 (lineText.charAt (column - 1)));
54 code.appendChild (document.createTextNode
55 (lineText.substring (column, lineText.length)));
56 } else {
57 code.appendChild (document.createTextNode
58 (lineText.substring (0, 50)));
59 }
60 p.appendChild (code);
61 p.appendChild (document.createElement ('var')).innerHTML
62 = '...';
63 }
64 } else {
65 if (column > 0) {
66 code.appendChild (document.createTextNode
67 (lineText.substring (0, column - 1)));
68 code.appendChild (document.createElement ('mark'))
69 .appendChild (document.createTextNode
70 (lineText.charAt (column - 1)));
71 code.appendChild (document.createTextNode
72 (lineText.substring (column, lineText.length)));
73 } else {
74 code.appendChild (document.createTextNode (lineText));
75 }
76 p.appendChild (code);
77 }
78 child.appendChild (p);
79 }
80 }
81 line = 0;
82 column = 0;
83 }
84 }
85 } // addSourceToParseErrorList
86
87 function insertNavSections () {
88 var el = document.createElement ('nav');
89 el.id = 'nav-sections';
90 el.innerHTML = '<ul></ul>';
91 document.body.appendChild (el);
92 document.webhaccSections = {};
93 document.body.setAttribute ('data-scripted', '');
94 } // insertNavSections
95
96 function addSectionLink (id, label) {
97 var el = document.createElement ('li');
98 el.innerHTML = '<a></a>';
99 el.firstChild.href = '#' + id;
100 el.firstChild.innerHTML = label;
101 document.getElementById ('nav-sections').firstChild.appendChild (el);
102 document.webhaccSections[id] = document.getElementById (id);
103 document.webhaccSections[id].tabElement = el;
104 if (id == 'input') {
105 //
106 } else if (id == 'document-info' && !document.webhaccNavigated) {
107 showTab ('document-info');
108 document.webhaccNavigated = false;
109 } else {
110 document.webhaccSections[id].style.display = 'none';
111 }
112 } // addSectionLink
113
114 function showTab (id) {
115 var m;
116 if (id.match (/^line-/)) {
117 id = 'source-string';
118 } else if (id.match (/^node-/)) {
119 id = 'document-tree';
120 } else if (m = id.match (/^(subdoc-\d+-)/)) {
121 id = m[1];
122 }
123
124 if (document.webhaccSections[id]) {
125 for (var i in document.webhaccSections) {
126 document.webhaccSections[i].style.display = 'none';
127 document.webhaccSections[i].tabElement.removeAttribute ('data-active');
128 }
129 document.webhaccSections[id].style.display = 'block';
130 document.webhaccSections[id].tabElement.setAttribute ('data-active', '');
131
132 document.webhaccNavigated = true;
133 }
134
135 } // showTab
136
137 function getAncestorAnchorElement (e) {
138 do {
139 if (e.nodeName == 'A') {
140 return e;
141 }
142 e = e.parentNode;
143 } while (e);
144 } // getAncestorAnchorElement
145
146 function onbodyclick (ev) {
147 var a = getAncestorAnchorElement (ev.target || ev.srcElement);
148 if (a) {
149 var href = a.getAttribute ('href');
150 if (href && href.match (/^#/)) {
151 var id = decodeURIComponent (href.substring (1));
152 showTab (id);
153 return true;
154 }
155 }
156 return true;
157 } // onbodyclick
158
159 function onbodyload () {
160 // This block should be executed at the end of initialization process,
161 // since |decodeURIComponent| might throw.
162 if (!document.webhaccNavigated) {
163 var fragment = location.hash;
164 if (fragment) {
165 var id = decodeURIComponent (fragment.substring (1));
166 showTab (id);
167 } else if (document.webhaccSections['result-summary']) {
168 showTab ('result-summary');
169 } else {
170 showTab ('input');
171 }
172 }
173 } // onbodyload
174
175 // $Date: 2008/07/21 12:56:33 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24