]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - themes/default/wikicommon.js
Remove $Id$
[SourceForge/phpwiki.git] / themes / default / wikicommon.js
1 // Common Javascript support functions.
2 // $Id$
3
4 /* Globals:
5 var data_path = '/phpwiki';
6 var pagename  = 'HomePage';
7 var script_url= '/wiki';
8 var stylepath = data_path+'/themes/MonoBook/';
9 var folderArrowPath = data_path+'/themes/default/images';
10 var use_path_info = true;
11 */
12
13 function escapeQuotes(text) {
14   var re=new RegExp("'","g");
15   text=text.replace(re,"\\'");
16   re=new RegExp('"',"g");
17   text=text.replace(re,'"');
18   re=new RegExp("\\n","g");
19   text=text.replace(re,"\\n");
20   return text;
21 }
22
23 function WikiURL(page) {
24     if (typeof page == "undefined")
25         page = pagename;
26     if (use_path_info) {
27         return script_url + '/' + escapeQuotes(page) + '?';
28     } else {
29         return script_url + '?pagename=' + escapeQuotes(page) + '&';
30     }
31 }
32
33 function flipAll(formObj) {
34   var isFirstSet = -1;
35   for (var i=0; i < formObj.length; i++) {
36       fldObj = formObj.elements[i];
37       if ((fldObj.type == 'checkbox') && (fldObj.name.substring(0,2) == 'p[')) {
38          if (isFirstSet == -1)
39            isFirstSet = (fldObj.checked) ? true : false;
40          fldObj.checked = (isFirstSet) ? false : true;
41        }
42    }
43 }
44
45 function toggletoc(a, open, close, toclist) {
46   var toc=document.getElementById(toclist)
47   if (toc.style.display=='none') {
48     toc.style.display='block'
49     a.title='"._("Click to hide the TOC")."'
50     a.src = open
51   } else {
52     toc.style.display='none';
53     a.title='"._("Click to display")."'
54     a.src = close
55   }
56 }
57
58 // Global external objects used by this script.
59 /*extern ta, stylepath, skin */
60
61 // add any onload functions in this hook (please don't hard-code any events in the xhtml source)
62 var doneOnloadHook;
63
64 if (!window.onloadFuncts) {
65         var onloadFuncts = [];
66 }
67
68 function addOnloadHook(hookFunct) {
69         // Allows add-on scripts to add onload functions
70         onloadFuncts[onloadFuncts.length] = hookFunct;
71 }
72
73 function hookEvent(hookName, hookFunct) {
74         if (window.addEventListener) {
75                 window.addEventListener(hookName, hookFunct, false);
76         } else if (window.attachEvent) {
77                 window.attachEvent("on" + hookName, hookFunct);
78         }
79 }
80
81 // Todo: onloadhook to re-establish folder state in pure js, no cookies. same for toc.
82 function showHideFolder(id) {
83     var div = document.getElementById(id+'-body');
84     if ( div == null) return;
85     var img = document.getElementById(id+'-img');
86     var expires = new Date(); // 30 days
87     expires.setTime(expires.getTime() + (30 * 24 * 60 * 60 * 1000));
88     var suffix = " expires="+expires.toGMTString();   //+"; path="+data_path;
89     //todo: invalidate cache header
90     if ( div.style.display == 'none' ) {
91         div.style.display = 'block';
92         img.src = folderArrowPath + '/folderArrowOpen.png';
93         document.cookie = "folder_"+id+"=Open;"+suffix;
94     } else {
95         div.style.display = 'none';
96         img.src = folderArrowPath + '/folderArrowClosed.png';
97         document.cookie = "folder_"+id+"=Closed;"+suffix;
98     }
99 }
100
101 function setupshowHideFolder() {
102     var ids = ["p-tb", "p-tbx", "p-tags", "p-rc" /*,"toc"*/];
103     for (var i = 0; i < ids.length; i++) {
104         if (ids[i]) {
105             var id = ids[i];
106             var cookieStr = "folder_"+id+"=";
107             var cookiePos = document.cookie.indexOf(cookieStr);
108             if (cookiePos > -1) {
109                 var body = document.getElementById(id+'-body');
110                 if (body) body.style.display = document.cookie.charAt(cookiePos + cookieStr.length) == "C" ? 'block' : 'none';
111                 showHideFolder(id);
112             }
113         }
114     }
115 }
116
117 hookEvent("load", setupshowHideFolder);
118
119 function runOnloadHook() {
120         // don't run anything below this for non-dom browsers
121         if (doneOnloadHook || !(document.getElementById && document.getElementsByTagName)) {
122                 return;
123         }
124
125         // set this before running any hooks, since any errors below
126         // might cause the function to terminate prematurely
127         doneOnloadHook = true;
128
129         sortables_init();
130
131         // Run any added-on functions
132         for (var i = 0; i < onloadFuncts.length; i++) {
133                 onloadFuncts[i]();
134         }
135 }
136
137 //note: all skins should call runOnloadHook() at the end of html output,
138 //      so the below should be redundant. It's there just in case.
139 hookEvent("load", runOnloadHook);
140
141 //hookEvent("load", mwSetupToolbar);
142
143 // This script was provided for free by
144 // http://www.howtocreate.co.uk/tutorials/javascript/domcss
145 // See http://www.howtocreate.co.uk/jslibs/termsOfUse.html
146 function getAllSheets() {
147   if( !window.ScriptEngine && navigator.__ice_version ) { return document.styleSheets; }
148   if( document.getElementsByTagName ) { var Lt = document.getElementsByTagName('link'), St = document.getElementsByTagName('style');
149   } else if( document.styleSheets && document.all ) { var Lt = document.all.tags('LINK'), St = document.all.tags('STYLE');
150   } else { return []; } for( var x = 0, os = []; Lt[x]; x++ ) {
151     var rel = Lt[x].rel ? Lt[x].rel : Lt[x].getAttribute ? Lt[x].getAttribute('rel') : '';
152     if( typeof( rel ) == 'string' && rel.toLowerCase().indexOf('style') + 1 ) { os[os.length] = Lt[x]; }
153   } for( var x = 0; St[x]; x++ ) { os[os.length] = St[x]; } return os;
154 }
155 function changeStyle() {
156   for( var x = 0, ss = getAllSheets(); ss[x]; x++ ) {
157     if( ss[x].title ) { ss[x].disabled = true; }
158     for( var y = 0; y < arguments.length; y++ ) {
159      if( ss[x].title == arguments[y] ) { ss[x].disabled = false; }
160 } } }
161 function PrinterStylesheet() {
162   changeStyle('Printer');
163 }