1 | # this file must be UTF-8 encoded
|
---|
2 | #######################################################################
|
---|
3 | # PAGE STYLES
|
---|
4 | #######################################################################
|
---|
5 |
|
---|
6 | package Style
|
---|
7 |
|
---|
8 | # to use this style system output
|
---|
9 | # _header_
|
---|
10 | # all your page content, then
|
---|
11 | # _footer_
|
---|
12 |
|
---|
13 | # use the page parameter 'style' to choose the appropriate style
|
---|
14 |
|
---|
15 | # Current values: "html" and "xhtml"
|
---|
16 | _compliance_ {html}
|
---|
17 |
|
---|
18 | # the style system uses
|
---|
19 | # _pagetitle_ - what gets displayed at the top of the browser window
|
---|
20 | # _pagescriptextra_ - any extra javascript you want included in the header
|
---|
21 | # _pagebannerextra_ - anything extra you want displayed in the page banner
|
---|
22 | # _pagefooterextra_ - anything extra you want displayed in the footer
|
---|
23 |
|
---|
24 | # defaults for the above macros
|
---|
25 | _pagetitle_ {_collectionname_}
|
---|
26 | _pagescriptfileextra_ {}
|
---|
27 | _pagescriptextra_ {}
|
---|
28 | _pagebannerextra_ {}
|
---|
29 | _pagefooterextra_ {}
|
---|
30 |
|
---|
31 | # collection specific style and script may be set in collection's extra.dm
|
---|
32 | # using the following macros
|
---|
33 | _collectionspecificstyle_ {}
|
---|
34 | _collectionspecificscript_ {}
|
---|
35 |
|
---|
36 | # it also relies on lots of Globals, the most important of these are:
|
---|
37 | # _cookie_ - put in the cgi header
|
---|
38 | # _globalscripts_ - javascript stuff
|
---|
39 | # _imagecollection_
|
---|
40 | # _imagehome_
|
---|
41 | # _imagehelp_
|
---|
42 | # _imagepref_
|
---|
43 | # _imagethispage_ (this is now not an image, but text. should be renamed?)
|
---|
44 | # _linkotherversion_
|
---|
45 |
|
---|
46 | # _httpiconchalk_ - the image down the left of the page - is now done
|
---|
47 | # by the style sheet.
|
---|
48 |
|
---|
49 | _header_ {_cgihead_
|
---|
50 | _htmlhead_(class="bgimage")_startspacer__pagebanner_
|
---|
51 | }
|
---|
52 |
|
---|
53 | _header_[v=1] {_cgihead_
|
---|
54 | _htmlhead__pagebanner_
|
---|
55 | }
|
---|
56 |
|
---|
57 | # _cgihead_ {Content-type: text/html
|
---|
58 | # _cookie_
|
---|
59 | #
|
---|
60 | # }
|
---|
61 | _cgihead_{}
|
---|
62 |
|
---|
63 |
|
---|
64 | # any declarations relating to CSS that should go in the html head part.
|
---|
65 | # declarations containing images are done here so the path is correct
|
---|
66 | # at runtime.
|
---|
67 |
|
---|
68 | _csslink_{
|
---|
69 | <link rel="stylesheet" href="_cssfilelink_" type="text/css"
|
---|
70 | title="Greenstone Style" charset="UTF-8" _linktagend_
|
---|
71 | <link rel="alternate stylesheet" href="_httpstyle_/style-print.css"
|
---|
72 | type="text/css" title="Printer" charset="UTF-8" media="print, screen" _linktagend_
|
---|
73 | <link rel="stylesheet" href="_httpstyle_/style-print.css" type="text/css"
|
---|
74 | title="Printer" charset="UTF-8" media="print" _linktagend_
|
---|
75 | _cssfilelinkextra_
|
---|
76 | }
|
---|
77 |
|
---|
78 | _cssheader_ {
|
---|
79 | _csslink_
|
---|
80 | <style type="text/css">
|
---|
81 | body.bgimage \{ background: url("_httpimages_/chalk.gif") scroll repeat-y left top; \}
|
---|
82 | div.navbar \{ background-image: url("_httpimages_/bg_green.png"); \}
|
---|
83 | div.divbar \{ background-image: url("_httpimages_/bg_green.png"); \}
|
---|
84 | a.navlink \{ background-image: url("_httpimages_/bg_off.png"); \}
|
---|
85 | a.navlink_sel \{ background-image: url("_httpimages_/bg_green.png"); \}
|
---|
86 | a.navlink:hover \{ background-image: url("_httpimages_/bg_on.png"); \}
|
---|
87 | p.bannertitle \{background-image: url("_httpimages_/banner_bg.png"); \}
|
---|
88 | p.collectiontitle \{background-image: url("_httpimages_/banner_bg.png"); \}
|
---|
89 | </style>
|
---|
90 | _collectionspecificstyle_
|
---|
91 |
|
---|
92 | }
|
---|
93 |
|
---|
94 | # separate macro so it can be easily overridden for customised collections
|
---|
95 | _cssfilelink_ {_httpstyle_/style.css}
|
---|
96 |
|
---|
97 | # separate macro so additional stylesheets (to those included by default) can be specified
|
---|
98 | _cssfilelinkextra_ {}
|
---|
99 |
|
---|
100 | # Languages that should be displayed right-to-left
|
---|
101 | _htmlextra_ [l=ar] { dir=rtl }
|
---|
102 | _htmlextra_ [l=fa] { dir=rtl }
|
---|
103 | _htmlextra_ [l=he] { dir=rtl }
|
---|
104 | _htmlextra_ [l=ur] { dir=rtl }
|
---|
105 | _htmlextra_ [l=ps] { dir=rtl }
|
---|
106 | _htmlextra_ [l=prs] { dir=rtl }
|
---|
107 |
|
---|
108 | # htmlhead uses:
|
---|
109 | # _1_ - extra parameters for the body tag
|
---|
110 | # _pagetitle_
|
---|
111 | # _globalscripts_
|
---|
112 | _htmlhead_ {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
---|
113 | "http://www.w3.org/TR/html4/loose.dtd">
|
---|
114 |
|
---|
115 | <html_htmlextra_>
|
---|
116 | <head>
|
---|
117 | <title>_pagetitle_</title>
|
---|
118 | <meta name="Greenstone_version_number" content="_versionnum_" _metatagend_
|
---|
119 | _globalscripts_
|
---|
120 | _cssheader_
|
---|
121 | _document:documentheader_
|
---|
122 | </head>
|
---|
123 |
|
---|
124 | <body _1_>
|
---|
125 | }
|
---|
126 |
|
---|
127 | # Link and meta tags must be closed differently for HTML/XHTML validation
|
---|
128 | _linktagend_ {_If_("_compliance_" eq "xhtml",/>,>)}
|
---|
129 | _metatagend_ {_If_("_compliance_" eq "xhtml",/>,>)}
|
---|
130 |
|
---|
131 | _spacerwidth_ {65}
|
---|
132 |
|
---|
133 | # _startspacer_ is a spacer that gives pages a left-hand margin.
|
---|
134 | # It must eventually be closed by _endspacer_.
|
---|
135 | _startspacer_ {
|
---|
136 | <div id="page">
|
---|
137 | }
|
---|
138 |
|
---|
139 | # If you want to move the home/help/pref buttons, override this to be empty
|
---|
140 | # and then explicitly include _globallinks_ somewhere else
|
---|
141 | # on the page
|
---|
142 | _optgloballinks_ {_globallinks_}
|
---|
143 |
|
---|
144 | # _bannertitle_ is defined in nav_css/ns4.dm, and is either text or
|
---|
145 | # a banner image
|
---|
146 | _pagebanner_ {
|
---|
147 | <!-- page banner (\_style:pagebanner\_) -->
|
---|
148 | <div id="banner">
|
---|
149 | <div class="pageinfo">
|
---|
150 | <p class="bannerlinks">_optgloballinks_</p>
|
---|
151 | _bannertitle_
|
---|
152 | </div>
|
---|
153 | <div class="collectimage">_imagecollection_</div>
|
---|
154 | </div>
|
---|
155 | <div class="bannerextra">_pagebannerextra_</div>
|
---|
156 | <!-- end of page banner -->
|
---|
157 | _If_("_activateweb20_" eq "2",
|
---|
158 | _If_("_activatetalkback_" eq "1",_talkback:uploadForm_)
|
---|
159 | )
|
---|
160 | }
|
---|
161 |
|
---|
162 | _pagebanner_[v=1] {
|
---|
163 | <!-- page banner - text version [v=1] (\_style:pagebanner\_) -->
|
---|
164 | <center><h2><b><u>_imagecollection_</u></b></h2></center><p>
|
---|
165 | _optgloballinks_
|
---|
166 | _pagebannerextra_
|
---|
167 | <p>
|
---|
168 | <!-- end of page banner -->
|
---|
169 | _If_("_activateweb20_" eq "2",
|
---|
170 | _If_("_activatetalkback_" eq "1",_talkback:uploadForm_)
|
---|
171 | )
|
---|
172 | }
|
---|
173 |
|
---|
174 | # note we no longer close off one of the startspacer tables here!!
|
---|
175 | _footer_ {
|
---|
176 | _If_("_cgiargtalkback_" eq "1",_talkback:monitorUpload_)
|
---|
177 | <!-- page footer (\_style:footer\_) -->
|
---|
178 | _pagefooterextra__endspacer__htmlfooter_
|
---|
179 | }
|
---|
180 |
|
---|
181 | # v=1 footer: not using startspacer in the header, so dont put it in the footer
|
---|
182 | _footer_ [v=1]{
|
---|
183 | _If_("_cgiargtalkback_" eq "1",_talkback:monitorUpload_)
|
---|
184 | <!-- page footer [v=1] (\_style:footer\_) -->
|
---|
185 | _pagefooterextra_
|
---|
186 | _htmlfooter_
|
---|
187 | }
|
---|
188 |
|
---|
189 | # close off anything opened by startspacer
|
---|
190 | _endspacer_ {
|
---|
191 | </div> <!-- id=page -->
|
---|
192 | }
|
---|
193 |
|
---|
194 |
|
---|
195 | _htmlfooter_ {
|
---|
196 | </body>
|
---|
197 | </html>
|
---|
198 | }
|
---|
199 |
|
---|
200 | _loginscript_ {
|
---|
201 | function appendUsernameArgs(id,addOn)
|
---|
202 | \{
|
---|
203 | var a=document.getElementById(id);
|
---|
204 | var url = a.getAttribute("href");
|
---|
205 | if (url == "") \{
|
---|
206 | url = document.location.toString();
|
---|
207 | \}
|
---|
208 |
|
---|
209 | //alert("url before = " + url);
|
---|
210 |
|
---|
211 | // clear out any earlier user name/authentication values
|
---|
212 | url = url.replace(/(&|\\\\?)uan=\\d\{0,1\}/g,"");
|
---|
213 | url = url.replace(/(&|\\\\?)un=[a-z0-9:\\-]*/g,"");
|
---|
214 | url = url.replace(/(&|\\\\?)pw=[a-z0-9:\\-]*/g,"");
|
---|
215 |
|
---|
216 | //alert("url after = " + url);
|
---|
217 |
|
---|
218 | var gwcgi = "_gwcgi_";
|
---|
219 |
|
---|
220 | var tailUrl = url.substr(url.length-gwcgi.length);
|
---|
221 |
|
---|
222 | url += (tailUrl == "_gwcgi_") ? "?" : "&";
|
---|
223 | url += addOn;
|
---|
224 |
|
---|
225 | //alert("url with add on = " + url);
|
---|
226 |
|
---|
227 | a.setAttribute("href",url);
|
---|
228 | \}
|
---|
229 | }
|
---|
230 |
|
---|
231 |
|
---|
232 | # imagescript only used in nav_ns4.dm
|
---|
233 | _globalscripts_{
|
---|
234 | <script type="text/javascript" src="_httpscript_/gsajaxapi.js"></script>
|
---|
235 |
|
---|
236 | <script language="javascript" type="text/javascript">
|
---|
237 | function gsdefined(val)
|
---|
238 | \{
|
---|
239 | return (typeof(val) != "undefined");
|
---|
240 | \}
|
---|
241 |
|
---|
242 | var un = "_cgiargun_";
|
---|
243 | var ky = "_cgiargky_";
|
---|
244 | var gsapi = new GSAjaxAPI("_gwcgi_","_cgiargc_","_cgiargun_","_cgiargky_");
|
---|
245 |
|
---|
246 | // http://stackoverflow.com/questions/6312993/javascript-seconds-to-time-with-format-hhmmss
|
---|
247 | // Call as: alert(timestamp.printTime());
|
---|
248 | function formatTime(timestamp) \{
|
---|
249 | var int_timestamp = parseInt(timestamp, 10); // don't forget the second param
|
---|
250 | var date = new Date(int_timestamp);
|
---|
251 | return date.toLocaleDateString() + " " + date.toLocaleTimeString();
|
---|
252 | \}
|
---|
253 |
|
---|
254 | function loadUserComments() \{
|
---|
255 |
|
---|
256 | // don't bother loading comments if we're not on a document page (in which case there's no usercommentdiv)
|
---|
257 | var usercommentdiv = document.getElementById("usercomments");
|
---|
258 | if(usercommentdiv == undefined || usercommentdiv == null) \{
|
---|
259 | return;
|
---|
260 | \}
|
---|
261 |
|
---|
262 | // else, if we have a usercommentdiv, we would have a docid. Get toplevel section of the docid
|
---|
263 | var doc_id = "_cgiargd_"; //escape("_cgiargd_");
|
---|
264 | var period = doc_id.indexOf(".");
|
---|
265 | if(period != -1) \{
|
---|
266 | doc_id = doc_id.substring(0, period);
|
---|
267 | \}
|
---|
268 |
|
---|
269 | var username_rec = \{
|
---|
270 | metaname: "username",
|
---|
271 | metapos: "all"
|
---|
272 | \};
|
---|
273 |
|
---|
274 | var timestamp_rec = \{
|
---|
275 | metaname: "usertimestamp",
|
---|
276 | metapos: "all"
|
---|
277 | \};
|
---|
278 |
|
---|
279 | var comment_rec = \{
|
---|
280 | metaname: "usercomment",
|
---|
281 | metapos: "all"
|
---|
282 | \};
|
---|
283 |
|
---|
284 | var doc_rec = \{
|
---|
285 | docid: doc_id,
|
---|
286 | metatable: [username_rec, timestamp_rec, comment_rec]
|
---|
287 | \};
|
---|
288 |
|
---|
289 | var docArray = [doc_rec];
|
---|
290 | //alert(JSON.stringify(docArray));
|
---|
291 |
|
---|
292 | var json_result_str = gsapi.getMetadataArray(docArray, "index");
|
---|
293 | // alert(json_result_str);
|
---|
294 | var result = JSON.parse(json_result_str);
|
---|
295 | // result contains only one docrec (result[0]), since we asked for the usercomments of one docid
|
---|
296 | var metatable = result[0].metatable;
|
---|
297 | // alert(JSON.stringify(metatable));
|
---|
298 |
|
---|
299 | var i = 0;
|
---|
300 | var looping = true;
|
---|
301 | var print_heading = true;
|
---|
302 |
|
---|
303 | // metatable[0] = list of usernames, metatable[1] = list of timestamps, metatable[2] = list of comments
|
---|
304 | // the 3 lists/arrays should be of even length. Assuming this, loop as long as there's another username
|
---|
305 | while(looping) \{
|
---|
306 | var metaval_rec = metatable[0].metavals[i];
|
---|
307 | if(metaval_rec == undefined) \{
|
---|
308 | looping = false;
|
---|
309 | \}
|
---|
310 | else \{
|
---|
311 |
|
---|
312 | if(print_heading) \{
|
---|
313 | var heading=document.createElement("div");
|
---|
314 | var attr=document.createAttribute("class");
|
---|
315 | attr.nodeValue="usercommentheading";
|
---|
316 | heading.setAttributeNode(attr);
|
---|
317 | var txt=document.createTextNode("_textusercommentssection_");
|
---|
318 | heading.appendChild(txt);
|
---|
319 | usercommentdiv.appendChild(heading);
|
---|
320 |
|
---|
321 | print_heading = false;
|
---|
322 | \}
|
---|
323 |
|
---|
324 | var username = metaval_rec.metavalue;
|
---|
325 | var timestamp = metatable[1].metavals[i].metavalue;
|
---|
326 | var comment = metatable[2].metavals[i].metavalue;
|
---|
327 |
|
---|
328 | //alert("Comment: " + username + " " + timestamp + " " + comment);
|
---|
329 |
|
---|
330 | // No need to sort by time, as the meta are already stored sorted
|
---|
331 | // and hence retrieved in the right order by using the i (metapos) counter
|
---|
332 | // If sorting the array of comment records, which would be by timestamp, see
|
---|
333 | // https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort
|
---|
334 |
|
---|
335 | // for each usercomment, create a child div with the username, timestamp and comment
|
---|
336 | displayInUserCommentList(usercommentdiv, username, timestamp, comment);
|
---|
337 |
|
---|
338 | i++;
|
---|
339 | \}
|
---|
340 | \}
|
---|
341 |
|
---|
342 | \}
|
---|
343 |
|
---|
344 |
|
---|
345 | function displayInUserCommentList(usercommentdiv, username, timestamp, comment) \{
|
---|
346 |
|
---|
347 | var divgroup=document.createElement("div");
|
---|
348 | var attr=document.createAttribute("class");
|
---|
349 | attr.nodeValue="usercomment";
|
---|
350 | divgroup.setAttributeNode(attr);
|
---|
351 |
|
---|
352 | var divuser=document.createElement("div");
|
---|
353 | var divtime=document.createElement("div");
|
---|
354 | var divcomment=document.createElement("div");
|
---|
355 |
|
---|
356 |
|
---|
357 | divgroup.appendChild(divuser);
|
---|
358 | var txt=document.createTextNode(username);
|
---|
359 | divuser.appendChild(txt);
|
---|
360 |
|
---|
361 | divgroup.appendChild(divtime);
|
---|
362 | txt=document.createTextNode(formatTime(timestamp)); // format timestamp for date/time display
|
---|
363 | divtime.appendChild(txt);
|
---|
364 |
|
---|
365 | // any quotes and colons in the fields would have been protected for transmitting as JSON
|
---|
366 | // so decode their entity values
|
---|
367 | comment = comment.replace(/"/gmi, '"');
|
---|
368 | comment = comment.replace(/&58;/gmi, ':');
|
---|
369 |
|
---|
370 | divgroup.appendChild(divcomment);
|
---|
371 | txt=document.createTextNode(comment);
|
---|
372 | divcomment.appendChild(txt);
|
---|
373 |
|
---|
374 | usercommentdiv.appendChild(divgroup);
|
---|
375 |
|
---|
376 | \}
|
---|
377 |
|
---|
378 | // http://stackoverflow.com/questions/807878/javascript-that-executes-after-page-load
|
---|
379 | // ensure we don't replace any other onLoad() functions, but append the loadUserComments()
|
---|
380 | // function to the existing onLoad handlers
|
---|
381 |
|
---|
382 | if(window.onload) {\
|
---|
383 | var curronload = window.onload;
|
---|
384 | var newonload = function() {\
|
---|
385 | curronload();
|
---|
386 | loadUserComments();
|
---|
387 | \};
|
---|
388 | window.onload = newonload;
|
---|
389 | \} else {\
|
---|
390 | window.onload = loadUserComments;
|
---|
391 | \}
|
---|
392 | </script>
|
---|
393 |
|
---|
394 | _If_("_activatejquery_" eq "1",_jqueryScriptAndStyle_)
|
---|
395 |
|
---|
396 | _If_("_activateweb20_" eq "2",
|
---|
397 | _If_("_activateseaweed_" eq "1",_seaweedscript_)
|
---|
398 | _If_("_activatetalkback_" eq "1",_talkbackscript_)
|
---|
399 | )
|
---|
400 | _If_(_pagescriptfileextra_,_pagescriptfileextra_)
|
---|
401 | <script language="javascript" type="text/javascript">
|
---|
402 | _loginscript_
|
---|
403 | _If_(_pagescriptextra_,_pagescriptextra_)
|
---|
404 | _collectionspecificscript_
|
---|
405 | _imagescript_
|
---|
406 | </script>
|
---|
407 | }
|
---|
408 |
|
---|
409 | _globalscripts_ [v=1] {
|
---|
410 |
|
---|
411 | _If_("_activatejquery_" eq "1",_jqueryScriptAndStyle_)
|
---|
412 |
|
---|
413 | _If_("_activateweb20_" eq "2",
|
---|
414 | <script type="text/javascript" src="_httpscript_/gsajaxapi.js"></script>
|
---|
415 | _If_("_activateseaweed_" eq "1",_seaweedscript_)
|
---|
416 | _If_("_activatetalkback_" eq "1",_talkbackscript_)
|
---|
417 | )
|
---|
418 | _If_(_pagescriptfileextra_,_pagescriptfileextra_)
|
---|
419 | <script language="javascript" type="text/javascript">
|
---|
420 | <!--
|
---|
421 | _loginscript_
|
---|
422 | _If_(_cgiargx_,_scriptdetach_)
|
---|
423 | _If_(_pagescriptextra_,_pagescriptextra_)
|
---|
424 | _collectionspecificscript_
|
---|
425 | // -->
|
---|
426 | </script>
|
---|
427 | }
|
---|
428 |
|
---|
429 | _scriptdetach_ {
|
---|
430 | function close\_detach() \{
|
---|
431 | close();
|
---|
432 | \}
|
---|
433 | }
|
---|
434 |
|
---|
435 |
|
---|
436 | _jqueryScriptAndStyle_ {
|
---|
437 | <link type="text/css" href="_httpstyle_/max-video/jquery-ui-1.8.4.custom.css" rel="stylesheet" />
|
---|
438 | <script type="text/javascript" src="_httpscript_/jquery-1.4.2.min.js"></script>
|
---|
439 | <script type="text/javascript" src="_httpscript_/jquery-ui-1.8.4.custom.min.js"></script>
|
---|
440 | }
|
---|
441 |
|
---|