/[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 - (hide 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 wakaba 1.6 (function () {
2     var samiURL = 'http://suika.fam.cx/www/js/sami/script/sami-core.js';
3 wakaba 1.7 var swSamiURL = 'http://suika.fam.cx/swe/scripts/sw-sami.js';
4 wakaba 1.6
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 wakaba 1.7 SAMI.Script.loadScripts (new SAMI.List([swSamiURL]), function () {
15     SW.init ();
16     });
17 wakaba 1.6 });
18     }) ();
19    
20 wakaba 1.1 window.onload = function () {
21     createToolbar ();
22 wakaba 1.2 initializeHatenaStar();
23 wakaba 1.3 enableHTML5Support ();
24 wakaba 1.1 }; // window.onload
25    
26     function getElementsByClassName (c) {
27     if (document.getElementsByClassName) {
28     return document.getElementsByClassName (c);
29     } else {
30 wakaba 1.2 return [];
31 wakaba 1.1 }
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 wakaba 1.4 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 wakaba 1.1 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 wakaba 1.4
74     var form = getAncestorElement (container, 'FORM');
75     var ta = form.elements.text;
76     var insertText = function (added) {
77 wakaba 1.1 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 wakaba 1.4 }; // insertText
90    
91 wakaba 1.5 var addButton = function (labelHTML, title, onclick) {
92 wakaba 1.4 var button = document.createElement ('button');
93     button.setAttribute ('type', 'button');
94     button.innerHTML = labelHTML;
95 wakaba 1.5 button.title = title;
96 wakaba 1.4 button.onclick = onclick;
97     container.appendChild (button);
98     }; // addButton
99    
100 wakaba 1.5 addButton ('[#]', 'Insert a new anchor number', function () {
101 wakaba 1.4 var added = '[' + getNextAnchorNumber (ta.value) + '] ';
102     insertText (added);
103     });
104    
105 wakaba 1.5 addButton ('Now', 'Insert a timestamp', function () {
106 wakaba 1.4 var added = '[TIME[' + getGlobalDateAndTimeString (new Date) + ']]';
107     insertText (added);
108     });
109 wakaba 1.1 }
110 wakaba 1.2 } // 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 wakaba 1.3 /*
125 wakaba 1.2 if (Ten.DOM.loaded) {
126     Ten.DOM.loaded = false;
127     Ten.DOM.addObserver ();
128     }
129 wakaba 1.3 */
130 wakaba 1.2
131     Hatena.Star.SiteConfig = {
132     entryNodes: {
133 wakaba 1.3 '' /* body */: {
134 wakaba 1.2 uri: 'h1 a',
135     title: 'h1',
136     container: '.tools' /* .nav.tools */
137     }
138     }
139     };
140    
141 wakaba 1.3 /*
142 wakaba 1.2 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 wakaba 1.3 */
150 wakaba 1.2 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 wakaba 1.3
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 wakaba 1.2 */
168     } // initializeHatenaStar
169 wakaba 1.3
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