/[suikacvs]/webroot/swe/scripts/sw.js
Suika

Contents of /webroot/swe/scripts/sw.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (show annotations) (download) (as text)
Sun Jul 12 06:04:22 2009 UTC (15 years, 9 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.6: +4 -1 lines
File MIME type: application/javascript
++ swe/scripts/ChangeLog	12 Jul 2009 06:04:15 -0000
	* sw-sami.js: New script.  It loads search result and insert into
	the document.

	* sw.js: Loads sw-sami.js.

2009-07-12  Wakaba  <wakaba@suika.fam.cx>

1 (function () {
2 var samiURL = 'http://suika.fam.cx/www/js/sami/script/sami-core.js';
3 var swSamiURL = 'http://suika.fam.cx/swe/scripts/sw-sami.js';
4
5 var script = document.createElement ('script');
6 script.src = samiURL;
7 script.defer = true;
8 script.async = true;
9 document.body.appendChild (script);
10
11 if (!self.SAMI) self.SAMI = {};
12 SAMI.onLoadFunctions = SAMI.onLoadFunctions || [];
13 SAMI.onLoadFunctions.push (function () {
14 SAMI.Script.loadScripts (new SAMI.List([swSamiURL]), function () {
15 SW.init ();
16 });
17 });
18 }) ();
19
20 window.onload = function () {
21 createToolbar ();
22 initializeHatenaStar();
23 enableHTML5Support ();
24 }; // window.onload
25
26 function getElementsByClassName (c) {
27 if (document.getElementsByClassName) {
28 return document.getElementsByClassName (c);
29 } else {
30 return [];
31 }
32 } // getElementsByClassName
33
34 function getAncestorElement (n, t) {
35 while (n != null) {
36 if (n.nodeName == t) {
37 return n;
38 } else {
39 n = n.parentNode;
40 }
41 }
42 return null;
43 } // getAncestorElement
44
45 function getGlobalDateAndTimeString (date) {
46 var r = '';
47 r = date.getUTCFullYear (); // JS does not support years 0001-0999
48 r += '-' + ('0' + (date.getUTCMonth () + 1)).slice (-2);
49 r += '-' + ('0' + date.getUTCDate ()).slice (-2);
50 r += 'T' + ('0' + date.getUTCHours ()).slice (-2);
51 r += ':' + ('0' + date.getUTCMinutes ()).slice (-2);
52 r += ':' + ('0' + date.getUTCSeconds ()).slice (-2);
53 r += '.' + (date.getUTCMilliseconds () + '00').slice (2);
54 r += 'Z';
55 return r;
56 } // getGlobalDateAndTimeString
57
58 function getNextAnchorNumber (s) {
59 var lastId = 0;
60 s.replace (/\[([0-9]+)\]/g, function (l, n) {
61 var v = parseInt (n);
62 if (v > lastId) {
63 lastId = v;
64 }
65 });
66 return lastId + 1;
67 } // getNextAnchorNumber
68
69 function createToolbar () {
70 var containers = getElementsByClassName ('text-toolbar');
71 for (var i = 0; i < containers.length; i++) {
72 var container = containers[i];
73
74 var form = getAncestorElement (container, 'FORM');
75 var ta = form.elements.text;
76 var insertText = function (added) {
77 var st = ta.scrollTop;
78 var ss = ta.selectionStart;
79 var se = (ss != ta.selectionEnd);
80 ta.value = ta.value.substring (0, ta.selectionStart)
81 + added + ta.value.substring (ta.selectionEnd);
82 if (se) {
83 ta.setSelectionRange (ss, ss + added.length);
84 } else {
85 ta.setSelectionRange (ss + added.length, ss + added.length);
86 }
87 ta.scrollTop = st;
88 ta.focus ();
89 }; // insertText
90
91 var addButton = function (labelHTML, title, onclick) {
92 var button = document.createElement ('button');
93 button.setAttribute ('type', 'button');
94 button.innerHTML = labelHTML;
95 button.title = title;
96 button.onclick = onclick;
97 container.appendChild (button);
98 }; // addButton
99
100 addButton ('[#]', 'Insert a new anchor number', function () {
101 var added = '[' + getNextAnchorNumber (ta.value) + '] ';
102 insertText (added);
103 });
104
105 addButton ('Now', 'Insert a timestamp', function () {
106 var added = '[TIME[' + getGlobalDateAndTimeString (new Date) + ']]';
107 insertText (added);
108 });
109 }
110 } // createToolbar
111
112 function initializeHatenaStar () {
113 if (!window.Hatena) {
114 window.Hatena = {};
115 }
116 if (!Hatena.Star) {
117 Hatena.Star = {};
118 }
119 if (!Hatena.Star.onLoadFunctions) {
120 Hatena.Star.onLoadFunctions = [];
121 }
122
123 Hatena.Star.onLoadFunctions.push (function () {
124 /*
125 if (Ten.DOM.loaded) {
126 Ten.DOM.loaded = false;
127 Ten.DOM.addObserver ();
128 }
129 */
130
131 Hatena.Star.SiteConfig = {
132 entryNodes: {
133 '' /* body */: {
134 uri: 'h1 a',
135 title: 'h1',
136 container: '.tools' /* .nav.tools */
137 }
138 }
139 };
140
141 /*
142 var realLoadNewEntries = Hatena.Star.EntryLoader.loadNewEntries;
143 Hatena.Star.EntryLoader.loadNewEntries = function (node) {
144 if (!node) {
145 node = document.documentElement;
146 }
147 realLoadNewEntries.apply (this, [node]);
148 };
149 */
150 setTimeout (function () {
151 Ten.DOM.dispatchEvent ('onload');
152 }, 1);
153 }); // Hatena.Star.onLoadFunctions.push'ed function
154
155 var hsScript = document.createElement ('script');
156 hsScript.defer = true;
157 hsScript.src = 'http://s.hatena.ne.jp/js/HatenaStar.js';
158 document.documentElement.lastChild.appendChild (hsScript);
159
160 /*
161 In SuikaWiki, a WikiName can be associated with multiple WikiPages,
162 while a WikiPage can be associated with multiple WikiNames. It would
163 be desired to associate Hatena Stars with WikiPages in theory.
164 However, WikiPages do not have permalinks at the moment.
165
166 See <http://suika.fam.cx/%7Ewakaba/wiki/sw/n/%E3%81%AF%E3%81%A6%E3%81%AA%E3%82%B9%E3%82%BF%E3%83%BC#anchor-2>.
167 */
168 } // initializeHatenaStar
169
170 function enableHTML5Support () {
171 window.TEROnLoad = function () {
172 new TER.Delta (document.body);
173 }; // window.TEROnLoad
174
175 var timeScript = document.createElement ('script');
176 timeScript.defer = true;
177 timeScript.charset = 'utf-8';
178 timeScript.src = 'http://suika.fam.cx/www/style/ui/time.js';
179 document.documentElement.lastChild.appendChild (timeScript);
180 } // enableHTML5Support
181
182 /* Hack for IE */
183 document.createElement ('time');

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24