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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations) (download) (as text)
Sat Mar 14 01:03:44 2009 UTC (16 years, 1 month ago) by wakaba
Branch: MAIN
Changes since 1.4: +4 -3 lines
File MIME type: application/javascript
++ swe/scripts/ChangeLog	14 Mar 2009 01:03:37 -0000
	* sw.js: Added |title|s to the buttons.

2009-03-14  Wakaba  <wakaba@suika.fam.cx>

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24