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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (hide annotations) (download) (as text)
Sun Jul 12 05:01:45 2009 UTC (15 years, 9 months ago) by wakaba
Branch: MAIN
Changes since 1.5: +16 -0 lines
File MIME type: application/javascript
++ swe/scripts/ChangeLog	12 Jul 2009 05:01:39 -0000
2009-07-12  Wakaba  <wakaba@suika.fam.cx>

	* sw.js: Load sami-core.js.

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24