/[suikacvs]/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.8 - (hide annotations) (download) (as text)
Thu Aug 14 09:16:52 2008 UTC (15 years, 9 months ago) by wakaba
Branch: MAIN
Changes since 1.7: +43 -13 lines
File MIME type: application/javascript
++ ChangeLog	14 Aug 2008 09:14:23 -0000
	* cc-script.js, cc-style.css: Support for tab styling
	of subdoc sections.

	* cc-script.js (onbodyload): Scroll to the pointed
	element, if possible.

2008-08-14  Wakaba  <wakaba@suika.fam.cx>

++ html/WebHACC/ChangeLog	14 Aug 2008 09:16:45 -0000
	* Input.pm (id_prefix): Use the parent subdoc's id_prefix
	as the prefix of the subdoc id_prefix (e.g. subdoc-1-subdoc-1-
	for subdoc #1.1).
	(start_section): Set the role of the section element as subdoc.

	* Output.pm (start_section): Support for "subdoc" role.
	Use parent input's id_prefix as parent_id.

2008-08-14  Wakaba  <wakaba@suika.fam.cx>

1 wakaba 1.4 function addSourceToParseErrorList (idPrefix, dlId) {
2 wakaba 1.1 var parseErrorsList = document.getElementById
3 wakaba 1.4 (idPrefix + dlId);
4 wakaba 1.1 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 wakaba 1.5 line = parseInt (child.getAttribute ('data-line') || 0);
14     column = parseInt (child.getAttribute ('data-column') || 0);
15 wakaba 1.1 } 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 wakaba 1.3 .replace (/<var>U\+([0-9A-F]{4})<\/var>/g, function (s) {
21     return String.fromCharCode (parseInt (s, 16));
22     })
23 wakaba 1.1 .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 wakaba 1.2 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 wakaba 1.1 p.appendChild (code);
77     }
78     child.appendChild (p);
79     }
80     }
81     line = 0;
82     column = 0;
83     }
84     }
85     } // addSourceToParseErrorList
86    
87 wakaba 1.7 function insertNavSections (parentId) {
88     parentId = parentId || '';
89 wakaba 1.6 var el = document.createElement ('nav');
90 wakaba 1.7 el.id = parentId + 'nav-sections';
91 wakaba 1.6 el.innerHTML = '<ul></ul>';
92 wakaba 1.7
93     if (parentId == '') {
94     document.body.appendChild (el);
95     document.webhaccSections = {};
96     document.body.setAttribute ('data-scripted', '');
97     } else {
98     var section = document.getElementById (parentId);
99     section.appendChild (el);
100     section.webhaccSections = {};
101     }
102 wakaba 1.6 } // insertNavSections
103    
104 wakaba 1.7 function addSectionLink (id, label, parentId) {
105     parentId = parentId || '';
106    
107 wakaba 1.6 var el = document.createElement ('li');
108     el.innerHTML = '<a></a>';
109     el.firstChild.href = '#' + id;
110     el.firstChild.innerHTML = label;
111 wakaba 1.7 document.getElementById (parentId + 'nav-sections')
112     .firstChild.appendChild (el);
113    
114     var sections = document.webhaccSections;
115 wakaba 1.8 if (parentId != '') {
116     sections = document.getElementById (parentId).webhaccSections;
117     }
118 wakaba 1.7 sections[id] = document.getElementById (id);
119     sections[id].tabElement = el;
120    
121     if (id == 'input' || id == 'input-url') {
122     showTab (id);
123     document.webhaccNavigated = false;
124 wakaba 1.6 } else if (id == 'document-info' && !document.webhaccNavigated) {
125 wakaba 1.7 showTab (id);
126 wakaba 1.6 document.webhaccNavigated = false;
127 wakaba 1.8 } else if (id.match (/-document-info$/)) {
128     sections[id].tabElement.setAttribute ('data-active', '');
129 wakaba 1.6 } else {
130 wakaba 1.7 sections[id].style.display = 'none';
131 wakaba 1.6 }
132     } // addSectionLink
133    
134     function showTab (id) {
135 wakaba 1.8 var ids = [];
136 wakaba 1.6 if (id.match (/^line-/)) {
137 wakaba 1.8 ids = ['source-string'];
138 wakaba 1.6 } else if (id.match (/^node-/)) {
139 wakaba 1.8 ids = ['document-tree'];
140     } else if (id.match (/^subdoc-[^-]+-/)) {
141     var m;
142     ids = [''];
143     while (true) {
144     if (m = id.match (/^subdoc-[^-]+-/)) {
145     ids.push (ids[ids.length - 1] + m[0]);
146     id = id.substring (m[0].length);
147     } else {
148     break;
149     }
150     }
151     if (id.length > 0) {
152     if (id.match (/^line-/)) {
153     ids.push (ids[ids.length - 1] + 'source-string');
154     } else if (id.match (/^node-/)) {
155     ids.push (ids[ids.length - 1] + 'document-tree');
156     } else {
157     ids.push (ids[ids.length - 1] + id);
158     }
159     }
160     ids.shift (); // ''
161     } else if (id.match (/^input-/)) {
162     ids = ['input', id];
163     } else {
164     ids = [id];
165 wakaba 1.6 }
166    
167 wakaba 1.8 var sections = document.webhaccSections;
168     while (ids.length > 0) {
169     var myid = ids.shift ();
170     _showTab (sections, myid);
171     sections = sections[myid].webhaccSections;
172     if (!sections) break;
173 wakaba 1.7 }
174     } // showTab
175    
176     function _showTab (sections, id) {
177     if (sections[id]) {
178     for (var i in sections) {
179     sections[i].style.display = 'none';
180     sections[i].tabElement.removeAttribute ('data-active');
181 wakaba 1.6 }
182 wakaba 1.7 sections[id].style.display = 'block';
183     sections[id].tabElement.setAttribute ('data-active', '');
184 wakaba 1.6
185     document.webhaccNavigated = true;
186     }
187 wakaba 1.7 } // _showTab
188 wakaba 1.6
189     function getAncestorAnchorElement (e) {
190     do {
191 wakaba 1.8 if (e.nodeName == 'A' || e.nodeName == 'AREA') {
192 wakaba 1.6 return e;
193     }
194     e = e.parentNode;
195     } while (e);
196     } // getAncestorAnchorElement
197    
198     function onbodyclick (ev) {
199     var a = getAncestorAnchorElement (ev.target || ev.srcElement);
200     if (a) {
201     var href = a.getAttribute ('href');
202     if (href && href.match (/^#/)) {
203     var id = decodeURIComponent (href.substring (1));
204     showTab (id);
205     return true;
206     }
207     }
208     return true;
209     } // onbodyclick
210    
211     function onbodyload () {
212     // This block should be executed at the end of initialization process,
213     // since |decodeURIComponent| might throw.
214     if (!document.webhaccNavigated) {
215     var fragment = location.hash;
216     if (fragment) {
217     var id = decodeURIComponent (fragment.substring (1));
218     showTab (id);
219 wakaba 1.8 var el = document.getElementById (id);
220     if (el) el.scrollIntoView ();
221 wakaba 1.6 } else if (document.webhaccSections['result-summary']) {
222     showTab ('result-summary');
223     } else {
224     showTab ('input');
225     }
226     }
227     } // onbodyload
228    
229 wakaba 1.8 // $Date: 2008/08/14 07:19:44 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24