· 9 years ago · Nov 09, 2016, 10:36 PM
1Welcome! This is the default template for HFS 2.3
2template revision TR2.
3
4Here below you'll find some options affecting the template.
5Consider 1 is used for "yes", and 0 is used for "no".
6
7DO NOT EDIT this template just to change options. It's a very bad way to do it, and you'll pay for it!
8Correct way: in Virtual file system, right click on home/root, properties, diff template,
9put this text [+special:strings]
10and following all the options you want to change, using the same syntax you see here.
11
12[+special:strings]
13option.paged=1
14COMMENT this option causes your file list to be paged by default
15
16option.newfolder=1
17option.move=1
18option.comment=1
19option.rename=1
20COMMENT with these you can disable some features of the template. Please note this is not about user permissions, this is global!
21
22[]
23<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
24<html>
25<head>
26 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
27 <title>{.!HFS.} %folder%</title>
28 <link rel="stylesheet" href="/?mode=section&id=style.css" type="text/css">
29 <script type="text/javascript" src="/?mode=jquery"></script>
30 <link rel="shortcut icon" href="/favicon.ico">
31 <style class='trash-me'>
32 .onlyscript, button[onclick] { display:none; }
33 </style>
34 <script>
35 // this object will store some %symbols% in the javascript space, so that libs can read them
36 HFS = { folder:'{.js encode|%folder%.}', number:%number%, paged:{.!option.paged.} };
37 </script>
38 <script type="text/javascript" src="/?mode=section&id=lib.js"></script>
39</head>
40<body>
41<!--{.comment|--><h1 style='margin-bottom:100em'>WARNING: this template is only to be used with HFS 2.3 (and macros enabled)</h1> <!--.} -->
42{.$box panel.}
43{.$list.}
44</body>
45</html>
46<!-- Build-time: %build-time% -->
47
48[list]
49<div id='files_outer'>
50 <div style='height:1.6em;'></div> {.comment| this is quite ugly, i know, but if i use any vertical padding with height:100% i'll get a scrollbar .}
51 {.if not| %number% |{: <div style='font-size:200%; padding:1em;'>{.!No {.if|{.length|{.?search.}.}|results|files.}.}</div> :}|{:
52 <form method='post'>
53 <table id='files'>
54 {.set|sortlink| {:<a href="{.trim|
55 {.get|url|sort=$1| {.if| {.{.?sort.} = $1.} | rev={.not|{.?rev.} .} /if.} /get.}
56 /trim.}">{.!$2.}{.if| {.{.?sort.} = $1.} | &{.if|{.?rev.}|u|d.}arr;.}</a>:} .}
57 <th>{.^sortlink|n|Name.}{.^sortlink|e|.extension.}
58 <th>{.^sortlink|s|Size.}
59 <th>{.^sortlink|t|Timestamp.}
60 <th>{.^sortlink|d|Hits.}
61 %list%
62 </table>
63 </form>
64 :}.}
65</div>
66
67[box panel]
68<div id='panel'>
69 {.$box messages.}
70 {.$box login.}
71 {.$box folder.}
72 {.$box search.}
73 {.$box selection.}
74 {.$box upload.}
75 {.$box actions.}
76 {.$box server info.}
77</div>
78
79[box messages]
80 <fieldset id='msgs'>
81 <legend><img src="/~img10"> {.!Messages.}</legend>
82 <ul style='padding-left:2em'>
83 </ul>
84 </fieldset>
85
86[box login]
87 <fieldset id='login'>
88 <legend><img src="/~img27"> {.!User.}</legend>
89 <center>
90 {.if| {.length|%user%.} |{:
91 %user%
92 {.if|{.can change pwd.} |
93 <button onclick='changePwd.call(this)' style='font-size:x-small;'>{.!Change password.}</button>
94 .}
95 :}
96 | <a href="~login">Login</a>
97 .}
98 </center>
99 </fieldset>
100
101[box folder]
102 <fieldset id='folder'>
103 <legend><img src="/~img8"> {.!Folder.}</legend>
104
105 <div style='float:right; position:relative; top:-1em; font-weight:bold;'>
106 {.if| {.length|{.?search.}.} | <a href="."><img src="/~img14"> {.!Back.}</a>
107 | {.if| {.%folder% != / .} | <a href=".."><img src="/~img14"> {.!Up.}</a> .}
108 /if.}
109 </div>
110
111 <div id='breadcrumbs'>
112 {.comment|we need this to start from 1 {.count|folder levels.}.}
113 {.breadcrumbs|{:<a href="%bread-url%" {.if|{.length|%bread-name%.}|style='padding-left:{.calc|{.count|folder levels.}*0.7.}em;'.} /> {.if|{.length|%bread-name%.}|» %bread-name%|<img src="/~img1"> {.!Home.}.}</a>:} .}
114 </div>
115
116 <div id='folder-stats'>%number-folders% {.!folders.}, %number-files% {.!files.}, {.add bytes|%total-size%.}
117 </div>
118
119 {.123 if 2| <div id='foldercomment'>|{.commentNL|%folder-item-comment%.}|</div> .}
120 </fieldset>
121
122[box search]
123 {.if| {.get|can recur.} |
124 <fieldset id='search'>
125 <legend><img src="/~img3"> {.!Search.}</legend>
126 <form style='text-align:center'>
127 <input name='search' size='15' value="{.escape attr|{.?search.}.}">
128 <input type='submit' value="{.!go.}">
129 </form>
130 <div style='margin-top:0.5em;' class='hidden popup'>
131 <fieldset>
132 <legend>{.!Where to search.}</legend>
133 <input type='radio' name='where' value='fromhere' checked='true' /> {.!this folder and sub-folders.}
134 <br><input type='radio' name='where' value='here' /> {.!this folder only.}
135 <br><input type='radio' name='where' value='anywhere' /> {.!entire server.}
136 </fieldset>
137 </div>
138 </fieldset>
139 /if.}
140
141[box selection]
142 <fieldset id='select' class='onlyscript'>
143 <legend><img src="/~img15"> {.!Select.}</legend>
144 <center>
145 <button onclick="
146 var x = $('#files .selector');
147 if (x.size() > x.filter(':checked').size())
148 x.attr('checked', true).closest('tr').addClass('selected');
149 else
150 x.attr('checked', false).closest('tr').removeClass('selected');
151 selectedChanged();
152 ">{.!All.}</button>
153 <button onclick="
154 $('#files .selector').attr('checked', function(i,v){ return !v }).closest('tr').toggleClass('selected');
155 selectedChanged();
156 ">{.!Invert.}</button>
157 <button onclick='selectionMask.call(this)'>{.!Mask.}</button>
158 <p style='display:none; margin-top:1em;'><span id='selected-number'>0</span> items selected</p>
159 </center>
160 </fieldset>
161
162[box upload]
163 {.if| {.get|can upload.} |{:
164 <fieldset id='upload'>
165 <legend><img src="/~img32"> {.!Upload.}</legend>
166 <form action="." method='post' enctype="multipart/form-data" style='text-align:right;'>
167 <input type='file' name='file' multiple style='display:block;' />
168 <input type='submit' value='{.!Upload.}' style='margin-top:0.5em;' />
169 </form>
170 </fieldset>
171 :}.}
172
173[box actions]
174 <fieldset id='actions'>
175 <legend><img src="/~img18"> {.!Actions.}</legend>
176 <center>
177 {.if|{.can mkdir.}|
178 <button id='newfolderBtn' onclick='ezprompt(this.innerHTML, {type:"text"}, function(s){
179 ajax("mkdir", {name:s});
180 });'>{.!New folder.}</button>
181 .}
182 {.if|{.can comment.}|
183 <button id='commentBtn' onclick='setComment.call(this)'>{.!Comment.}</button>
184 .}
185 {.if|{.get|can delete.}|
186 <button id='deleteBtn' onclick='if (confirm("{.!confirm.}")) submit({action:"delete"}, "{.get|url.}")'>{.!Delete.}</button>
187
188 {.if|{.and|{.!option.move.}|{.can move.}.}| <button id='moveBtn' onclick='moveClicked()'>{.!Move.}</button> .}
189 .}
190 {.if|{.can rename.}|
191 <button id='renameBtn' onclick='
192 var a = selectedItems();
193 if (a.size() != 1)
194 return alert("You must select a single item to rename");
195 ezprompt(this.innerHTML, {type:"text"}, function(s){
196 ajax("rename", {from:getItemName(a[0]), to:s});
197 });'>{.!Rename.}</button>
198 .}
199 {.if|{.get|can archive.}|
200 <button id='archiveBtn' onclick='if (confirm("{.!confirm.}")) submit({}, "{.get|url|mode=archive|recursive.}")'>{.!Archive.}</button>
201 .}
202 <a href="{.get|url|tpl=list|sort=|{.if not|{.length|{.?search.}.}|{:folders-filter=\|recursive:}.}.}">{.!Get list.}</a>
203 </center>
204 </fieldset>
205
206[box server info]
207 <fieldset id='serverinfo'>
208 <legend><img src="/~img0"> {.!Server information.}</legend>
209 <a href="http://www.rejetto.com/hfs/">HttpFileServer %version%</a>
210 <br />{.!Server time.}: %timestamp%
211 <br />{.!Server uptime.}: %uptime%
212 </fieldset>
213
214
215[+special:strings]
216max s dl msg=There is a limit on the number of <b>simultaneous</b> downloads on this server.<br>This limit has been reached. Retry later.
217retry later=Please, retry later.
218item folder=in folder
219no files=No files in this folder
220no results=No items match your search query
221confirm=Are you sure?
222
223[style.css|no log]
224body { font-family:tahoma, verdana, arial, helvetica, sans; font-weight:normal; font-size:9pt; background-color:#eef; }
225html, body { padding:0; border:0; height:100%; }
226html, body, p, form { margin:0 }
227a { text-decoration:none; color:#47c; border:1px solid transparent; padding:0 0.1em; }
228a:visited { color:#55F; }
229a:hover { background-color:#fff; border-color:#47c; }
230img { border-style:none }
231fieldset { margin-bottom:0.7em; text-align:left; padding:0.6em; }
232
233#panel { float:left; margin-top:1em; margin-left:1em; max-width:250px; }
234#panel hr { width:80%; margin:1em auto; }
235#files_outer { height:100%; overflow:auto; text-align:left; padding:0 1.6em; }
236#files { background:#ddf; border:0; }
237#files tr { background:#fff; }
238#files tr.even { background:#eef; }
239#files tr.selected { background:#bcf; }
240#files td { padding:0.2em 0.5em; text-align:right; }
241#files tr td:first-child { text-align:left; }
242#files th { padding:0.5em 1em; background:#47c; text-align:center; }
243#files th a { color:white; font-size:130%; }
244#files th a:hover { background:transparent; border-color:#fff; color:#fff; font-size:130%; }
245#files td:first-child { text-align:left; }
246#files td.nosize { text-align:center; font-style:italic; }
247#files .selector { display:none; }
248#actions button { margin:0.2em; }
249#breadcrumbs { margin-top:1em; padding-left:0.5em; }
250#breadcrumbs a { padding:0.15em 0; border-width:2px; display:block; word-break:break-all; }
251#folder-stats, #foldercomment { margin-top:1em; padding-top:0.5em; border-top:1px solid #666; }
252#folder-stats { color:#666; text-align:center; }
253#msgs { display:none; }
254#msgs li:first-child { font-weight:bold; }
255#pages span { padding-left:0.5em; padding-right:0.5em; cursor:pointer; }
256#pages button { font-size:smaller; }
257.selectedPage { font-weight:bold; font-size:larger; }
258.hidden { display:none; }
259
260[file=folder=link|private]
261 <tr class='{.if|{.mod|{.count|row.}|2.}|even.}'><td>
262 <input type='checkbox' class='selector' name='selection' value="%item-url%" {.if not|{.or|{.get|can delete.}|{.get|can access.}|{.get|can archive item.}.}|disabled='disabled'.} />
263 {.if|{.get|is new.}|<span class='flag'> NEW </span>.}
264 {.if not|{.get|can access.}|<img src='/~img_lock'>.}
265 <a href="%item-url%"><img src="%item-icon%"> %item-name%</a>
266 {.if| {.length|{.?search.}.} |{:{.123 if 2|<div class='item-folder'>{.!item folder.} |{.breadcrumbs|{:<a href="%bread-url%">%bread-name%/</a>:}|from={.count substring|/|%folder%.}/breadcrumbs.}|</div>.}:} .}
267 {.123 if 2|<div class='comment'>|{.commentNL|%item-comment%.}|</div>.}
268
269[+file]
270<td>%item-size%B<td>%item-modified%<td>%item-dl-count%
271
272[+folder]
273<td class='nosize'>folder<td>%item-modified%<td>%item-dl-count%
274
275[+link]
276<td class='nosize'>link<td colspan='2'>
277
278[error-page]
279<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
280<html>
281 <head>
282 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
283 <style type="text/css">
284 {.$style.css.}
285 </style>
286 </head>
287<body>
288%content%
289<hr>
290<div style="font-family:tahoma, verdana, arial, helvetica, sans; font-size:8pt;">
291<a href="http://www.rejetto.com/hfs/">HttpFileServer %version%</a>
292<br>%timestamp%
293</div>
294</body>
295</html>
296
297[not found]
298<h1>{.!Not found.}</h1>
299<a href="/">{.!go to root.}</a>
300
301[overload]
302<h1>{.!Server Too Busy.}</h1>
303{.!The server is too busy to handle your request at this time. Retry later.}
304
305[max contemp downloads]
306<h1>{.!Download limit.}</h1>
307{.!max s dl msg.}
308<br>({.disconnection reason.})
309
310[unauthorized]
311<h1>{.!Unauthorized.}</h1>
312{.!Either your user name and password do not match, or you are not permitted to access this resource..}
313
314[deny]
315<h1>{.!Forbidden.}</h1>
316{.or|%reason%|{.!This resource is not accessible..}.}
317
318[ban]
319<h1>{.!You are banned.}</h1>
320%reason%
321
322[upload]
323
324[upload-file]
325
326[upload-results]
327<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
328<html>
329<head>
330 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
331 <title>HFS %folder%</title>
332 <link rel="stylesheet" href="/?mode=section&id=style.css" type="text/css">
333 <style>
334 li {list-style-image:url(/~img7); padding-bottom:1em; }
335 li.bad { list-style-image:url(/~img11); }
336 ul { border:1px solid #999; border-left:0; border-right:0; padding-top:1em; }
337 a.back { display: block; width: 10em; white-space:nowrap; padding:0.3em 0.5em; margin-top:1em; }
338 </style>
339</head>
340<body style='margin:2em;'>
341<h1>{.!Upload results.}</h1>
342{.or|{.^ok.}|0.} {.!files uploaded correctly..}
343{.123 if 2|<br /> |{.^ko.}| files failed..}
344<a href="." class='back'><img src="/~img14"> {.!Back.}</a>
345{.^back.}
346<ul>
347%uploaded-files%
348</ul>
349<a href="." class='back'><img src="/~img14"> {.!Back.}</a>
350</body>
351</html>
352
353[upload-success]
354{.inc|ok.}
355<li> <a href="%item-url%">%item-name%</a>
356<br />%item-size% @ %smart-speed%B/s
357{.if| {.length|%user%.} |{: {.append| %folder-resource%\hfs.comments.txt |{.filename|%item-resource%.}=uploaded by %user%
358/append.} :}/if.}
359
360[upload-failed]
361{.inc|ko.}
362<li class='bad'>%item-name%
363<br />{.!%reason%.}
364
365[progress|no log]
366<style>
367#progress .fn { font-weight:bold; }
368.out_bar { margin-top:0.25em; width:100px; font-size:15px; background:#fff; border:#555 1px solid; margin-right:5px; float:left; }
369.in_bar { height:0.5em; background:#47c; }
370</style>
371<ul style='padding-left:1.5em;'>
372%progress-files%
373</ul>
374
375[progress-nofiles]
376{.!No file exchange in progress..}
377
378[progress-upload-file]
379{.if not|{.{.?only.} = down.}|{:
380 <li> Uploading %total% @ %speed-kb% KB/s
381 <br /><span class='fn'>%filename%</span>
382 <br />{.!Time left.} %time-left%"
383 <br /><div class='out_bar'><div class='in_bar' style="width:%perc%px"></div></div> %perc%%
384:}.}
385
386[progress-download-file]
387{.if not|{.{.?only.} = up.}|{:
388 <li> Downloading %total% @ %speed-kb% KB/s
389 <br /><span class='fn'>%filename%</span>
390 <br />{.!Time left.} %time-left%"
391 <br><div class='out_bar'><div class='in_bar' style="width:%perc%px"></div></div> %perc%%
392:}.}
393
394[ajax.mkdir|no log]
395{.check session.}
396{.set|x|{.postvar|name.}.}
397{.break|if={.pos|\|var=x.}{.pos|/|var=x.}|result=forbidden.}
398{.break|if={.not|{.can mkdir.}.}|result=not authorized.}
399{.set|x|{.force ansi|%folder%{.^x.}.}.}
400{.break|if={.exists|{.^x.}.}|result=exists.}
401{.break|if={.not|{.length|{.mkdir|{.^x.}.}.}.}|result=failed.}
402{.add to log|User %user% created folder "{.^x.}".}
403{.pipe|ok.}
404
405[ajax.rename|no log]
406{.check session.}
407{.break|if={.not|{.can rename.}.}|result=forbidden.}
408{.break|if={.is file protected|{.postvar|from.}.}|result=forbidden.}
409{.break|if={.is file protected|{.postvar|to.}.}|result=forbidden.}
410{.set|x|{.force ansi|%folder%{.postvar|from.}.}.}
411{.set|y|{.force ansi|%folder%{.postvar|to.}.}.}
412{.break|if={.not|{.exists|{.^x.}.}.}|result=not found.}
413{.break|if={.exists|{.^y.}.}|result=exists.}
414{.break|if={.not|{.length|{.rename|{.^x.}|{.^y.}.}.}.}|result=failed.}
415{.add to log|User %user% renamed "{.^x.}" to "{.^y.}".}
416{.pipe|ok.}
417
418[ajax.move|no log]
419{.check session.}
420{.set|dst|{.force ansi|{.postvar|dst.}.}.}
421{.break|if={.not|{.and|{.can move.}|{.get|can delete.}|{.get|can upload|path={.^dst.}.}/and.}.} |result={.!forbidden.}.}
422{.set|log|{.!Moving items to.} {.^dst.}.}
423{.for each|fn|{.replace|:|{.no pipe||.}|{.force ansi|{.postvar|files.}.}.}|{:
424 {.break|if={.is file protected|var=fn.}|result=forbidden.}
425 {.set|x|{.force ansi|%folder%.}{.^fn.}.}
426 {.set|y|{.^dst.}/{.^fn.}.}
427 {.if not |{.exists|{.^x.}.}|{.^x.}: {.!not found.}|{:
428 {.if|{.exists|{.^y.}.}|{.^y.}: {.!already exists.}|{:
429 {.if|{.length|{.move|{.^x.}|{.^y.}.}.} |{:
430 {.set|log|{.chr|13.}{.^fn.}|mode=append.}
431 {.move|{.^x.}.md5|{.^y.}.md5.}
432 {.move|{.^x.}.comment|{.^y.}.comment.}
433 :} | {:
434 {.set|log|{.chr|13.}{.^fn.} (failed)|mode=append.}
435 {.maybe utf8|{.^fn.}.}: {.!not moved.}
436 :}/if.}
437 :}/if.}
438 :}.}
439 ;
440:}.}
441{.add to log|{.^log.}.}
442
443[ajax.comment|no log]
444{.check session.}
445{.break|if={.not|{.can comment.}.} |result=forbidden.}
446{.for each|fn|{.replace|:|{.no pipe||.}|{.postvar|files.}.}|{:
447 {.break|if={.is file protected|var=fn.}|result=forbidden.}
448 {.set item|{.force ansi|%folder%{.^fn.}.}|comment={.encode html|{.force ansi|{.postvar|text.}.}.}.}
449:}.}
450{.pipe|ok.}
451
452[ajax.changepwd|no log]
453{.check session.}
454{.break|if={.not|{.can change pwd.}.} |result=forbidden.}
455{.if|{.length|{.set account||password={.force ansi|{.postvar|new.}.}.}/length.}|ok|failed.}
456
457[special:alias]
458check session=if|{.{.cookie|HFS_SID_.} != {.postvar|token.}.}|{:{.cookie|HFS_SID_|value=|expires=-1.} {.break|result=bad session}:}
459can mkdir=and|{.get|can upload.}|{.!option.newfolder.}
460can comment=and|{.get|can upload.}|{.!option.comment.}
461can rename=and|{.get|can delete.}|{.!option.rename.}
462can change pwd=member of|can change password
463can move=or|1
464escape attr=replace|"|"|$1
465commentNL=if|{.pos|<br|$1.}|$1|{.replace|{.chr|10.}|<br />|$1.}
466add bytes=switch|{.cut|-1||$1.}|,|0,1,2,3,4,5,6,7,8,9|$1 bytes|K,M,G,T|$1bytes
467
468[special:import]
469{.new account|can change password|enabled=1|is group=1|notes=accounts members of this group will be allowed to change their password.}
470
471[lib.js|no log]
472// <script> // this is here for the syntax highlighter
473
474function outsideV(e, additionalMargin) {
475 outsideV.w || (outsideV.w = $(window));
476 if (!(e instanceof $))
477 e = $(e);
478 return e.offset().top + e.height() > outsideV.w.height() - (additionalMargin || 0) - 17;
479} // outsideV
480
481function quotedString(s) { return '"'+s.replace(/(['"\\])/g, "\\$1")+'"' }
482
483$(function(){
484 // make these links into buttons for homogeneity
485 $('#actions a').replaceWith(function(){ return "<button onclick='location = "+quotedString(this.getAttribute('href'))+"'>"+this.innerHTML+"</button>"; });
486 // selecting functionality
487 $('#files .selector').show().change(function(){
488 $(this).closest('tr').toggleClass('selected');
489 selectedChanged();
490 });
491 $('.trash-me').detach(); // this was hiding things for those w/o js capabilities
492 // infinite upload fields available
493 var x = $('input[type=file]');
494 x.change(function(){
495 if ($(this).data('fired')) return;
496 $(this).data('fired',1);
497 fileTpl.clone(true).insertAfter(this).css('display','block');
498 });
499 // we must create an empty "template", by cloning before it's set to a file, because on some browsers (Opera 10) emptying the value run-time is not allowed.
500 // this must be done after the above instruction, so we'll clone also the behavior.
501 var fileTpl = x.clone(true).css('display','none');
502
503 var x = $('#upload');
504 if (x.size()) {
505 // make it popup by button, so we save some vertical space and avoid some scrollbar
506 x.hide();
507 $('#actions button:first').before(
508 $("<button>{.!Upload.}</button>").click(function(){
509 $(this).slideUp(); x.fadeIn();
510 })
511 );
512 // on submit
513 x.find('form').submit(function(){
514 if (!$("[name=file]").val()) return false; // no file, no submit
515 $(this).hide(); // we don't need the form anymore, make space for the progress bars
516 // build the gui
517 x.append("<div id='progress'>in progress...</div>");
518 x.append($("<button style='float:right'>{.!Cancel.}</button>").click(function(){
519 // stop submit/upload
520 if (typeof stop == 'function')
521 stop();
522 else
523 document.execCommand("Stop");
524 $(this).add($("#progress")).remove(); // remove progress indicators and this button too
525 $("#upload form").slideDown(); // re-show the form
526 }));
527
528 // refresh information
529 function updateProgress() {
530 var now = new Date();
531 if (now-updateProgress.last < updateProgress.refresh*3) return; // until the request is fulfilled, we give it 3 times the refresh time
532 updateProgress.last = now;
533 $.get('/?mode=section&id=progress&only=up', function(txt) {
534 if (!txt) return;
535 var x = $('#progress');
536 if (!x.size()) return clearInterval(updateProgress.handle);
537 if (txt.indexOf('<li>') >= 0) x.html(txt);
538 updateProgress.last = 0;
539 });
540 }//updateProgress
541 updateProgress.refresh = 3; // choose the time, in seconds
542 updateProgress.refresh *= 1000; // javascript wants it in milliseconds
543 updateProgress.handle = setInterval(updateProgress, updateProgress.refresh);
544 return true;
545 });
546 }
547
548 // search options appear when it gets focus
549 $('#search').focusin(function(evt){
550 inSearch = 1;
551 if (evt.target.getAttribute('type') == 'submit') return; // the submitter button won't expand the popup, but sets the flag to avoid the popup to be closed
552 $("#search .popup").slideDown();
553 }).focusout(function(evt){
554 inSearch = 0;
555 setTimeout(function(){
556 if (!inSearch)
557 $("#search .popup").fadeOut();
558 });
559 });
560 $('#search form').submit(function(){
561 var s = $(this).find('[name=search]').val();
562 var a = '';
563 var ps = [];
564 switch ($('[name=where]:checked').val()) {
565 case 'anywhere':
566 a = '/';
567 case 'fromhere':
568 ps.push('search='+s);
569 break;
570 case 'here':
571 if (s.indexOf('*') < 0) s = '*'+s+'*';
572 ps.push('files-filter='+s);
573 ps.push('folders-filter='+s);
574 break;
575 }
576 location = a+'?'+ps.join('&');
577 return false;
578 });
579
580 // workaround for those browsers not supporting :first-child selector used in style
581 if ($('#files td:first').css('text-align') != 'left')
582 $('#files tr td:first-child').css('text-align','left');
583
584 // here we make some changes trying to make the panel fit the window
585 var removed = 0;
586 var e = $('#panel');
587 while (outsideV(e)) {
588 switch (++removed) {
589 case 1: $('#serverinfo').hide(); continue;
590 case 2: $('#select').hide(); continue;
591 case 3: $('#breadcrumbs a').css({display:'inline',paddingLeft:0}); continue;
592 case 4: $('#login').replaceWith($('#login center').prepend('<img src="/~img27">')); continue;
593 }
594 break; // give up
595 }
596 if (HFS.paged)
597 if (getCookie('paged') == 'no')
598 addPagingButton('#actions button:first');
599 else
600 pageIt();
601
602 {.$more onload.}
603 selectedChanged();
604 // darn you ie6!
605 if (!$.browser.msie || $.browser.version > 6) return;
606 $('fieldset').width('250px').after('<br>');
607 $('#panel').css('margin-right','1.5em');
608 $('a').css('border-width','0');
609 setTimeout(pageIt, 500); // at this time the page is not correctly formatted in IE6
610});//onload
611
612function ajax(method, data, cb) {
613 if (!data)
614 data = {};
615 data.token = "{.cookie|HFS_SID_.}";
616 return $.post("?mode=section&id=ajax."+method, data, cb||getStdAjaxCB());
617}//ajax
618
619function addPagingButton(where) {
620 $("<button>{.!Paged list.}</button>").insertBefore(where || '#files').click(function(){
621 $(this).remove();
622 pageIt(true);
623 delCookie('paged');
624 });
625}//addPagingButton
626
627function pageIt(anim) {
628 var rows = $('#files tr');
629 if (!rows.size()) return;
630
631 page = 0; // this is global
632 var pages = $("<div id='pages'>{.!Page.} </div>").css('visibility','hidden').insertBefore('#files');
633 var pageSize = 0;
634 while (!outsideV(rows[pageSize], 20))
635 if (++pageSize >= rows.size())
636 return pages.remove();
637 if (pageSize == 0) return; // this happens when the page is not formatted at this exact time, and the table is misplaced
638
639 Npages = Math.ceil(HFS.number / pageSize);
640 if (Npages == 1)
641 return pages.remove();
642 $('#files').width($('#files').width()); // hold it still
643
644 var s = '';
645 for (var i=1; i <= Npages; i++)
646 s += '<span>'+i+'</span> ';
647 s = $(s);
648 s.appendTo(pages).click(function(){
649 page = Number(this.innerHTML)-1;
650 $('#files tr:gt(0):visible').hide();
651 $('#files tr:gt('+(page*pageSize)+'):lt('+pageSize+')').show();
652 pages.find('span').removeClass('selectedPage').filter(':nth('+page+')').addClass('selectedPage');
653 });
654 s.first().addClass('selectedPage');
655 $('#files tr:gt('+((page+1)*pageSize)+')').hide();
656 pages.append($("<button type='button'>{.!No pages.}</button>").click(function(){
657 pages.slideUp(function(){ pages.remove(); });
658 $('#files tr:hidden').show();
659 addPagingButton();
660 setCookie('paged', 'no');
661 }));
662 pages.css({visibility:'', display:'none'});
663 if (anim) pages.slideDown()
664 else pages.show();
665}//pageIt
666
667function selectedChanged() {
668 $("#selected-number").text( selectedItems().size() ).parent().show();
669} // selectedChanged
670
671function getItemName(el) {
672 if (typeof el == 'undefined')
673 return false;
674 // we handle elements, not jquery sets
675 if (el.jquery)
676 if (el.size())
677 el = el[0];
678 else
679 return false;
680 // take the url, and ignore any #anchor part
681 var s = el.getAttribute('href') || el.getAttribute('value');
682 s = s.split('#')[0];
683 // remove protocol and hostname
684 var i = s.indexOf('://');
685 if (i > 0)
686 s = s.slice(s.indexOf('/',i+3));
687 // current folder is specified. Remove it.
688 if (s.indexOf(HFS.folder) == 0)
689 s = s.slice(HFS.folder.length);
690 // folders have a trailing slash that's not truly part of the name
691 if (s.slice(-1) == '/')
692 s = s.slice(0,-1);
693 // it is encoded
694 s = (decodeURIComponent || unescape)(s);
695 return s;
696} // getItemName
697
698function submit(data, url) {
699 var f = $('#files').closest('form');
700 if (url) f.attr('action', url);
701 f.find('.temp').remove();
702 for (var k in data)
703 f.append("<input class='temp' type='hidden' name='"+k+"' value='"+data[k]+"' />");
704 f.submit();
705}//submit
706
707function putMsg(txt, time) {
708 if (!time) time = 4000;
709 var msgs = $('#msgs');
710 msgs.slideDown();
711 if (msgs.find('ul li:first').html() == txt)
712 clearTimeout(lastTimeoutID);
713 else
714 msgs.find('ul').prepend("<li>"+txt+"</li>");
715 lastTimeoutID = setTimeout("$('#msgs li:last').fadeOut(function(){$(this).detach(); if (!$('#msgs li').size()) $('#msgs').slideUp(); });", time);
716}//putMsg
717
718RegExp.escape = function(text) {
719 if (!arguments.callee.sRE) {
720 var specials = '/.*+?|()[]{}\\'.split('');
721 arguments.callee.sRE = new RegExp('(\\' + specials.join('|\\') + ')', 'g');
722 }
723 return text.replace(arguments.callee.sRE, '\\$1');
724}//escape
725
726function include(url, type) {
727 $.ajaxSetup({async: false}); // we'll wait.
728 if (!type)
729 type = /[^.]+$/.exec(url);
730 var res;
731 if (type == 'js')
732 res = $.getScript(url);
733 else res = $.get(url, function(){
734 if (type == 'css')
735 $('head').append('<link rel="stylesheet" href="'+url+'" type="text/css" />');
736 });
737 $.ajaxSetup({async: true}); // restore it
738 return res.responseText;
739}//include
740
741function ezprompt(msg, options, cb) {
742 // 2 parameters means "options" is missing
743 if (arguments.length == 2) {
744 cb = options;
745 options = {};
746 }
747 if (!$.prompt) { // load on demand
748 include('/?mode=section&id=impromptu.css');
749 include('/?mode=section&id=jquery.impromptu.js');
750 }
751 var v;
752 if (v = options.type) {
753 msg += '<br />';
754 if (v == 'textarea')
755 msg += '<textarea name="txt" cols="30" rows="8">'+options['default']+'</textarea>';
756 else
757 msg += '<input name="txt" type="'+v+'"'
758 + ((v = options['default']) ? ' value="'+v+'"' : '')
759 + ' />';
760 }
761 $.prompt(msg, {
762 opacity: 0.9,
763 overlayspeed: 'fast',
764 loaded: function(){
765 $('#jqibox').find(':input').keypress(function (e) {
766 var c = (e.keyCode || e.which);
767 if (options.keypress && options.keypress(c, this, e) === false) return;
768 if (c != 13 || this.tagName == 'TEXTAREA') return; // ENTER key is like submit, but not in textarea
769 $('.jqibuttons button:first').click();
770 return false;
771 }).filter(':first').focus()[0].select();
772 },
773 submit: function(val,div,form) {
774 var res = cb(options.type ? form.txt : form, $('#jqibox'), options.cbData );
775 if (res === false) {
776 $('#jqibox').find(':input:first').focus();
777 return false;
778 }
779 return true;
780 },
781 fadeClicked: function() { $('#jqibox').find(':input:first').focus(); }
782 });
783}//ezprompt
784
785// this is a factory for ajax request handlers
786function getStdAjaxCB(what2do) {
787 if (!arguments.length)
788 what2do = true;
789 return function(res){
790 res = $.trim(res);
791
792 if (res !== "ok") {
793 alert("{.!Error.}: "+res);
794 if (res === 'bad session')
795 location.reload();
796 return;
797 }
798 // what2do is a list of actions we are supposed to do if the ajax result is "ok"
799 if (typeof what2do == 'undefined')
800 return;
801 if (!$.isArray(what2do))
802 what2do = [what2do];
803 for (var i=0; i<what2do.length; i++) {
804 var w = what2do[i];
805 switch (typeof w) {
806 case 'function': w(); break; // you specify exactly what to do
807 case 'string':
808 switch (w[0]) {
809 case '!': alert(w.substr(1)); break;
810 case '>': location = w.substr(1); break;
811 default: putMsg(w); break;
812 }
813 case 'boolean': if (w) location = location; break;
814 }
815 }
816 }
817}//getStdAjaxCB
818
819function changePwd() {
820 ezprompt(this.innerHTML, {type:'password'}, function(s){
821 if (s) ajax('changepwd', {'new':s}, getStdAjaxCB([
822 "!{.!Password changed, you'll have to login again..}",
823 '>~login'
824 ]));
825 });
826}//changePwd
827
828function selectedItems() { return $('#files .selector:checked') }
829
830function selectedFilesAsStr() {
831 var a = [];
832 selectedItems().each(function(){
833 a.push(getItemName(this));
834 });
835 return a.join(":");
836}//selectedFilesAsStr
837
838function setComment() {
839 var sel = selectedItems();
840 if (!sel.size())
841 return putMsg("{.!No file selected.}");
842 var def = sel.closest('tr').find('.comment').html() || '';
843 ezprompt(this.innerHTML, {type:'textarea', 'default':def}, function(s){
844 if (s == def && sel.size() == 1) return true; // there s no work to do
845 ajax('comment', {text:s, files:selectedFilesAsStr()});
846 });
847}//setComment
848
849function moveClicked() {
850 ezprompt("{.!Enter the destination folder.}", {type:'text'}, function(s){
851 ajax('move', {dst:s, files:selectedFilesAsStr()}, function(res){
852 var a = res.split(";");
853 if (a.length < 2)
854 return alert($.trim(res));
855 var failed = 0;
856 var ok = 0;
857 var msg = "";
858 for (var i=0; i<a.length-1; i++) {
859 var s = $.trim(a[i]);
860 if (!s.length) {
861 ok++;
862 continue;
863 }
864 failed++;
865 msg += s+"\n";
866 }
867 if (failed)
868 msg = "{.!We met the following problems:.}\n"+msg;
869 msg = (ok ? ok+" {.!files were moved..}\n" : "{.!No file was moved..}\n")+msg;
870 alert(msg);
871 if (ok) location = location; // reload
872 });
873 });
874}//moveClicked
875
876function selectionMask() {
877 ezprompt('{.!Please enter the file mask to select.}', {'type':'text', 'default':'*'}, function(s){
878 if (!s) return false;
879 var re = s.match('^/([^/]+)/([a-zA-Z]*)');
880 if (re)
881 re = new RegExp(re[1], re[2]);
882 else {
883 var n = s.match(/^(\\*)/)[0].length;
884 s = s.substring(n);
885 var invert = !!(n % 2); // a leading "\" will invert the logic
886 s = RegExp.escape(s).replace(/[?]/g,".");;
887 if (s.match(/\\\*/)) {
888 s = s.replace(/\\\*/g,".*");
889 s = "^ *"+s+" *$"; // in this case let the user decide exactly how it is placed in the string
890 }
891 re = new RegExp(s, "i");
892 }
893 $("#files .selector")
894 .filter(function(){ return invert ^ re.test(getItemName(this)); })
895 .closest('tr').addClass("selected").find('.selector').attr('checked',true);
896 selectedChanged();
897 });
898}//selectionMask
899
900function setCookie(name,value,days) {
901 if (days) {
902 var date = new Date();
903 date.setTime(date.getTime()+(days*24*60*60*1000));
904 var expires = "; expires="+date.toGMTString();
905 }
906 else var expires = "";
907 document.cookie = name+"="+value+expires+"; path=/";
908} // setCookie
909
910function getCookie(name) {
911 var a = document.cookie.match(new RegExp('(^|;\s*)('+name+'=)([^;]*)'));
912 return (a && a[2]) ? a[3] : null;
913} // getCookie
914
915function delCookie(name) {
916 setCookie(name,"",-1);
917} // delCookie
918
919
920[jquery.impromptu.js|no log]
921/*
922 * jQuery Impromptu
923 * By: Trent Richardson [http://trentrichardson.com]
924 * Version 2.7
925 * Last Modified: 6/7/2009
926 *
927 * Copyright 2009 Trent Richardson
928 * Dual licensed under the MIT and GPL licenses.
929 * http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
930 * http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
931 *
932 */
933
934(function($) {
935 $.prompt = function(message, options) {
936 options = $.extend({},$.prompt.defaults,options);
937 $.prompt.currentPrefix = options.prefix;
938
939 var ie6 = ($.browser.msie && $.browser.version < 7);
940 var $body = $(document.body);
941 var $window = $(window);
942
943 //build the box and fade
944 var msgbox = '<div class="'+ options.prefix +'box" id="'+ options.prefix +'box">';
945 if(options.useiframe && (($('object, applet').length > 0) || ie6)) {
946 msgbox += '<iframe src="javascript:false;" style="display:block;position:absolute;z-index:-1;" class="'+ options.prefix +'fade" id="'+ options.prefix +'fade"></iframe>';
947 } else {
948 if(ie6) {
949 $('select').css('visibility','hidden');
950 }
951 msgbox +='<div class="'+ options.prefix +'fade" id="'+ options.prefix +'fade"></div>';
952 }
953 msgbox += '<div class="'+ options.prefix +'" id="'+ options.prefix +'"><div class="'+ options.prefix +'container"><div class="';
954 msgbox += options.prefix +'close">X</div><div id="'+ options.prefix +'states"></div>';
955 msgbox += '</div></div></div>';
956
957 var $jqib = $(msgbox).appendTo($body);
958 var $jqi = $jqib.children('#'+ options.prefix);
959 var $jqif = $jqib.children('#'+ options.prefix +'fade');
960
961 //if a string was passed, convert to a single state
962 if(message.constructor == String){
963 message = {
964 state0: {
965 html: message,
966 buttons: options.buttons,
967 focus: options.focus,
968 submit: options.submit
969 }
970 };
971 }
972
973 //build the states
974 var states = "";
975
976 $.each(message,function(statename,stateobj){
977 stateobj = $.extend({},$.prompt.defaults.state,stateobj);
978 message[statename] = stateobj;
979
980 states += '<div id="'+ options.prefix +'_state_'+ statename +'" class="'+ options.prefix + '_state" style="display:none;"><div class="'+ options.prefix +'message">' + stateobj.html +'</div><div class="'+ options.prefix +'buttons">';
981 $.each(stateobj.buttons, function(k, v){
982 states += '<button name="' + options.prefix + '_' + statename + '_button' + k + '" id="' + options.prefix + '_' + statename + '_button' + k + '" value="' + v + '">' + k + '</button>';
983 });
984 states += '</div></div>';
985 });
986
987 //insert the states...
988 $jqi.find('#'+ options.prefix +'states').html(states).children('.'+ options.prefix +'_state:first').css('display','block');
989 $jqi.find('.'+ options.prefix +'buttons:empty').css('display','none');
990
991 //Events
992 $.each(message,function(statename,stateobj){
993 var $state = $jqi.find('#'+ options.prefix +'_state_'+ statename);
994
995 $state.children('.'+ options.prefix +'buttons').children('button').click(function(){
996 var msg = $state.children('.'+ options.prefix +'message');
997 var clicked = stateobj.buttons[$(this).text()];
998 var forminputs = {};
999
1000 //collect all form element values from all states
1001 $.each($jqi.find('#'+ options.prefix +'states :input').serializeArray(),function(i,obj){
1002 if (forminputs[obj.name] === undefined) {
1003 forminputs[obj.name] = obj.value;
1004 } else if (typeof forminputs[obj.name] == Array) {
1005 forminputs[obj.name].push(obj.value);
1006 } else {
1007 forminputs[obj.name] = [forminputs[obj.name],obj.value];
1008 }
1009 });
1010
1011 var close = stateobj.submit(clicked,msg,forminputs);
1012 if(close === undefined || close) {
1013 removePrompt(true,clicked,msg,forminputs);
1014 }
1015 });
1016 $state.find('.'+ options.prefix +'buttons button:eq('+ stateobj.focus +')').addClass(options.prefix +'defaultbutton');
1017
1018 });
1019
1020 var ie6scroll = function(){
1021 $jqib.css({ top: $window.scrollTop() });
1022 };
1023
1024 var fadeClicked = function(){
1025 if(options.persistent){
1026 if (options.fadeClicked() === false) return; // mod by rejetto
1027 var i = 0;
1028 $jqib.addClass(options.prefix +'warning');
1029 var intervalid = setInterval(function(){
1030 $jqib.toggleClass(options.prefix +'warning');
1031 if(i++ > 1){
1032 clearInterval(intervalid);
1033 $jqib.removeClass(options.prefix +'warning');
1034 }
1035 }, 100);
1036 }
1037 else {
1038 removePrompt();
1039 }
1040 };
1041
1042 var keyPressEventHandler = function(e){
1043 var key = (window.event) ? event.keyCode : e.keyCode; // MSIE or Firefox?
1044
1045 //escape key closes
1046 if(key==27) {
1047 removePrompt();
1048 }
1049
1050 //constrain tabs
1051 if (key == 9){
1052 var $inputels = $(':input:enabled:visible',$jqib);
1053 var fwd = !e.shiftKey && e.target == $inputels[$inputels.length-1];
1054 var back = e.shiftKey && e.target == $inputels[0];
1055 if (fwd || back) {
1056 setTimeout(function(){
1057 if (!$inputels)
1058 return;
1059 var el = $inputels[back===true ? $inputels.length-1 : 0];
1060
1061 if (el)
1062 el.focus();
1063 },10);
1064 return false;
1065 }
1066 }
1067 };
1068
1069 var positionPrompt = function(){
1070 $jqib.css({
1071 position: (ie6) ? "absolute" : "fixed",
1072 height: $window.height(),
1073 width: "100%",
1074 top: (ie6)? $window.scrollTop() : 0,
1075 left: 0,
1076 right: 0,
1077 bottom: 0
1078 });
1079 $jqif.css({
1080 position: "absolute",
1081 height: $window.height(),
1082 width: "100%",
1083 top: 0,
1084 left: 0,
1085 right: 0,
1086 bottom: 0
1087 });
1088 $jqi.css({
1089 position: "absolute",
1090 top: options.top,
1091 left: "50%",
1092 marginLeft: (($jqi.outerWidth()/2)*-1)
1093 });
1094 };
1095
1096 var stylePrompt = function(){
1097 $jqif.css({
1098 zIndex: options.zIndex,
1099 display: "none",
1100 opacity: options.opacity
1101 });
1102 $jqi.css({
1103 zIndex: options.zIndex+1,
1104 display: "none"
1105 });
1106 $jqib.css({
1107 zIndex: options.zIndex
1108 });
1109 };
1110
1111 var removePrompt = function(callCallback, clicked, msg, formvals){
1112 $jqi.remove();
1113 //ie6, remove the scroll event
1114 if(ie6) {
1115 $body.unbind('scroll',ie6scroll);
1116 }
1117 $window.unbind('resize',positionPrompt);
1118 $jqif.fadeOut(options.overlayspeed,function(){
1119 $jqif.unbind('click',fadeClicked);
1120 $jqif.remove();
1121 if(callCallback) {
1122 options.callback(clicked,msg,formvals);
1123 }
1124 $jqib.unbind('keypress',keyPressEventHandler);
1125 $jqib.remove();
1126 if(ie6 && !options.useiframe) {
1127 $('select').css('visibility','visible');
1128 }
1129 });
1130 };
1131
1132 positionPrompt();
1133 stylePrompt();
1134
1135 //ie6, add a scroll event to fix position:fixed
1136 if(ie6) {
1137 $window.scroll(ie6scroll);
1138 }
1139 $jqif.click(fadeClicked);
1140 $window.resize(positionPrompt);
1141 $jqib.bind("keydown keypress",keyPressEventHandler);
1142 $jqi.find('.'+ options.prefix +'close').click(removePrompt);
1143
1144 //Show it
1145 $jqif.fadeIn(options.overlayspeed);
1146 $jqi[options.show](options.promptspeed,options.loaded);
1147 $jqi.find('#'+ options.prefix +'states .'+ options.prefix +'_state:first .'+ options.prefix +'defaultbutton').focus();
1148
1149 if(options.timeout > 0)
1150 setTimeout($.prompt.close,options.timeout);
1151
1152 return $jqib;
1153 };
1154
1155 $.prompt.defaults = {
1156 prefix:'jqi',
1157 buttons: {
1158 Ok: true
1159 },
1160 loaded: function(){
1161
1162 },
1163 submit: function(){
1164 return true;
1165 },
1166 callback: function(){
1167
1168 },
1169 opacity: 0.6,
1170 zIndex: 9999,
1171 overlayspeed: 'slow',
1172 promptspeed: 'fast',
1173 show: 'fadeIn',
1174 focus: 0,
1175 useiframe: false,
1176 top: "15%",
1177 persistent: true,
1178 timeout: 0,
1179 state: {
1180 html: '',
1181 buttons: {
1182 Ok: true
1183 },
1184 focus: 0,
1185 submit: function(){
1186 return true;
1187 }
1188 }
1189 };
1190
1191 $.prompt.currentPrefix = $.prompt.defaults.prefix;
1192
1193 $.prompt.setDefaults = function(o) {
1194 $.prompt.defaults = $.extend({}, $.prompt.defaults, o);
1195 };
1196
1197 $.prompt.setStateDefaults = function(o) {
1198 $.prompt.defaults.state = $.extend({}, $.prompt.defaults.state, o);
1199 };
1200
1201 $.prompt.getStateContent = function(state) {
1202 return $('#'+ $.prompt.currentPrefix +'_state_'+ state);
1203 };
1204
1205 $.prompt.getCurrentState = function() {
1206 return $('.'+ $.prompt.currentPrefix +'_state:visible');
1207 };
1208
1209 $.prompt.getCurrentStateName = function() {
1210 var stateid = $.prompt.getCurrentState().attr('id');
1211
1212 return stateid.replace($.prompt.currentPrefix +'_state_','');
1213 };
1214
1215 $.prompt.goToState = function(state) {
1216 $('.'+ $.prompt.currentPrefix +'_state').slideUp('slow');
1217 $('#'+ $.prompt.currentPrefix +'_state_'+ state).slideDown('slow',function(){
1218 $(this).find('.'+ $.prompt.currentPrefix +'defaultbutton').focus();
1219 });
1220 };
1221
1222 $.prompt.nextState = function() {
1223 var $next = $('.'+ $.prompt.currentPrefix +'_state:visible').next();
1224
1225 $('.'+ $.prompt.currentPrefix +'_state').slideUp('slow');
1226
1227 $next.slideDown('slow',function(){
1228 $next.find('.'+ $.prompt.currentPrefix +'defaultbutton').focus();
1229 });
1230 };
1231
1232 $.prompt.prevState = function() {
1233 var $next = $('.'+ $.prompt.currentPrefix +'_state:visible').prev();
1234
1235 $('.'+ $.prompt.currentPrefix +'_state').slideUp('slow');
1236
1237 $next.slideDown('slow',function(){
1238 $next.find('.'+ $.prompt.currentPrefix +'defaultbutton').focus();
1239 });
1240 };
1241
1242 $.prompt.close = function() {
1243 $('#'+ $.prompt.currentPrefix +'box').fadeOut('fast',function(){
1244 $(this).remove();
1245 });
1246 };
1247
1248})(jQuery);
1249
1250[impromptu.css|no log]
1251/*
1252------------------------------
1253 Impromptu's
1254------------------------------
1255*/
1256.jqifade{
1257 position: absolute;
1258 background-color: #aaaaaa;
1259}
1260div.jqi{
1261 min-width: 300px;
1262 max-width: 600px;
1263 font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
1264 position: absolute;
1265 background-color: #ffffff;
1266 font-size: 11px;
1267 text-align: left;
1268 border: solid 1px #eeeeee;
1269 -moz-border-radius: 10px;
1270 -webkit-border-radius: 10px;
1271 padding: 7px;
1272}
1273div.jqi .jqicontainer{
1274 font-weight: bold;
1275}
1276div.jqi .jqiclose{
1277 position: absolute;
1278 top: 4px; right: -2px;
1279 width: 18px;
1280 cursor: default;
1281 color: #bbbbbb;
1282 font-weight: bold;
1283}
1284div.jqi .jqimessage{
1285 padding: 10px;
1286 line-height: 20px;
1287 color: #444444;
1288}
1289div.jqi .jqibuttons{
1290 text-align: right;
1291 padding: 5px 0 5px 0;
1292 border: solid 1px #eeeeee;
1293 background-color: #f4f4f4;
1294}
1295div.jqi button{
1296 padding: 3px 10px;
1297 margin: 0 10px;
1298 background-color: #2F6073;
1299 border: solid 1px #f4f4f4;
1300 color: #ffffff;
1301 font-weight: bold;
1302 font-size: 12px;
1303}
1304div.jqi button:hover{
1305 background-color: #728A8C;
1306}
1307div.jqi button.jqidefaultbutton{
1308 /*background-color: #8DC05B;*/
1309 background-color: #BF5E26;
1310}
1311.jqiwarning .jqi .jqibuttons{
1312 background-color: #BF5E26;
1313}
1314
1315/*
1316------------------------------
1317 impromptu
1318------------------------------
1319*/
1320.impromptuwarning .impromptu{ background-color: #aaaaaa; }
1321.impromptufade{
1322 position: absolute;
1323 background-color: #ffffff;
1324}
1325div.impromptu{
1326 position: absolute;
1327 background-color: #cccccc;
1328 padding: 10px;
1329 width: 300px;
1330 text-align: left;
1331}
1332div.impromptu .impromptuclose{
1333 float: right;
1334 margin: -35px -10px 0 0;
1335 cursor: pointer;
1336 color: #213e80;
1337}
1338div.impromptu .impromptucontainer{
1339 background-color: #213e80;
1340 padding: 5px;
1341 color: #ffffff;
1342 font-weight: bold;
1343}
1344div.impromptu .impromptumessage{
1345 background-color: #415ea0;
1346 padding: 10px;
1347}
1348div.impromptu .impromptubuttons{
1349 text-align: center;
1350 padding: 5px 0 0 0;
1351}
1352div.impromptu button{
1353 padding: 3px 10px 3px 10px;
1354 margin: 0 10px;
1355}
1356
1357/*
1358------------------------------
1359 columns ex
1360------------------------------
1361*/
1362.colsJqifadewarning .colsJqi{ background-color: #b0be96; }
1363.colsJqifade{
1364 position: absolute;
1365 background-color: #ffffff;
1366}
1367div.colsJqi{
1368 position: absolute;
1369 background-color: #d0dEb6;
1370 padding: 10px;
1371 width: 400px;
1372 text-align: left;
1373}
1374div.colsJqi .colsJqiclose{
1375 float: right;
1376 margin: -35px -10px 0 0;
1377 cursor: pointer;
1378 color: #bbbbbb;
1379}
1380div.colsJqi .colsJqicontainer{
1381 background-color: #e0eEc6;
1382 padding: 5px;
1383 color: #ffffff;
1384 font-weight: bold;
1385 height: 160px;
1386}
1387div.colsJqi .colsJqimessage{
1388 background-color: #c0cEa6;
1389 padding: 10px;
1390 width: 280px;
1391 height: 140px;
1392 float: left;
1393}
1394div.colsJqi .jqibuttons{
1395 text-align: center;
1396 padding: 5px 0 0 0;
1397}
1398div.colsJqi button{
1399 background: url(../images/button_bg.jpg) top left repeat-x #ffffff;
1400 border: solid #777777 1px;
1401 font-size: 12px;
1402 padding: 3px 10px 3px 10px;
1403 margin: 5px 5px 5px 10px;
1404 width: 75px;
1405}
1406div.colsJqi button:hover{
1407 border: solid #aaaaaa 1px;
1408}
1409
1410/*
1411------------------------------
1412 brown theme
1413------------------------------
1414*/
1415.brownJqiwarning .brownJqi{ background-color: #cccccc; }
1416.brownJqifade{
1417 position: absolute;
1418 background-color: #ffffff;
1419}
1420div.brownJqi{
1421 position: absolute;
1422 background-color: transparent;
1423 padding: 10px;
1424 width: 300px;
1425 text-align: left;
1426}
1427div.brownJqi .brownJqiclose{
1428 float: right;
1429 margin: -20px 0 0 0;
1430 cursor: pointer;
1431 color: #777777;
1432 font-size: 11px;
1433}
1434div.brownJqi .brownJqicontainer{
1435 position: relative;
1436 background-color: transparent;
1437 border: solid 1px #5F5D5A;
1438 color: #ffffff;
1439 font-weight: bold;
1440}
1441div.brownJqi .brownJqimessage{
1442 position: relative;
1443 background-color: #F7F6F2;
1444 border-top: solid 1px #C6B8AE;
1445 border-bottom: solid 1px #C6B8AE;
1446}
1447div.brownJqi .brownJqimessage h3{
1448 background: url(../images/brown_theme_gradient.jpg) top left repeat-x #ffffff;
1449 margin: 0;
1450 padding: 7px 0 7px 15px;
1451 color: #4D4A47;
1452}
1453div.brownJqi .brownJqimessage p{
1454 padding: 10px;
1455 color: #777777;
1456}
1457div.brownJqi .brownJqimessage img.helpImg{
1458 position: absolute;
1459 bottom: -25px;
1460 left: 10px;
1461}
1462div.brownJqi .brownJqibuttons{
1463 text-align: right;
1464}
1465div.brownJqi button{
1466 background: url(../images/brown_theme_gradient.jpg) top left repeat-x #ffffff;
1467 border: solid #777777 1px;
1468 font-size: 12px;
1469 padding: 3px 10px 3px 10px;
1470 margin: 5px 5px 5px 10px;
1471}
1472div.brownJqi button:hover{
1473 border: solid #aaaaaa 1px;
1474}
1475
1476/*
1477*------------------------
1478* clean blue ex
1479*------------------------
1480*/
1481.cleanbluewarning .cleanblue{ background-color: #acb4c4; }
1482.cleanbluefade{ position: absolute; background-color: #aaaaaa; }
1483div.cleanblue{ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; position: absolute; background-color: #ffffff; width: 300px; font-size: 11px; text-align: left; border: solid 1px #213e80; }
1484div.cleanblue .cleanbluecontainer{ background-color: #ffffff; border-top: solid 14px #213e80; padding: 5px; font-weight: bold; }
1485div.cleanblue .cleanblueclose{ float: right; width: 18px; cursor: default; margin: -19px -12px 0 0; color: #ffffff; font-weight: bold; }
1486div.cleanblue .cleanbluemessage{ padding: 10px; line-height: 20px; font-size: 11px; color: #333333; }
1487div.cleanblue .cleanbluebuttons{ text-align: right; padding: 5px 0 5px 0; border: solid 1px #eeeeee; background-color: #f4f4f4; }
1488div.cleanblue button{ padding: 3px 10px; margin: 0 10px; background-color: #314e90; border: solid 1px #f4f4f4; color: #ffffff; font-weight: bold; font-size: 12px; }
1489div.cleanblue button:hover{ border: solid 1px #d4d4d4; }
1490
1491/*
1492*------------------------
1493* Ext Blue Ex
1494*------------------------
1495*/
1496.extbluewarning .extblue{ border:1px red solid; }
1497.extbluefade{ position: absolute; background-color: #ffffff; }
1498div.extblue{ border:1px #6289B6 solid; position: absolute; background-color: #CAD8EA; padding: 0; width: 300px; text-align: left; }
1499div.extblue .extblueclose{ background-color: #CAD8EA; margin:2px -2px 0 0; cursor: pointer; color: red; text-align: right; }
1500div.extblue .extbluecontainer{ background-color: #CAD8EA; padding: 0 5px 5px 5px; color: #000000; font:normal 11px Verdana; }
1501div.extblue .extbluemessage{ background-color: #CAD8EA; padding: 0; margin:0 15px 15px 15px; }
1502div.extblue .extbluebuttons{ text-align: center; padding: 0px 0 0 0; }
1503div.extblue button{ padding: 1px 4px; margin: 0 10px; background-color:#cccccc; font-weight:normal; font-family:Verdana; font-size:10px; }