Merge lp:~seif/globaleaks/demo into lp:globaleaks

Proposed by Seif Lotfy
Status: Superseded
Proposed branch: lp:~seif/globaleaks/demo
Merge into: lp:globaleaks
Diff against target: 6424 lines (+4807/-996)
46 files modified
.bzrignore (+4/-0)
applications/admin/cron/crontab (+1/-1)
applications/globaleaks/controllers/admin.py (+37/-0)
applications/globaleaks/controllers/default.py (+6/-6)
applications/globaleaks/controllers/submission.py (+53/-14)
applications/globaleaks/controllers/target.py (+70/-0)
applications/globaleaks/controllers/tulip.py (+65/-45)
applications/globaleaks/cron/crontab (+2/-1)
applications/globaleaks/cron/scheduler.py (+53/-8)
applications/globaleaks/cron/target_list_clean.py (+4/-0)
applications/globaleaks/languages/it.py (+41/-3)
applications/globaleaks/models/0.py (+5/-0)
applications/globaleaks/models/datamodel.py (+20/-6)
applications/globaleaks/models/db.py (+29/-140)
applications/globaleaks/models/menu.py (+3/-3)
applications/globaleaks/modules/logic/datamodel.py (+154/-0)
applications/globaleaks/modules/logic/db.py (+67/-0)
applications/globaleaks/modules/logic/globaleaks.py (+77/-0)
applications/globaleaks/modules/randomizer.py (+8/-1)
applications/globaleaks/static/css/base.css (+464/-548)
applications/globaleaks/static/css/old.css (+918/-0)
applications/globaleaks/static/css/semifixed.css (+435/-0)
applications/globaleaks/static/js/AlteHaas_700.font.js (+19/-0)
applications/globaleaks/static/js/cufon.js (+7/-0)
applications/globaleaks/static/js/fancybox/jquery.easing-1.3.pack.js (+72/-0)
applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.css (+359/-0)
applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.js (+1156/-0)
applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.pack.js (+46/-0)
applications/globaleaks/static/js/fancybox/jquery.mousewheel-3.0.4.pack.js (+14/-0)
applications/globaleaks/static/js/jquery.js (+1/-1)
applications/globaleaks/static/js/main.js (+34/-0)
applications/globaleaks/views/admin/index.html (+4/-0)
applications/globaleaks/views/admin/targets.html (+68/-0)
applications/globaleaks/views/default/index.html (+36/-8)
applications/globaleaks/views/layout.html (+19/-15)
applications/globaleaks/views/submission/index.html (+17/-20)
applications/globaleaks/views/target/subscribe.html (+7/-0)
applications/globaleaks/views/target/unsubscribe.html (+2/-0)
applications/globaleaks/views/tulip/index.html (+4/-9)
applications/globaleaks/views/tulip/status.html (+162/-31)
applications/globaleaks/wizard.metadata (+0/-111)
globaleaks.debian.sh (+226/-0)
globaleaks.py (+0/-25)
globaleaks.sh (+5/-0)
startglobaleaks (+8/-0)
web2py.py (+25/-0)
To merge this branch: bzr merge lp:~seif/globaleaks/demo
Reviewer Review Type Date Requested Status
random globaleaks developers Pending
Review via email: mp+73816@code.launchpad.net

This proposal has been superseded by a proposal from 2011-09-02.

Description of the change

Clean up code
moved all globaleaks logic into modules

To post a comment you must log in.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2011-08-28 14:30:18 +0000
3+++ .bzrignore 2011-09-02 13:53:25 +0000
4@@ -31,3 +31,7 @@
5 applications/globaleaks/sessions/127.0.0.1-144deeb4-6d5c-4579-bdd3-3d9d5085abd2
6 applications/globaleaks/sessions/127.0.0.1-a8551263-bc3c-430c-abb2-8711fac671c1
7 applications/globaleaks/sessions/127.0.0.1-c6d5b9b3-1ec7-41c1-8d72-04c21b7a6b11
8+material/*
9+applications/globaleaks/cache/cache.lock
10+applications/globaleaks/cache/cache.shelve
11+applications/admin/cache/*
12
13=== removed file 'applications/admin/cache/cache.lock'
14=== removed file 'applications/admin/cache/cache.shelve'
15Binary files applications/admin/cache/cache.shelve 2011-08-28 08:06:54 +0000 and applications/admin/cache/cache.shelve 1970-01-01 00:00:00 +0000 differ
16=== modified file 'applications/admin/cron/crontab'
17--- applications/admin/cron/crontab 2011-08-28 08:06:54 +0000
18+++ applications/admin/cron/crontab 2011-09-02 13:53:25 +0000
19@@ -1,1 +1,1 @@
20-10 * * * * root **applications/admin/cron/expire_sessions.py
21+#10 * * * * root **applications/admin/cron/expire_sessions.py
22
23=== removed file 'applications/globaleaks/cache/cache.lock'
24=== removed file 'applications/globaleaks/cache/cache.shelve'
25Binary files applications/globaleaks/cache/cache.shelve 2011-08-28 13:59:09 +0000 and applications/globaleaks/cache/cache.shelve 1970-01-01 00:00:00 +0000 differ
26=== added file 'applications/globaleaks/controllers/admin.py'
27--- applications/globaleaks/controllers/admin.py 1970-01-01 00:00:00 +0000
28+++ applications/globaleaks/controllers/admin.py 2011-09-02 13:53:25 +0000
29@@ -0,0 +1,37 @@
30+# coding: utf8
31+# try something like
32+
33+@auth.requires_login()
34+def index():
35+ return dict(message="hello from admin.py")
36+
37+@auth.requires_login()
38+def targets():
39+
40+ response.flash = "You are now the GlobaLeaks Node Maintainer"
41+
42+ if(request.vars.edit and request.vars.edit.startswith("delete")):
43+ gl.delete_target(request.vars.edit.split(".")[1])
44+
45+ if(request.vars.edit and request.vars.edit.startswith("edit")):
46+ pass
47+
48+ form_content = (Field('Name', requires=IS_NOT_EMPTY()),
49+ Field('Description', 'text', requires=IS_LENGTH(minsize=5,maxsize=50)),
50+ Field('email', requires=[IS_EMAIL(), IS_NOT_IN_DB(db, db.target.url)])
51+ )
52+
53+ form = SQLFORM.factory(*form_content)
54+
55+ targets = gl.get_targets("ANY")
56+
57+ if "display" in request.args and not request.vars:
58+ return dict(form=None, list=True, targets=targets)
59+
60+ if form.accepts(request.vars, session):
61+ c = request.vars
62+ gl.create_target(c.Name, "demo", c.Description, c.email, "demo", "demo target")
63+ targets = gl.get_targets("ANY")
64+ return dict(form=form, list=True, targets=targets)
65+
66+ return dict(form=form, list=False, targets=targets)
67
68=== modified file 'applications/globaleaks/controllers/default.py'
69--- applications/globaleaks/controllers/default.py 2011-08-28 13:59:09 +0000
70+++ applications/globaleaks/controllers/default.py 2011-09-02 13:53:25 +0000
71@@ -1,13 +1,13 @@
72-# -*- coding: utf-8 -*-
73 ### required - do no delete
74 def user(): return dict(form=auth())
75+
76 def download(): return response.download(request,db)
77+
78 def call():
79 session.forget()
80 return service()
81 ### end requires
82-def index():
83- return dict(message=T("Hello World, I am GlobaLeaks!"))
84-
85-def error():
86- return dict()
87+
88+def index(): return dict(message=T("Hello World, I am GlobaLeaks!"))
89+
90+def error(): return dict()
91
92=== modified file 'applications/globaleaks/controllers/submission.py'
93--- applications/globaleaks/controllers/submission.py 2011-08-28 20:00:22 +0000
94+++ applications/globaleaks/controllers/submission.py 2011-09-02 13:53:25 +0000
95@@ -1,30 +1,69 @@
96+import os
97+from pprint import pprint
98+
99 def index():
100+ leaker_number = None
101 form_content = (Field('Title', requires=IS_NOT_EMPTY()),
102 Field('Description', 'text', requires=IS_NOT_EMPTY()),
103- Field('Tags'),Field('material', 'upload', uploadfolder="uploads/"),
104- Field('dislaimer', 'boolean', requires=IS_EQUAL_TO("on", error_message="Please read the disclaimer")))
105-
106- form = SQLFORM.factory(*form_content)
107-
108+ Field('material1', 'upload', uploadfolder=os.path.join(request.folder,'uploads/')),
109+ Field('material2', 'upload', uploadfolder=os.path.join(request.folder,'uploads/')),
110+ Field('material3', 'upload', uploadfolder=os.path.join(request.folder,'uploads/')),
111+ Field('metadata', 'boolean', requires=NOT_IMPLEMENTED("tulip-metadata-sanitization")),
112+ Field('disclaimer', 'boolean', requires=IS_EQUAL_TO("on", error_message="Please read the disclaimer")),
113+ )
114+
115+ form = SQLFORM.factory(*form_content,labels = {'disclaimer':'Accept and have read the disclaimer', 'metadata':'Metadata sanitization'})
116+
117+ form = FORM(TABLE(
118+ TR('Title', INPUT(_name='Title', requires=IS_NOT_EMPTY())),
119+ TR('Description:',TEXTAREA(_name='Description', requires=IS_NOT_EMPTY())),
120+ TR('Material:', INPUT(_name='material1', _type='file', _class="disabled")),
121+ TR('Metadata:',INPUT(_name='metadata', _type='checkbox', _class="notimplemented")),
122+ TR('Accept Disclaimer:',
123+ INPUT(_name='disclaimer', _type='checkbox',
124+ requires=IS_EQUAL_TO("on", error_message="Please accept the disclaimer"))),
125+ TR('', INPUT(_name='submit', _type='submit'))))
126+
127+
128+
129 response.flash = "You are the Whistleblower"
130
131 if form.accepts(request.vars, session):
132 l = request.vars
133+ leaker_number = randomizer.generate_tulip_receipt()
134+
135 leak_id = gl.create_leak(l.Title, l.Description, None, None,
136- {"Al Jazeera":10 , "CNN":20, "Leaker":0}, l.Tags)
137+ "demo", l.Tags, number=leaker_number[1])
138+
139+ i = 0
140
141- #response.flash = 'form accepted'
142+ #FIXME Refactor me please
143+ for f in os.listdir(os.path.join(request.folder,'uploads/')):
144+ ext = f.split(".")[-1:][0]
145+ dst_folder = os.path.join(request.folder, 'material/' + str(leak_id.id) + '/')
146+ if not os.path.isdir(dst_folder):
147+ os.mkdir(dst_folder)
148+ os.rename(os.path.join(request.folder, 'uploads/') + f, dst_folder + str(i) + "." + ext)
149+ i += 1
150 leak = Leak(leak_id)
151
152- #FIXME do this better...
153- tulips = []
154+ if(i>0):
155+ db.material.insert(leak_id=leak_id,
156+ url="demo", type="demo")
157+
158 for tulip in leak.tulips:
159- if tulip.target=="Leaker":
160+ target = gl.get_target(tulip.target)
161+
162+ if tulip.target=="0":
163 leaker_tulip = tulip.url
164- else:
165- tulips.append((tulip.url, tulip.target))
166-
167- return dict(leak_id=leak_id, tulip=leaker_tulip, form=None, tulips=tulips)
168+ continue
169+
170+ if target.status == "subscribed":
171+ db.mail.insert(target=target.name,
172+ address=target.url, tulip=tulip.url)
173+ pretty_number = leaker_number[0][:3]+" "+leaker_number[0][3:6]+" " +leaker_number[0][6:]
174+
175+ return dict(leak_id=leak_id, leaker_tulip=pretty_number, form=None)
176 elif form.errors:
177 response.flash = 'form has errors'
178
179
180=== added file 'applications/globaleaks/controllers/target.py'
181--- applications/globaleaks/controllers/target.py 1970-01-01 00:00:00 +0000
182+++ applications/globaleaks/controllers/target.py 2011-09-02 13:53:25 +0000
183@@ -0,0 +1,70 @@
184+def index(): return dict(message="hello from target.py")
185+
186+def subscribe():
187+ if not request.args:
188+ subscribe_form = SQLFORM.factory(
189+ Field('Name', requires=IS_NOT_EMPTY()),
190+ Field('Email', requires=IS_NOT_EMPTY()),
191+ Field('Description','text', requires=IS_NOT_EMPTY())
192+ )
193+ if subscribe_form.accepts(request.vars, session):
194+ return dict(message="Not implemented!",subscribe=None)
195+
196+ return dict(message="Here you can subscribe as a target",subscribe=subscribe_form)
197+
198+ if request.args:
199+ tulip_url = request.args[0]
200+ else:
201+ tulip_url = None
202+
203+ try:
204+ tulip = Tulip(url=tulip_url)
205+ except:
206+ return dict(message="Error!",subscribe=None)
207+
208+ if not tulip_url or tulip.target == "0":
209+ return dict(message="Error!",subscribe=None)
210+
211+ else:
212+ target = db(db.target.id==tulip.target).select().first()
213+
214+ if not target:
215+ return dict(message="Error!",subscribe=None)
216+
217+ if target.status == "subscribed":
218+ return dict(message="already subscribed",subscribe=None)
219+
220+ else:
221+ db.target[tulip.target].update_record(status="subscribed")
222+ return dict(message="subscribed",subscribe=None)
223+
224+ return dict(message="this is logically impossible",subscribe=None)
225+
226+def unsubscribe():
227+ if request.args:
228+ tulip_url = request.args[0]
229+ else:
230+ tulip_url = None
231+
232+ try:
233+ tulip = Tulip(url=tulip_url)
234+ except:
235+ return dict(message="Error!")
236+
237+ if not tulip_url or tulip.target == "0":
238+ return dict(message="Error!")
239+
240+ else:
241+ target = db(db.target.id==tulip.target).select().first()
242+
243+ if not target:
244+ return dict(message="Error!")
245+
246+ if target.status == "unsubscribed":
247+ return dict(message="already unsubscribed")
248+
249+ else:
250+ db.target[tulip.target].update_record(status="unsubscribed")
251+ return dict(message="unsubscribed")
252+
253+ return dict(message="this is logically impossible")
254
255=== modified file 'applications/globaleaks/controllers/tulip.py'
256--- applications/globaleaks/controllers/tulip.py 2011-08-28 18:49:15 +0000
257+++ applications/globaleaks/controllers/tulip.py 2011-09-02 13:53:25 +0000
258@@ -1,17 +1,24 @@
259 def index():
260- return dict(dead=False,
261- leak_title=None,
262- leak_tags=None,
263- leak_desc=None,
264- leak_material=None,
265- tulip_downloads=None,
266- tulip_allowed_downloads=None,
267- comment=None,
268- name=None,
269- comment_form=None)
270+ import hashlib
271+
272+ tulip_url = None
273+
274+ form = SQLFORM.factory(Field('Receipt', requires=IS_NOT_EMPTY()))
275+
276+ response.flash = "You are the Whistleblower"
277+
278+ if form.accepts(request.vars, session):
279+ l = request.vars
280+ # Make the tulip work well
281+ leak_number = l.Receipt.replace(' ','')
282+ tulip_url = hashlib.sha256(leak_number).hexdigest()
283+ redirect("/tulip/" + tulip_url)
284+
285+ return dict(form=form,tulip_url=None)
286
287 def status():
288 tulip_url = request.args[0]
289+
290 try:
291 t = Tulip(url=tulip_url)
292
293@@ -20,45 +27,58 @@
294
295 leak = t.get_leak()
296
297+ if t.target == "0":
298+ whistleblower=True
299+ response.flash = "You are the Whistleblower"
300+ else:
301+ whistleblower=False
302+ response.flash = "You are the Target"
303+
304 dead = False
305
306- form = SQLFORM.factory(Field('Comment', 'text', requires=IS_NOT_EMPTY()))
307+ if(int(t.allowed_accesses) !=0 and int(t.accesses_counter) >= int(t.allowed_accesses)):
308+ dead = True
309+ else:
310+ t.accesses_counter = int(t.accesses_counter) + 1
311+
312+ if(int(t.allowed_downloads) !=0 and int(t.downloads_counter) >= int(t.allowed_downloads)):
313+ dead = True
314+
315+ print gl.get_targets("ANY")
316+ return dict(err=None,
317+ dead=dead,
318+ whistleblower=whistleblower,
319+ tulip_url=tulip_url,
320+ leak_id=leak.id,
321+ leak_title=leak.title,
322+ leak_tags=leak.tags,
323+ leak_desc=leak.desc,
324+ leak_material=leak.material,
325+ tulip_accesses=t.accesses_counter,
326+ tulip_allowed_accesses=t.allowed_accesses,
327+ tulip_downloads=t.downloads_counter,
328+ tulip_allowed_downloads=t.allowed_downloads,
329+ name=t.target,
330+ targets=gl.get_targets("ANY"))
331+
332+def download():
333+ import os
334+
335+ tulip_url = request.args[0]
336+
337+ try:
338+ t = Tulip(url=tulip_url)
339+ except:
340+ redirect("/tulip/" + tulip_url);
341
342 if(int(t.downloads_counter) >= int(t.allowed_downloads) and int(t.allowed_downloads)!=0):
343- dead = True
344+ redirect("/tulip/" + tulip_url);
345 else:
346 t.downloads_counter = int(t.downloads_counter) + 1
347
348- if form.accepts(request.vars, session):
349- response.flash = 'ok!'
350- c = response.vars
351- print response.vars
352-
353- return dict(err=None,
354- dead=dead,
355- leak_title=leak.title,
356- leak_tags=leak.tags,
357- leak_desc=leak.desc,
358- leak_material=leak.material,
359- tulip_downloads=t.downloads_counter,
360- tulip_allowed_downloads=t.allowed_downloads,
361- comment="asdads",
362- name=t.target,
363- comment_form=form)
364-
365- elif form.errors:
366- response.flash = 'form has errors'
367- else:
368- response.flash = 'please fill the form'
369-
370-
371- return dict(err=None,
372- dead=dead,
373- leak_title=leak.title,
374- leak_tags=leak.tags,
375- leak_desc=leak.desc,
376- leak_material=leak.material,
377- tulip_downloads=t.downloads_counter,
378- tulip_allowed_downloads=t.allowed_downloads,
379- comment_form=form,
380- comment=None)
381+ leak = t.get_leak()
382+
383+ response.headers['Content-Type'] = "application/octet"
384+ response.headers['Content-Disposition'] = 'attachment; filename="' + tulip_url + '.zip"'
385+
386+ return response.stream(open(os.path.join(request.folder, 'material/', 'static.zip'),'rb'))
387
388=== modified file 'applications/globaleaks/cron/crontab'
389--- applications/globaleaks/cron/crontab 2011-08-28 13:59:09 +0000
390+++ applications/globaleaks/cron/crontab 2011-09-02 13:53:25 +0000
391@@ -1,2 +1,3 @@
392 #crontab
393-#* * * * * root *applications/init/cron/scheduler.py
394+* * * * * root *applications/globaleaks/cron/scheduler.py
395+0 */2 * * * root *applications/globaleaks/cron/target_list_clean.py
396
397=== modified file 'applications/globaleaks/cron/scheduler.py' (properties changed: -x to +x)
398--- applications/globaleaks/cron/scheduler.py 2011-08-28 13:59:09 +0000
399+++ applications/globaleaks/cron/scheduler.py 2011-09-02 13:53:25 +0000
400@@ -1,13 +1,58 @@
401 #!/usr/bin/env python
402-import time
403+import time,os
404+import zipfile, tempfile
405
406-fp = open("/tmp/test", "w")
407+fp = open("/tmp/cron.log", "a+")
408 fp.write(time.ctime()+"\n")
409-fp.write(str(dir(db))+"\n")
410-fp.write(str(dir(gl))+"\n")
411+"""
412+if(db.auth_user):
413+ # XXX Remove for non demo usage
414+ if(not db(db.auth_user.email=="node@globaleaks.org").select().first()):
415+ db.auth_user.insert(first_name="Globaleaks node administrator",
416+ last_name="Globaleaks",email="node@globaleaks.org",
417+ password=db.auth_user.password.validate("testing"))
418+"""
419+
420+new_material = db(db.leak.spooled==False).select()
421+
422+"""
423+for mat in new_material:
424+ if db(db.material.leak_id==mat.id).select():
425+ mat_dir = os.path.join(request.folder, 'material/') + str(mat.id)
426+ fp.write("mat_dir %s\n" % mat_dir)
427+
428+ fp.write("path %s\n" % os.path.join(mat_dir, str(mat.id)+".zip"))
429+ zip = zipfile.ZipFile(mat_dir+".zip", 'w')
430+ fp.write("zip %s\n" % zip)
431+
432+ for file in os.listdir(mat_dir):
433+ zip.write(mat_dir+"/"+file, file)
434+
435+ zip.close()
436+ db.leak[mat.id].update_record(spooled=True)
437+ db.commit()"""
438+
439 fp.close()
440
441-
442-#db.
443-#gl.
444-
445+mails = db(db.mail).select()
446+
447+for m in mails:
448+ message = """Hello there I am GlobaLeaks.
449+There is a fresh new leak waiting for your at:
450+ http://%s:%s/tulip/%s
451+
452+Take Care,
453+Random GlobaLeaks Node
454+
455+to unsubscribe: http://%s:%s/globaleaks/target/unsubscribe/%s
456+to subscribe back: http://%s:%s/globaleaks/target/subscribe/%s
457+""" % (settings.hostname, settings.port, m.tulip,
458+ settings.hostname, settings.port, m.tulip,
459+ settings.hostname, settings.port, m.tulip)
460+
461+ mail.send(to=m.address,
462+ subject="GlobaLeaks notification for: " + m.target,
463+ message=message)
464+ db(db.mail.id==m.id).delete()
465+
466+db.commit()
467
468=== added file 'applications/globaleaks/cron/target_list_clean.py'
469--- applications/globaleaks/cron/target_list_clean.py 1970-01-01 00:00:00 +0000
470+++ applications/globaleaks/cron/target_list_clean.py 2011-09-02 13:53:25 +0000
471@@ -0,0 +1,4 @@
472+#!/usr/bin/env python
473+
474+db(db.target).delete()
475+db.commit()
476
477=== modified file 'applications/globaleaks/languages/it.py'
478--- applications/globaleaks/languages/it.py 2011-08-28 13:59:09 +0000
479+++ applications/globaleaks/languages/it.py 2011-09-02 13:53:25 +0000
480@@ -5,9 +5,13 @@
481 '%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S',
482 '%s rows deleted': '%s righe ("record") cancellate',
483 '%s rows updated': '%s righe ("record") modificate',
484+'Administrative interface': 'Interfaccia amministrativa',
485+'Are you sure you want to delete this object?': 'Are you sure you want to delete this object?',
486 'Available databases and tables': 'Database e tabelle disponibili',
487 'Cannot be empty': 'Non può essere vuoto',
488+'Change password': 'Change password',
489 'Check to delete': 'Seleziona per cancellare',
490+'Check to delete:': 'Check to delete:',
491 'Client IP': 'Client IP',
492 'Controller': 'Controller',
493 'Copyright': 'Copyright',
494@@ -18,12 +22,16 @@
495 'Database': 'Database',
496 'Delete:': 'Cancella:',
497 'Description': 'Descrizione',
498+'Documentation': 'Documentazione',
499 'E-mail': 'E-mail',
500 'Edit': 'Modifica',
501 'Edit This App': 'Modifica questa applicazione',
502 'Edit current record': 'Modifica record corrente',
503+'Email non valida': 'Email non valida',
504 'First name': 'Nome',
505+'Group %(group_id)s created': 'Group %(group_id)s created',
506 'Group ID': 'ID Gruppo',
507+'Group uniquely assigned to user %(id)s': 'Group uniquely assigned to user %(id)s',
508 'Hello World': 'Salve Mondo',
509 'Hello World in a flash!': 'Salve Mondo in un flash!',
510 'Import/Export': 'Importa/Esporta',
511@@ -31,23 +39,40 @@
512 'Internal State': 'Stato interno',
513 'Invalid Query': 'Richiesta (query) non valida',
514 'Invalid email': 'Email non valida',
515+'Invalid login': 'Invalid login',
516+'Invalid password': 'Invalid password',
517 'Last name': 'Cognome',
518 'Layout': 'Layout',
519+'Logged in': 'Logged in',
520+'Logged out': 'Logged out',
521+'Login': 'Login',
522 'Main Menu': 'Menu principale',
523 'Menu Model': 'Menu Modelli',
524 'Name': 'Nome',
525 'New Record': 'Nuovo elemento (record)',
526+'New password': 'New password',
527 'No databases in this application': 'Nessun database presente in questa applicazione',
528+'Old password': 'Old password',
529+'Online examples': 'Vedere gli esempi',
530 'Origin': 'Origine',
531 'Password': 'Password',
532+"Password fields don't match": "Password fields don't match",
533+'Please read the disclaimer': 'Please read the disclaimer',
534 'Powered by': 'Powered by',
535+'Profile': 'Profile',
536+'Profile updated': 'Profile updated',
537 'Query:': 'Richiesta (query):',
538 'Record ID': 'Record ID',
539+'Register': 'Register',
540 'Registration key': 'Chiave di Registazione',
541+'Registration successful': 'Registration successful',
542+'Remember me (for 30 days)': 'Remember me (for 30 days)',
543+'Request reset password': 'Request reset password',
544 'Reset Password key': 'Resetta chiave Password ',
545 'Role': 'Ruolo',
546 'Rows in table': 'Righe nella tabella',
547 'Rows selected': 'Righe selezionate',
548+'Save profile': 'Save profile',
549 'Stylesheet': 'Foglio di stile (stylesheet)',
550 'Sure you want to delete this object?': 'Vuoi veramente cancellare questo oggetto?',
551 'Table name': 'Nome tabella',
552@@ -57,8 +82,17 @@
553 'Timestamp': 'Ora (timestamp)',
554 'Update:': 'Aggiorna:',
555 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Per costruire richieste (query) più complesse si usano (...)&(...) come "e" (AND), (...)|(...) come "o" (OR), e ~(...) come negazione (NOT).',
556+'User %(id)s Logged-in': 'User %(id)s Logged-in',
557+'User %(id)s Logged-out': 'User %(id)s Logged-out',
558+'User %(id)s Password changed': 'User %(id)s Password changed',
559+'User %(id)s Password reset': 'User %(id)s Password reset',
560+'User %(id)s Profile updated': 'User %(id)s Profile updated',
561+'User %(id)s Registered': 'User %(id)s Registered',
562 'User ID': 'ID Utente',
563+'Username': 'Username',
564+'Verify Password': 'Verify Password',
565 'View': 'Vista',
566+'Welcome': 'Welcome',
567 'Welcome %s': 'Benvenuto %s',
568 'Welcome to web2py': 'Benvenuto su web2py',
569 'Which called the function': 'che ha chiamato la funzione',
570@@ -68,17 +102,17 @@
571 'appadmin is disabled because insecure channel': 'Amministrazione (appadmin) disabilitata: comunicazione non sicura',
572 'cache': 'cache',
573 'change password': 'Cambia password',
574-'Online examples': 'Vedere gli esempi',
575-'Administrative interface': "Interfaccia amministrativa",
576 'customize me!': 'Personalizzami!',
577 'data uploaded': 'dati caricati',
578 'database': 'database',
579 'database %s select': 'database %s select',
580 'db': 'db',
581 'design': 'progetta',
582-'Documentation': 'Documentazione',
583 'done!': 'fatto!',
584 'edit profile': 'modifica profilo',
585+'enter a value': 'enter a value',
586+'enter an integer between %(min)g and %(max)g': 'enter an integer between %(min)g and %(max)g',
587+'enter from %(min)g to %(max)g characters': 'enter from %(min)g to %(max)g characters',
588 'export as csv file': 'esporta come file CSV',
589 'hello world': 'salve mondo',
590 'insert new': 'inserisci nuovo',
591@@ -92,7 +126,10 @@
592 'next 100 rows': 'prossime 100 righe',
593 'not authorized': 'non autorizzato',
594 'or import from csv file': 'oppure importa da file CSV',
595+'password': 'password',
596+'please input your password again': 'please input your password again',
597 'previous 100 rows': '100 righe precedenti',
598+'profile': 'profile',
599 'record': 'record',
600 'record does not exist': 'il record non esiste',
601 'record id': 'record id',
602@@ -101,4 +138,5 @@
603 'state': 'stato',
604 'table': 'tabella',
605 'unable to parse csv file': 'non riesco a decodificare questo file CSV',
606+'value already in database or empty': 'value already in database or empty',
607 }
608
609=== added directory 'applications/globaleaks/material'
610=== added file 'applications/globaleaks/material/static.zip'
611Binary files applications/globaleaks/material/static.zip 1970-01-01 00:00:00 +0000 and applications/globaleaks/material/static.zip 2011-09-02 13:53:25 +0000 differ
612=== modified file 'applications/globaleaks/models/0.py'
613--- applications/globaleaks/models/0.py 2011-08-28 13:59:09 +0000
614+++ applications/globaleaks/models/0.py 2011-09-02 13:53:25 +0000
615@@ -17,3 +17,8 @@
616 settings.login_method = 'local'
617 settings.login_config = ''
618 settings.plugins = []
619+
620+settings.hostname = '127.0.0.1'
621+settings.port = '8000'
622+
623+
624
625=== modified file 'applications/globaleaks/models/datamodel.py'
626--- applications/globaleaks/models/datamodel.py 2011-08-28 13:59:09 +0000
627+++ applications/globaleaks/models/datamodel.py 2011-09-02 13:53:25 +0000
628@@ -24,7 +24,7 @@
629 db.commit()
630 title = property(get_title, set_title)
631
632- #TODO: implment get/set tags
633+ #TODO:implement get/set tags
634 def set_tags(self):
635 pass
636 def get_tags(self):
637@@ -38,14 +38,14 @@
638 db.commit()
639 desc = property(get_desc, set_desc)
640
641- #TODO: implment get/set material
642+ #TODO: implement get/set material
643 def get_material(self):
644 pass
645 def set_material(self, material):
646 pass
647 material = property(get_material, set_material)
648
649- #TODO: implment get/set targets
650+ #TODO: implement get/set targets
651 def get_targets(self):
652 pass
653 def set_targets(self, targets):
654@@ -79,7 +79,7 @@
655 class Tulip(object):
656 def __init__(self, id=None, url=None):
657 if url:
658- self._id = db(db.tulip.uri==url).select().first().id
659+ self._id = db(db.tulip.url==url).select().first().id
660 else:
661 self._id = id
662
663@@ -91,7 +91,7 @@
664 id = property(get_id, set_id)
665
666 def get_url(self):
667- return db.tulip[self.id].uri
668+ return db.tulip[self.id].url
669 def set_url(self, url):
670 print "Error: url is read only"
671 pass
672@@ -103,6 +103,20 @@
673 print "Error: target is read only"
674 pass
675 target = property(get_target, set_target)
676+
677+ def get_allowed_accesses(self):
678+ return db.tulip[self.id].allowed_accesses
679+ def set_allowed_accesses(self, allowed_accesses):
680+ db.tulip[self.id].update_record(allowed_accessess=allowed_accesses)
681+ db.commit()
682+ allowed_accesses = property(get_allowed_accesses, set_allowed_accesses)
683+
684+ def get_accesses_counter(self):
685+ return db.tulip[self.id].accesses_counter
686+ def set_accesses_counter(self, accesses_counter):
687+ db.tulip[self.id].update_record(accesses_counter=accesses_counter)
688+ db.commit()
689+ accesses_counter = property(get_accesses_counter, set_accesses_counter)
690
691 def get_allowed_downloads(self):
692 return db.tulip[self.id].allowed_downloads
693@@ -121,6 +135,6 @@
694 def get_leak(self):
695 return Leak(db.tulip[self.id].leak_id)
696 def set_leak(self):
697- #FIXME: raise error that leak of a tulip can not be changed
698+ print "Error: leak is read only"
699 pass
700 leak = property(get_leak, set_leak)
701
702=== modified file 'applications/globaleaks/models/db.py'
703--- applications/globaleaks/models/db.py 2011-08-28 20:00:22 +0000
704+++ applications/globaleaks/models/db.py 2011-09-02 13:53:25 +0000
705@@ -20,128 +20,8 @@
706 db = DAL('sqlite://storage.sqlite') # if not, use SQLite or other DB
707 """
708 randomizer = local_import('randomizer')
709-
710-class DB(DAL):
711- def __init__(self):
712- DAL.__init__(self, 'sqlite://storage.db')
713- self.create_db()
714-
715- def create_db(self):
716- self.define_table('target',
717- Field('name'),
718- Field('category'),
719- Field('desc'),
720- Field('uri'),
721- Field('type'),
722- Field('info'),
723- Field('status'),
724- Field('last_sent_tulip'),
725- Field('last_access'),
726- Field('last_download'),
727- Field('tulip_counter'),
728- Field('dowload_counter'),
729- format='%(name)s'
730- )
731-
732- self.define_table('leak',
733- Field('title'),
734- Field('desc'),
735- Field('submission_timestamp'),
736- Field('leaker_id', self.target),
737- format='%(name)s'
738- )
739-
740- self.define_table('comment',
741- Field('leak_id', self.leak),
742- Field('commenter_id', self.target),
743- Field('comment'),
744- format='%(name)s'
745- )
746-
747- self.define_table('material',
748- Field('url', unique=True),
749- Field('leak_id', self.leak),
750- Field('type'),
751- format='%(name)s'
752- )
753-
754- self.define_table('tulip',
755- Field('uri', unique=True),
756- Field('leak_id', self.leak),
757- Field('target_id'),# self.target),
758- Field('downloads_counter'),
759- Field('allowed_downloads'),
760- Field('expiry_time'),
761- format='%(name)s'
762- )
763-
764-db = DB()
765-
766-####
767-# The main GlobaLeaks Class
768-###
769-
770-class Globaleaks(object):
771-
772- def __init__(self):
773- pass
774-
775- def create_target(self, name, category, desc, uri, type, info):
776- target_id = db.target.insert(name=name,
777- category=category,
778- desc = desc, uri=uri, type=type, info=info,
779- status=True #, last_send_tulip=None,
780- #last_access=None, last_download=None,
781- #tulip_counter=None, download_counter=None
782- )
783- db.commit()
784- return target_id
785-
786- def delete_target (self, id):
787- db(db.target.id==id).delete()
788- pass
789-
790- def get_targets(self):
791- return db(db.target).select()
792-
793-
794- def get_target(self, target_id):
795- pass
796-
797- def create_leak(self, title, desc, leaker, material, targets = {}, tags=""):
798- #FIXME insert new tags into DB first
799-
800- #Create leak and insert into DB
801- leak_id = db.leak.insert(title = title, desc = desc,
802- submission_timestamp = time.time(),
803- leaker_id = 0)
804-
805- #Create a tulip for each target and insert into DB
806- for target_uri, allowed_downloads in targets.iteritems():
807- db.tulip.insert(uri = randomizer.generate_tulip_url(),
808- leak_id = leak_id,
809- target_id = target_uri, #FIXME get target_id_properly
810- downloads_counter = 0,
811- allowed_downloads = allowed_downloads,
812- expiry_time = 0)
813-
814- db.commit()
815- return leak_id
816-
817- def get_leaks(self):
818- pass
819-
820- def get_leak(self, leak_id):
821- pass
822-
823- def get_tulips(self, leak_id):
824- pass
825-
826- def get_tulip(self, tulip_id):
827- pass
828-
829-
830-
831+db = local_import('logic.db').DB()
832+gl = local_import('logic.globaleaks').Globaleaks(db)
833
834 ####
835 # For the time being just use sqlite
836@@ -167,29 +47,28 @@
837 #########################################################################
838
839 from gluon.tools import Mail, Auth, Crud, Service, PluginManager, prettydate
840-mail = Mail() # mailer
841-auth = Auth(db) # authentication/authorization
842-crud = Crud(db) # for CRUD helpers using auth
843-service = Service() # for json, xml, jsonrpc, xmlrpc, amfrpc
844-plugins = PluginManager() # for configuring plugins
845-
846-# mail.settings.server = 'logging' or 'smtp.gmail.com:587' # your SMTP server
847-# mail.settings.sender = 'you@gmail.com' # your email
848-# mail.settings.login = 'username:password' # your credentials or None
849-
850-auth.settings.hmac_key = 'sha512:7a716c8b015b5caca119e195533717fe9a3095d67b3f97114e30256b27392977' # before define_tables()
851-auth.define_tables() # creates all needed tables
852-auth.settings.mailer = mail # for user email verification
853+mail = Mail() # mailer
854+auth = Auth(db) # authentication/authorization
855+crud = Crud(db) # for CRUD helpers using auth
856+service = Service() # for json, xml, jsonrpc, xmlrpc, amfrpc
857+plugins = PluginManager() # for configuring plugins
858+
859+mail.settings.server = 'smtp.gmail.com:587' # your SMTP server
860+mail.settings.sender = 'globaleaks2011@gmail.com' # your email
861+mail.settings.login = 'globaleaks2011@gmail.com:Antani1234' # your credentials or None
862+
863+auth.settings.hmac_key = 'sha512:7a716c8b015b5caca119e195533717fe9a3095d67b3f97114e30256b27392977' # before define_tables()
864+auth.define_tables() # creates all needed tables
865+auth.settings.mailer = mail # for user email verification
866 auth.settings.registration_requires_verification = False
867 auth.settings.registration_requires_approval = False
868-auth.messages.verify_email = 'Click on the link http://'+request.env.http_host+URL('default','user',args=['verify_email'])+'/%(key)s to verify your email'
869+auth.messages.verify_email = 'Click on the link http://' + request.env.http_host + URL('default','user',args=['verify_email']) + '/%(key)s to verify your email'
870
871 auth.settings.reset_password_requires_verification = True
872-auth.messages.reset_password = 'Click on the link http://'+request.env.http_host+URL('default','user',args=['reset_password'])+'/%(key)s to reset your password'
873+auth.messages.reset_password = 'Click on the link http://' + request.env.http_host + URL('default','user',args=['reset_password']) + '/%(key)s to reset your password'
874
875 auth.settings.table_user.email.label=T("Username")
876
877-
878 #########################################################################
879 ## If you need to use OpenID, Facebook, MySpace, Twitter, Linkedin, etc.
880 ## register with janrain.com, uncomment and customize following
881@@ -201,7 +80,6 @@
882 ## other login methods are in gluon/contrib/login_methods
883 #########################################################################
884
885-
886 # XXX
887 # Don't know
888 # crud.settings.auth = None # =auth to enforce authorization on crud
889@@ -227,4 +105,15 @@
890 # mail.settings.sender = settings.email_sender
891 # mail.settings.login = settings.email_login
892
893-gl = Globaleaks()
894+
895+# FIXME move to better location
896+class NOT_IMPLEMENTED(object):
897+ def __init__(self, a, error_message='This function is not implemented: visit http://blueprints.launchpad.net/globaleaks/+spec/%s'):
898+ self.e = error_message % a
899+ def __call__(self, value):
900+ if value == "off" or not value:
901+ return (value, None)
902+ return (value, self.e)
903+ def formatter(self, value):
904+ return format(value)
905+
906
907=== modified file 'applications/globaleaks/models/menu.py'
908--- applications/globaleaks/models/menu.py 2011-08-28 13:59:09 +0000
909+++ applications/globaleaks/models/menu.py 2011-09-02 13:53:25 +0000
910@@ -4,7 +4,7 @@
911 response.meta.keywords = settings.keywords
912 response.meta.description = settings.description
913 response.menu = [
914- (T('Index'),URL('default','index')==URL(),URL('default','index'),[]),
915- (T('Submission'),URL('submission', 'index')==URL(),URL('submission','index'),[]),
916- (T('Tulips'),URL('tulip','index')==URL(),URL('tulip','index'),[]),
917+# (T('Index'),URL('default','index')==URL(),URL('default','index'),[]),
918+# (T('Submission'),URL('submission', 'index')==URL(),URL('submission','index'),[]),
919+# (T('Tulips'),URL('tulip','index')==URL(),URL('tulip','index'),[]),
920 ]
921
922=== added directory 'applications/globaleaks/modules/logic'
923=== added file 'applications/globaleaks/modules/logic/__init__.py'
924=== added file 'applications/globaleaks/modules/logic/datamodel.py'
925--- applications/globaleaks/modules/logic/datamodel.py 1970-01-01 00:00:00 +0000
926+++ applications/globaleaks/modules/logic/datamodel.py 2011-09-02 13:53:25 +0000
927@@ -0,0 +1,154 @@
928+import time
929+
930+# web2py's funny way to import "local" modules
931+#db = local_import('sql').db
932+#randomizer = local_import('randomizer')
933+
934+randomizer = local_import('randomizer')
935+
936+class Leak(object):
937+ def __init__(self, id):
938+ self._id = id
939+
940+ def get_id(self):
941+ return self._id
942+ def set_id(self):
943+ print "Error: id is read only"
944+ pass
945+ id = property(get_id, set_id)
946+
947+ def get_title(self):
948+ return db.leak[self.id].title
949+ def set_title(self, title):
950+ db.leak[self.id] = dict(title = title)
951+ db.commit()
952+ title = property(get_title, set_title)
953+
954+ #TODO:implement get/set tags
955+ def set_tags(self):
956+ pass
957+ def get_tags(self):
958+ pass
959+ tags = property(get_tags, set_tags)
960+
961+ def get_desc(self):
962+ return db.leak[self.id].desc
963+ def set_desc(self, desc):
964+ db.leak[self.id].desc = desc
965+ db.commit()
966+ desc = property(get_desc, set_desc)
967+
968+ #TODO: implement get/set material
969+ def get_material(self):
970+ pass
971+ def set_material(self, material):
972+ pass
973+ material = property(get_material, set_material)
974+
975+ #TODO: implement get/set targets
976+ def get_targets(self):
977+ pass
978+ def set_targets(self, targets):
979+ pass
980+ targets = property(get_targets, set_targets)
981+
982+ def get_submission_timestamp(self):
983+ return db.leak[self.id].submission_timestamp
984+ def set_submission_timstamp(self, timestamp):
985+ print "Error: submission_timestamp is read only"
986+ pass
987+ submission_timestamp = property(get_submission_timestamp, set_submission_timstamp)
988+
989+ def get_leaker(self):
990+ pass
991+ def set_leaker(self, leaker):
992+ print "Error: leaker is read only"
993+ pass
994+ leaker = property(get_leaker, set_leaker)
995+
996+ def get_tulips(self):
997+ for tulip_id in db(db.tulip.leak_id==self._id).select(db.tulip.id):
998+ yield Tulip(tulip_id["id"])
999+
1000+ def set_tulips(self, tulips):
1001+ print "Error: tulip is read only"
1002+ pass
1003+ tulips = property(get_tulips, set_tulips)
1004+
1005+
1006+class Tulip(object):
1007+ def __init__(self, id=None, url=None):
1008+ if url:
1009+ self._id = db(db.tulip.url==url).select().first().id
1010+ else:
1011+ self._id = id
1012+
1013+ def get_id(self):
1014+ return self._id
1015+ def set_id(self, id):
1016+ print "Error: id is read only"
1017+ pass
1018+ id = property(get_id, set_id)
1019+
1020+ def get_url(self):
1021+ return db.tulip[self.id].url
1022+ def set_url(self, url):
1023+ print "Error: url is read only"
1024+ pass
1025+ url = property(get_url, set_url)
1026+
1027+ def get_target(self):
1028+ return db.tulip[self.id].target_id
1029+ def set_target(self, target):
1030+ print "Error: target is read only"
1031+ pass
1032+ target = property(get_target, set_target)
1033+
1034+ def get_allowed_accesses(self):
1035+ return db.tulip[self.id].allowed_accesses
1036+ def set_allowed_accesses(self, allowed_accesses):
1037+ db.tulip[self.id].update_record(allowed_accessess=allowed_accesses)
1038+ db.commit()
1039+ allowed_accesses = property(get_allowed_accesses, set_allowed_accesses)
1040+
1041+ def get_accesses_counter(self):
1042+ return db.tulip[self.id].accesses_counter
1043+ def set_accesses_counter(self, accesses_counter):
1044+ db.tulip[self.id].update_record(accesses_counter=accesses_counter)
1045+ db.commit()
1046+ accesses_counter = property(get_accesses_counter, set_accesses_counter)
1047+
1048+ def get_allowed_downloads(self):
1049+ return db.tulip[self.id].allowed_downloads
1050+ def set_allowed_downloads(self, allowed_downloads):
1051+ db.tulip[self.id].update_record(allowed_downloads=allowed_downloads)
1052+ db.commit()
1053+ allowed_downloads = property(get_allowed_downloads, set_allowed_downloads)
1054+
1055+ def get_downloads_counter(self):
1056+ return db.tulip[self.id].downloads_counter
1057+ def set_downloads_counter(self, downloads_counter):
1058+ db.tulip[self.id].update_record(downloads_counter=downloads_counter)
1059+ db.commit()
1060+ downloads_counter = property(get_downloads_counter, set_downloads_counter)
1061+
1062+ def get_leak(self):
1063+ return Leak(db.tulip[self.id].leak_id)
1064+ def set_leak(self):
1065+ print "Error: leak is read only"
1066+ pass
1067+ leak = property(get_leak, set_leak)
1068+
1069+
1070+
1071+# FIXME move to better location
1072+class NOT_IMPLEMENTED(object):
1073+ def __init__(self, a, error_message='This function is not implemented: visit http://blueprints.launchpad.net/globaleaks/+spec/%s'):
1074+ self.e = error_message % a
1075+ def __call__(self, value):
1076+ if value == "off" or not value:
1077+ return (value, None)
1078+ return (value, self.e)
1079+ def formatter(self, value):
1080+ return format(value)
1081+
1082
1083=== added file 'applications/globaleaks/modules/logic/db.py'
1084--- applications/globaleaks/modules/logic/db.py 1970-01-01 00:00:00 +0000
1085+++ applications/globaleaks/modules/logic/db.py 2011-09-02 13:53:25 +0000
1086@@ -0,0 +1,67 @@
1087+from gluon import DAL, Field
1088+
1089+class DB(DAL):
1090+ def __init__(self):
1091+ DAL.__init__(self, 'sqlite://storage.db')
1092+ self.create_db()
1093+
1094+ def create_db(self):
1095+ self.define_table('target',
1096+ Field('name'),
1097+ Field('category'),
1098+ Field('desc'),
1099+ Field('url'),
1100+ Field('type'),
1101+ Field('info'),
1102+ Field('status'),
1103+ Field('last_sent_tulip'),
1104+ Field('last_access'),
1105+ Field('last_download'),
1106+ Field('tulip_counter'),
1107+ Field('dowload_counter'),
1108+ format='%(name)s'
1109+ )
1110+
1111+ self.define_table('leak',
1112+ Field('title'),
1113+ Field('desc'),
1114+ Field('submission_timestamp'),
1115+ Field('leaker_id', self.target),
1116+ Field('spooled', 'boolean', False),
1117+ format='%(name)s'
1118+ )
1119+
1120+ self.define_table('comment',
1121+ Field('leak_id', self.leak),
1122+ Field('commenter_id', self.target),
1123+ Field('comment'),
1124+ format='%(name)s'
1125+ )
1126+
1127+ self.define_table('material',
1128+ Field('url', unique=True),
1129+ Field('leak_id', self.leak),
1130+ Field('type'),
1131+ format='%(name)s'
1132+ )
1133+
1134+ self.define_table('tulip',
1135+ Field('url', unique=True),
1136+ Field('leak_id', self.leak),
1137+ Field('target_id'),
1138+ Field('allowed_accesses'),
1139+ Field('accesses_counter'),
1140+ Field('allowed_downloads'),
1141+ Field('downloads_counter'),
1142+ Field('expiry_time'),
1143+ format='%(name)s'
1144+ )
1145+
1146+ self.define_table('mail',
1147+ Field('target'),
1148+ Field('address'),
1149+ Field('tulip', unique=True),
1150+ format='%(name)s'
1151+ )
1152+
1153+db = DB()
1154
1155=== added file 'applications/globaleaks/modules/logic/globaleaks.py'
1156--- applications/globaleaks/modules/logic/globaleaks.py 1970-01-01 00:00:00 +0000
1157+++ applications/globaleaks/modules/logic/globaleaks.py 2011-09-02 13:53:25 +0000
1158@@ -0,0 +1,77 @@
1159+import randomizer
1160+import time
1161+
1162+class Globaleaks(object):
1163+
1164+ def __init__(self, db):
1165+ self._db = db
1166+
1167+ def create_target(self, name, category, desc, url, type, info):
1168+ target_id = self._db.target.insert(name=name,
1169+ category=category,
1170+ desc = desc, url=url, type=type, info=info,
1171+ status="subscribed" #, last_send_tulip=None,
1172+ #last_access=None, last_download=None,
1173+ #tulip_counter=None, download_counter=None
1174+ )
1175+ self._db.commit()
1176+ return target_id
1177+
1178+ def delete_target (self, id):
1179+ self._db(self._db.target.id==id).delete()
1180+ pass
1181+
1182+ def get_targets(self, target_set):
1183+ if target_set == "ANY":
1184+ return self._db(self._db.target).select()
1185+ return self._db(self._db.target.category==target_set).select()
1186+
1187+ def get_target(self, target_id):
1188+ return self._db(self._db.target.id==target_id).select().first()
1189+
1190+ def create_leak(self, title, desc, leaker, material, target_set, tags="", number=None):
1191+ #FIXME insert new tags into DB first
1192+
1193+ #Create leak and insert into DB
1194+ leak_id = self._db.leak.insert(title = title, desc = desc,
1195+ submission_timestamp = time.time(),
1196+ leaker_id = 0, spooled=False)
1197+
1198+ targets = self.get_targets(target_set)
1199+
1200+ for t in targets:
1201+ #Create a tulip for each target and insert into DB
1202+ #for target_url, allowed_downloads in targets.iteritems():
1203+ self._db.tulip.insert(url = randomizer.generate_tulip_url(),
1204+ leak_id = leak_id,
1205+ target_id = t.id, #FIXME get target_id_properly
1206+ allowed_accesses = 0, # inf
1207+ accesses_counter = 0,
1208+ allowed_downloads = 5,
1209+ downloads_counter = 0,
1210+ expiry_time = 0)
1211+
1212+ self._db.tulip.insert(url = number,
1213+ leak_id = leak_id,
1214+ target_id = 0, #FIXME get target_id_properly
1215+ allowed_accesses = 0, # inf
1216+ accesses_counter = 0,
1217+ allowed_downloads = 5,
1218+ downloads_counter = 0,
1219+ expiry_time = 0)
1220+
1221+ self._db.commit()
1222+ return leak_id
1223+
1224+ def get_leaks(self):
1225+ pass
1226+
1227+ def get_leak(self, leak_id):
1228+ pass
1229+
1230+ def get_tulips(self, leak_id):
1231+ pass
1232+
1233+ def get_tulip(self, tulip_id):
1234+ pass
1235+
1236
1237=== modified file 'applications/globaleaks/modules/randomizer.py'
1238--- applications/globaleaks/modules/randomizer.py 2011-08-28 13:59:09 +0000
1239+++ applications/globaleaks/modules/randomizer.py 2011-09-02 13:53:25 +0000
1240@@ -1,9 +1,16 @@
1241 import random
1242 import hashlib, os
1243
1244+def generate_tulip_receipt():
1245+ #FIXME is this a good idea?
1246+ # should i be converting the random number string to bytes?
1247+ number = ""
1248+ for i in range(0,10):
1249+ number += str(ord(os.urandom(1)) % 10)
1250+ return (number, hashlib.sha256(number).hexdigest())
1251+
1252 def generate_leaker_id():
1253 return hashlib.sha256(os.urandom(100)).hexdigest()
1254
1255 def generate_tulip_url():
1256 return hashlib.sha256(os.urandom(100)).hexdigest()
1257-
1258
1259=== modified file 'applications/globaleaks/static/css/base.css'
1260--- applications/globaleaks/static/css/base.css 2011-08-28 20:00:22 +0000
1261+++ applications/globaleaks/static/css/base.css 2011-09-02 13:53:25 +0000
1262@@ -1,556 +1,472 @@
1263-@charset "UTF-8";
1264-
1265-/* This file is contains the following sections:
1266-
1267-Update: Revision: 20101102 by Martin Mulone
1268-
1269-- The new revision contains:
1270-- Html5, good practice and normalization support.
1271-- Diferent hacks.
1272-- The normalization and some tags come from
1273- diferent sites so i keep the credits and comments.
1274- but the base of support html5 come from:
1275- http://html5boilerplate.com/
1276-
1277-- ez.css (http://www.ez-css.org/layouts)
1278-- reset common tags
1279-- choose default fonts
1280-- choose link style
1281-- add bottom line to table rows
1282-- labels bold and occasionally centered
1283-- make all input fields the same size
1284-- add proper separation between h1-h6 and text
1285-- always indent the first line and add space below paragraphs
1286-- bullets and numbers style and indent
1287-- form and table padding
1288-- code blocks
1289-- left and right padding to quoted text
1290-- page layout alignment, width and padding (change this for spaces)
1291-- column widths (change this to use left_sidebar and right_sidebar)
1292-- backrgound images and colors (change this for colors)
1293-- web2py specific (.flash, .error)
1294-
1295-Notice:
1296-- even if you use a different layout/css you may need classes .flash and .error
1297-- this is all color neutral except for #349C01 (header, links, lines)
1298-- there are two backrgound images: images/background.png and images/header.png
1299-
1300-License: This file is released under BSD and MIT
1301-
1302-*/
1303-
1304-/*
1305- credit is left where credit is due.
1306- additionally, much inspiration was taken from these projects:
1307- yui.yahooapis.com/2.8.1/build/base/base.css
1308- camendesign.com/design/
1309- praegnanz.de/weblog/htmlcssjs-kickstart
1310-*/
1311-
1312-/*
1313- html5doctor.com Reset Stylesheet (Eric Meyer's Reset Reloaded + HTML5 baseline)
1314- v1.4 2009-07-27 | Authors: Eric Meyer & Richard Clark
1315- html5doctor.com/html-5-reset-stylesheet/
1316-*/
1317-
1318-html, body, div, span, object, iframe,
1319+/* http://meyerweb.com/eric/tools/css/reset/
1320+ v2.0 | 20110126
1321+ License: none (public domain)
1322+*/
1323+
1324+html, body, div, span, applet, object, iframe,
1325 h1, h2, h3, h4, h5, h6, p, blockquote, pre,
1326-abbr, address, cite, code,
1327-del, dfn, em, img, ins, kbd, q, samp,
1328-small, strong, sub, sup, var,
1329-b, i,
1330+a, abbr, acronym, address, big, cite, code,
1331+del, dfn, em, img, ins, kbd, q, s, samp,
1332+small, strike, strong, sub, sup, tt, var,
1333+b, u, i, center,
1334 dl, dt, dd, ol, ul, li,
1335 fieldset, form, label, legend,
1336 table, caption, tbody, tfoot, thead, tr, th, td,
1337-article, aside, canvas, details, figcaption, figure,
1338-footer, header, hgroup, menu, nav, section, summary,
1339+article, aside, canvas, details, embed,
1340+figure, figcaption, footer, header, hgroup,
1341+menu, nav, output, ruby, section, summary,
1342 time, mark, audio, video {
1343- margin:0;
1344- padding:0;
1345- border:0;
1346- outline:0;
1347- font-size:100%;
1348- vertical-align:baseline;
1349- background:transparent;
1350-}
1351-
1352-article, aside, details, figcaption, figure,
1353-footer, header, hgroup, menu, nav, section {
1354- display:block;
1355-}
1356-
1357-nav ul { list-style:none; }
1358-
1359-blockquote, q { quotes:none; }
1360-
1361+ margin: 0;
1362+ padding: 0;
1363+ border: 0;
1364+ font-size: 100%;
1365+ font: inherit;
1366+ vertical-align: baseline;
1367+}
1368+/* HTML5 display-role reset for older browsers */
1369+article, aside, details, figcaption, figure,
1370+footer, header, hgroup, menu, nav, section {
1371+ display: block;
1372+}
1373+body {
1374+ line-height: 1;
1375+}
1376+ol, ul {
1377+ list-style: none;
1378+}
1379+blockquote, q {
1380+ quotes: none;
1381+}
1382 blockquote:before, blockquote:after,
1383-q:before, q:after { content:''; content:none; }
1384-
1385-a { margin:0; padding:0; font-size:100%; vertical-align:baseline; background:transparent; }
1386-a:hover { text-decoration: underline }
1387-
1388-ins { background-color:#ff9; color:#000; text-decoration:none; }
1389-
1390-mark { background-color:#ff9; color:#000; font-style:italic; font-weight:bold; }
1391-
1392-del { text-decoration: line-through; }
1393-
1394-abbr[title], dfn[title] { border-bottom:1px dotted #000; cursor:help; }
1395-
1396-/* tables still need cellspacing="0" in the markup */
1397-table { border-collapse:collapse; border-spacing:0; }
1398-
1399-hr { display:block; height:1px; border:0; border-top:1px solid #ccc; margin:1em 0; padding:0; }
1400-
1401-input, select { vertical-align:middle; }
1402-/* END RESET CSS */
1403-
1404-
1405-/*
1406-fonts.css from the YUI Library: developer.yahoo.com/yui/
1407- Please refer to developer.yahoo.com/yui/fonts/ for font sizing percentages
1408-
1409-There are three custom edits:
1410- * remove arial, helvetica from explicit font stack
1411- * make the line-height relative and unit-less
1412- * remove the pre, code styles
1413-*/
1414-body { font:13px/1.231 sans-serif; *font-size:small; } /* hack retained to preserve specificity */
1415-
1416-/*table { font-size:inherit; font:100%; }*/
1417-
1418-select, input, textarea, button { font:99% sans-serif; }
1419-
1420-
1421-/* normalize monospace sizing
1422- * en.wikipedia.org/wiki/MediaWiki_talk:Common.css/Archive_11#Teletype_style_fix_for_Chrome
1423- */
1424-pre, code, kbd, samp { font-family: monospace, sans-serif; }
1425-
1426-/*
1427- * minimal base styles
1428- */
1429-
1430-/* #444 looks better than black: twitter.com/H_FJ/statuses/11800719859 */
1431-body, select, input, textarea { color:#444; }
1432-
1433-/* Headers (h1,h2,etc) have no default font-size or margin,
1434- you'll want to define those yourself. */
1435-
1436-/* www.aestheticallyloyal.com/public/optimize-legibility/ */
1437-h1,h2,h3,h4,h5,h6 { font-weight: bold; }
1438-
1439-/* always force a scrollbar in non-IE */
1440-html { overflow-y: scroll; }
1441-
1442-/* Accessible focus treatment: people.opera.com/patrickl/experiments/keyboard/test */
1443-a:hover, a:active { outline: none; }
1444-
1445-a, a:active, a:visited { color:#607890; }
1446-a:hover { color:#036; }
1447-
1448-ul, ol { margin-left: 1.8em; }
1449-ol { list-style-type: decimal; }
1450-
1451-/* Remove margins for navigation lists */
1452-nav ul, nav li { margin: 0; }
1453-
1454-small { font-size:85%; }
1455-strong, th { font-weight: bold; }
1456-
1457-td, td img { vertical-align:top; }
1458-
1459-sub { vertical-align: sub; font-size: smaller; }
1460-sup { vertical-align: super; font-size: smaller; }
1461-
1462-pre {
1463- padding: 15px;
1464-
1465- /* www.pathf.com/blogs/2008/05/formatting-quoted-code-in-blog-posts-css21-white-space-pre-wrap/ */
1466- white-space: pre; /* CSS2 */
1467- white-space: pre-wrap; /* CSS 2.1 */
1468- white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
1469- word-wrap: break-word; /* IE */
1470-}
1471-
1472-textarea { overflow: auto; } /* thnx ivannikolic! www.sitepoint.com/blogs/2010/08/20/ie-remove-textarea-scrollbars/ */
1473-
1474-.ie6 legend, .ie7 legend { margin-left: -7px; } /* thnx ivannikolic! */
1475-
1476-/* align checkboxes, radios, text inputs with their label
1477- by: Thierry Koblentz tjkdesign.com/ez-css/css/base.css */
1478-input[type="radio"] { vertical-align: text-bottom; }
1479-input[type="checkbox"] { vertical-align: bottom; }
1480-.ie7 input[type="checkbox"] { vertical-align: baseline; }
1481-.ie6 input { vertical-align: text-bottom; }
1482-
1483-/* hand cursor on clickable input elements */
1484-label, input[type=button], input[type=submit], button { cursor: pointer; }
1485-
1486-/* webkit browsers add a 2px margin outside the chrome of form elements */
1487-button, input, select, textarea { margin: 0; }
1488-
1489-/* colors for form validity */
1490-input:valid, textarea:valid { }
1491-input:invalid, textarea:invalid {
1492- border-radius: 1px;
1493- -moz-box-shadow: 0px 0px 5px red;
1494- -webkit-box-shadow: 0px 0px 5px red;
1495- box-shadow: 0px 0px 5px red;
1496-}
1497-.no-boxshadow input:invalid,
1498-.no-boxshadow textarea:invalid { background-color: #f0dddd; }
1499-
1500-
1501-/* These selection declarations have to be separate.
1502- No text-shadow: twitter.com/miketaylr/status/12228805301
1503- Also: hot pink. */
1504-::-moz-selection{ background: #555; color:#fff; text-shadow: none; }
1505-::selection { background:#555; color:#fff; text-shadow: none; }
1506-
1507-/* j.mp/webkit-tap-highlight-color */
1508-a:link { -webkit-tap-highlight-color: #555; }
1509-
1510-
1511-/* make buttons play nice in IE:
1512- www.viget.com/inspire/styling-the-button-element-in-internet-explorer/ */
1513-button { width: auto; overflow: visible; }
1514-
1515-/* bicubic resizing for non-native sized IMG:
1516- code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ */
1517-.ie7 img { -ms-interpolation-mode: bicubic; }
1518-
1519-/*
1520- * Non-semantic helper classes
1521- */
1522-
1523-/* for image replacement */
1524-.ir { display:block; text-indent:-999em; overflow:hidden; background-repeat: no-repeat; }
1525-
1526-/* Hide for both screenreaders and browsers
1527- css-discuss.incutio.com/wiki/Screenreader_Visibility */
1528-.hidden { display:none; }
1529-
1530-/* Hide only visually, but have it available for screenreaders
1531- www.webaim.org/techniques/css/invisiblecontent/
1532- Solution from: j.mp/visuallyhidden - Thanks Jonathan Neal! */
1533-.visuallyhidden { position:absolute !important;
1534- clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
1535- clip: rect(1px, 1px, 1px, 1px); }
1536-
1537-/* Hide visually and from screenreaders, but maintain layout */
1538-.invisible { visibility: hidden; }
1539-
1540-/* >> The Magnificent CLEARFIX: Updated to prevent margin-collapsing on child elements << j.mp/bestclearfix */
1541-.clearfix:before, .clearfix:after {
1542- content: "\0020"; display: block; height: 0; visibility: hidden;
1543-}
1544-
1545-.clearfix:after { clear: both; }
1546-/* Fix clearfix: blueprintcss.lighthouseapp.com/projects/15318/tickets/5-extra-margin-padding-bottom-of-page */
1547-.clearfix { zoom: 1; }
1548-
1549-
1550-/*********** layout info (ez.css) ***********/
1551-/* 2009 -2010 (c) | ez-css.org
1552- * ez-plug-min.css :: version 1.1 :: 01182010
1553- */
1554-.ez-wr:after,.ez-box:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ez-wr,.ez-box,.ez-last{display:inline-block;min-height:0}/* \*/ * html .ez-wr,* html .ez-box,* html .ez-last{height:1%}.ez-wr,.ez-box,.ez-last{display:block}/* */.ez-oh{overflow:hidden}* html .ez-oh{overflow:visible}.ez-oa{overflow:auto}.ez-dt{display:table}.ez-it{display:inline-table}.ez-tc{display:table-cell}.ez-ib{display:inline-block}.ez-fl{float:left}* html .ez-fl{margin-right:-3px}.ez-fr{float:right}* html .ez-fr{margin-left:-3px}.ez-25{width:25%}.ez-33{width:33.33%}.ez-50{width:50%}.ez-66{width:66.66%}.ez-75{width:75%}.ez-negmr{margin-right:-1px}* html .ez-negmr{margin-right:-4px}.ez-negmx{margin-right:-1px}.ez-negml{margin-left:-1px}* html .ez-negml{margin-left:-4px}
1555-
1556-
1557-/*********** add bottom line to table rows ***********/
1558-th, td { padding: 0.1em 0.5em 0.1em 0.5em;}
1559-
1560-/*********** labels bold and occasionally centered ***********/
1561-label {
1562- white-space: nowrap;
1563-}
1564-label, b, th {
1565- font-weight: bold;
1566-}
1567-thead th {
1568- text-align: center;
1569- border-bottom: 1px solid #444;
1570-}
1571-/*********** forms and table padding ***********/
1572-form, table {
1573- padding: 5px 10px 5px 10px;
1574-}
1575-
1576-/*********** code blocks ***********/
1577-code {
1578- padding: 3px 5px;
1579- font-family: Andale Mono, monospace;
1580- font-size: 0.9em;
1581-}
1582-
1583-/*********** left and right padding to quoted text ***********/
1584-blockquote {
1585- background: #cccccc;
1586- border-left: 30px transparent;
1587- border-right: 30px transparent;
1588- /*padding: 5px;*/
1589-}
1590-
1591-input[type=text], input[type=password], textarea, select {
1592- margin: 2px 15px 2px 5px;
1593- width: 280px;
1594- background: #fff;
1595- color: #555;
1596- border: 1px solid #dedede;
1597- -moz-border-radius: 2px;
1598- -webkit-border-radius: 2px;
1599- border-radius: 2px;
1600- font-size: 12px;
1601-}
1602-
1603-input[type=text], input[type=password] {
1604- height: 16px;
1605-}
1606-
1607-select[multiple=multiple] {
1608- height: 90px;
1609-}
1610-
1611-input[type=submit], input[type=button], button {
1612- margin: 0px;
1613- /*width: 85px;*/
1614- height: 22px;
1615- background: #eaeaea;
1616- color: #555;
1617- border: 1px solid #dedede;
1618- -moz-border-radius: 2px;
1619- -webkit-border-radius: 2px;
1620- border-radius: 2px;
1621-}
1622-
1623-fieldset { border: 1px solid #dedede; padding: 6px; }
1624-legend { font-weight: bold; }
1625-
1626-input:focus, textarea:focus { background: #fafafa; }
1627-
1628-p {text-indent:30px;}
1629-
1630-p, blockquote {
1631- margin-bottom: 10px;
1632-}
1633-
1634-h1,h2,h3,h4,h5,h6 { line-height: 170%; }
1635-h1 {font-size: 2.0em;}
1636-h2 {font-size: 1.8em;}
1637-h3 {font-size: 1.4em;}
1638-h4 {font-size: 1.2em;}
1639-h5 {font-size: 1.0em;}
1640-h6 {font-size: 0.8em;}
1641-
1642-/*********** page layout alignment, width and padding ***********/
1643-/*body {background-color: #000;}*/
1644-#container, #header, #page, #content, #statusbar,
1645-#footer, #wrapper { display:block; line-height: 170%; }
1646-#wrapper {width: 900px;}
1647+q:before, q:after {
1648+ content: '';
1649+ content: none;
1650+}
1651+table {
1652+ border-collapse: collapse;
1653+ border-spacing: 0;
1654+}
1655+
1656+
1657+
1658+
1659+
1660+/* Template */
1661+body {
1662+ background: #f3f3f3 url('/globaleaks/static/images/background.png');
1663+ font-family: Arial, sans-serif;
1664+ color: #444;
1665+}
1666+
1667+.clear {
1668+ clear: both;
1669+}
1670+
1671+strong {
1672+ font-weight: bold;
1673+}
1674+
1675+a.button {
1676+ color: #fff;
1677+ border: 0;
1678+ border-radius: 5px;
1679+ -moz-border-radius: 5px;
1680+ -webkit-border-radius: 5px;
1681+ font-weight: bold;
1682+ cursor: pointer;
1683+ padding: 10px;
1684+ display: block;
1685+ text-decoration: none;
1686+ text-align: center;
1687+ margin: 20px 0 20px 10px;
1688+ float: right;
1689+
1690+}
1691+
1692+a.button.whistleblower {
1693+ background: #0a70b4;
1694+ width: 200px;
1695+}
1696+
1697+a.button.addtarget {
1698+ background: #444;
1699+ width: 100px;
1700+}
1701+
1702+a.button.targetlist {
1703+ float: left;
1704+ color: black;
1705+ background: transparent;
1706+ width: 120px;
1707+}
1708+
1709+a:hover.button.targetlist {
1710+ color: red;
1711+}
1712+
1713+input[type=submit]{
1714+ background: #444;
1715+ color: #fff;
1716+ border: 0;
1717+ border-radius: 5px;
1718+ -moz-border-radius: 5px;
1719+ -webkit-border-radius: 5px;
1720+ font-weight: bold;
1721+ cursor: pointer;
1722+ padding: 5px 10px;
1723+ display: block;
1724+ text-decoration: none;
1725+ text-align: center;
1726+ margin: 10px 0;
1727+ cursor: pointer;
1728+ font-size: 14px;
1729+}
1730+
1731+
1732+p.tulip{
1733+ background: #444;
1734+ color: #fff;
1735+ border: 0;
1736+ border-radius: 5px;
1737+ -moz-border-radius: 5px;
1738+ -webkit-border-radius: 5px;
1739+ font-weight: bold;
1740+ padding: 20px;
1741+ display: block;
1742+ text-decoration: none;
1743+ text-align: center;
1744+ margin: 10px auto 20px auto;
1745+ font-size: 28px;
1746+ width: 300px;
1747+}
1748+
1749+
1750 #container {
1751- margin: 0 auto;
1752- padding: 0;
1753-}
1754-#wrapper {margin: 0 auto;}
1755-#wrapper {background-color: #fff; padding: 5px;}
1756-#statusbar { margin: 5px 0px 20px 0px;}
1757-#footer {
1758- margin-top: 30px;
1759- padding: 5px;
1760-}
1761-#statusbar, #footer {
1762- background: #eaeaea;
1763- border-top: 1px #aaa solid;
1764-}
1765-#logo {
1766- width: 68px;
1767- height: 62px;
1768- background: url(../images/logo.png);
1769-}
1770-#appname {
1771- color: #cccccc;
1772-}
1773-
1774-#right_sidebar { width: 160px; float:right; display: none; }
1775-#left_sidebar { width: 160px; float:left; display: none; }
1776-#content { float: left; /*width: 740px;*//*width: 63%;*/ /*width: 640px; float:left;*/ } /* uncomment this if you are going to use sidebars */
1777-
1778-.auth_navbar {
1779- top: 0px;
1780- float: right;
1781- padding: 3px 10px 3px 10px;
1782-}
1783-
1784-/*********** web2py specific ***********/
1785-div.flash {
1786- font-weight: bold;
1787- display: none;
1788- position: fixed;
1789- padding: 10px;
1790- top: 40px;
1791- right: 10px;
1792- min-width: 280px;
1793- opacity: 0.85;
1794- margin: 0px 0px 10px 10px;
1795- color: #fff;
1796- vertical-align: middle;
1797- cursor: pointer;
1798- background: #000;
1799- border: 2px solid #fff;
1800- -moz-border-radius: 5px;
1801- -webkit-border-radius: 5px;
1802- z-index: 2;
1803-}
1804-
1805-div.error {
1806- background-color: red;
1807- color: white;
1808- padding: 3px;
1809-}
1810-
1811-/***************************
1812- * CSS 3 Buttons
1813- * http://github.com/michenriksen/css3buttons
1814- * created by Michael Henriksen
1815- * License: Unlicense
1816- *
1817- * *******************/
1818-
1819-a.button { display: inline-block; padding: 3px 5px 3px 5px; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 12px; color: #3C3C3D; text-shadow: 1px 1px 0 #FFFFFF; background: #ECECEC url('../images/css3buttons_backgrounds.png') 0 0 no-repeat; white-space: nowrap; overflow: visible; cursor: pointer; text-decoration: none; border: 1px solid #CACACA; -webkit-border-radius: 2px; -moz-border-radius: 2px; -webkit-background-clip: padding-box; border-radius: 2px; outline: none; position: relative; zoom: 1; *display: inline; }
1820-a.button.primary { font-weight: bold }
1821-a.button:hover { color: #FFFFFF; border-color: #388AD4; text-decoration: none; text-shadow: -1px -1px 0 rgba(0,0,0,0.3); background-position: 0 -40px; background-color: #2D7DC5; }
1822-a.button:active,
1823-a.button.active { background-position: 0 -81px; border-color: #347BBA; background-color: #0F5EA2; color: #FFFFFF; text-shadow: none; }
1824-a.button:active { top: 1px }
1825-a.button.negative:hover { color: #FFFFFF; background-position: 0 -121px; background-color: #D84743; border-color: #911D1B; }
1826-a.button.negative:active,
1827-a.button.negative.active { background-position: 0 -161px; background-color: #A5211E; border-color: #911D1B; }
1828-a.button.pill { -webkit-border-radius: 19px; -moz-border-radius: 19px; border-radius: 19px; padding: 2px 10px 2px 10px; }
1829-a.button.left { -webkit-border-bottom-right-radius: 0px; -webkit-border-top-right-radius: 0px; -moz-border-radius-bottomright: 0px; -moz-border-radius-topright: 0px; border-bottom-right-radius: 0px; border-top-right-radius: 0px; margin-right: 0px; }
1830-a.button.middle { margin-right: 0px; margin-left: 0px; -webkit-border-radius: 0px; -moz-border-radius: 0px; border-radius: 0px; border-right: none; border-left: none; }
1831-a.button.right { -webkit-border-bottom-left-radius: 0px; -webkit-border-top-left-radius: 0px; -moz-border-radius-bottomleft: 0px; -moz-border-radius-topleft: 0px; border-top-left-radius: 0px; border-bottom-left-radius: 0px; margin-left: 0px; }
1832-a.button.left:active,
1833-a.button.middle:active,
1834-a.button.right:active { top: 0px }
1835-a.button.big { font-size: 16px; padding-left: 17px; padding-right: 17px; }
1836-a.button span.icon { display: inline-block; width: 14px; height: 12px; margin: auto 7px auto auto; position: relative; top: 2px; background-image: url('../images/css3buttons_icons.png'); background-repeat: no-repeat; }
1837-a.big.button span.icon { top: 0px }
1838-a.button span.icon.book { background-position: 0 0 }
1839-a.button:hover span.icon.book { background-position: 0 -15px }
1840-a.button span.icon.calendar { background-position: 0 -30px }
1841-a.button:hover span.icon.calendar { background-position: 0 -45px }
1842-a.button span.icon.chat { background-position: 0 -60px }
1843-a.button:hover span.icon.chat { background-position: 0 -75px }
1844-a.button span.icon.check { background-position: 0 -90px }
1845-a.button:hover span.icon.check { background-position: 0 -103px }
1846-a.button span.icon.clock { background-position: 0 -116px }
1847-a.button:hover span.icon.clock { background-position: 0 -131px }
1848-a.button span.icon.cog { background-position: 0 -146px }
1849-a.button:hover span.icon.cog { background-position: 0 -161px }
1850-a.button span.icon.comment { background-position: 0 -176px }
1851-a.button:hover span.icon.comment { background-position: 0 -190px }
1852-a.button span.icon.cross { background-position: 0 -204px }
1853-a.button:hover span.icon.cross { background-position: 0 -219px }
1854-a.button span.icon.downarrow { background-position: 0 -234px }
1855-a.button:hover span.icon.downarrow { background-position: 0 -249px }
1856-a.button span.icon.fork { background-position: 0 -264px }
1857-a.button:hover span.icon.fork { background-position: 0 -279px }
1858-a.button span.icon.heart { background-position: 0 -294px }
1859-a.button:hover span.icon.heart { background-position: 0 -308px }
1860-a.button span.icon.home { background-position: 0 -322px }
1861-a.button:hover span.icon.home { background-position: 0 -337px }
1862-a.button span.icon.key { background-position: 0 -352px }
1863-a.button:hover span.icon.key { background-position: 0 -367px }
1864-a.button span.icon.leftarrow { background-position: 0 -382px }
1865-a.button:hover span.icon.leftarrow { background-position: 0 -397px }
1866-a.button span.icon.lock { background-position: 0 -412px }
1867-a.button:hover span.icon.lock { background-position: 0 -427px }
1868-a.button span.icon.loop { background-position: 0 -442px }
1869-a.button:hover span.icon.loop { background-position: 0 -457px }
1870-a.button span.icon.magnifier { background-position: 0 -472px }
1871-a.button:hover span.icon.magnifier { background-position: 0 -487px }
1872-a.button span.icon.mail { background-position: 0 -502px }
1873-a.button:hover span.icon.mail { background-position: 0 -514px }
1874-a.button span.icon.move { background-position: 0 -526px }
1875-a.button:hover span.icon.move { background-position: 0 -541px }
1876-a.button span.icon.pen { background-position: 0 -556px }
1877-a.button:hover span.icon.pen { background-position: 0 -571px }
1878-a.button span.icon.pin { background-position: 0 -586px }
1879-a.button:hover span.icon.pin { background-position: 0 -601px }
1880-a.button span.icon.plus { background-position: 0 -616px }
1881-a.button:hover span.icon.plus { background-position: 0 -631px }
1882-a.button span.icon.reload { background-position: 0 -646px }
1883-a.button:hover span.icon.reload { background-position: 0 -660px }
1884-a.button span.icon.rightarrow { background-position: 0 -674px }
1885-a.button:hover span.icon.rightarrow { background-position: 0 -689px }
1886-a.button span.icon.rss { background-position: 0 -704px }
1887-a.button:hover span.icon.rss { background-position: 0 -719px }
1888-a.button span.icon.tag { background-position: 0 -734px }
1889-a.button:hover span.icon.tag { background-position: 0 -749px }
1890-a.button span.icon.trash { background-position: 0 -764px }
1891-a.button:hover span.icon.trash { background-position: 0 -779px }
1892-a.button span.icon.unlock { background-position: 0 -794px }
1893-a.button:hover span.icon.unlock { background-position: 0 -809px }
1894-a.button span.icon.uparrow { background-position: 0 -824px }
1895-a.button:hover span.icon.uparrow { background-position: 0 -839px }
1896-a.button span.icon.user { background-position: 0 -854px }
1897-a.button:hover span.icon.user { background-position: 0 -869px }
1898-
1899-
1900-
1901-
1902-
1903-
1904-/*****************************************************
1905- * HERE YOU CAN START TO WRITE YOUR OWN DIVS
1906- */
1907-
1908-
1909-
1910-
1911-
1912-
1913-
1914-/*
1915- * Media queries for responsive design
1916- */
1917-
1918-@media all and (orientation:portrait) {
1919- /* Style adjustments for portrait mode goes here */
1920-
1921-}
1922-
1923-@media all and (orientation:landscape) {
1924- /* Style adjustments for landscape mode goes here */
1925-
1926-}
1927-
1928-/* Grade-A Mobile Browsers (Opera Mobile, iPhone Safari, Android Chrome)
1929- Consider this: www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/ */
1930-@media screen and (max-device-width: 480px) {
1931-
1932-
1933- /* Uncomment if you don't want iOS and WinMobile to mobile-optimize the text for you
1934- j.mp/textsizeadjust
1935- html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
1936-}
1937-
1938-
1939-/*
1940- * print styles
1941- * inlined to avoid required HTTP connection www.phpied.com/delay-loading-your-print-css/
1942- */
1943-@media print {
1944- * { background: transparent !important; color: #444 !important; text-shadow: none !important; }
1945- a, a:visited { color: #444 !important; text-decoration: underline; }
1946- a:after { content: " (" attr(href) ")"; }
1947- abbr:after { content: " (" attr(title) ")"; }
1948- .ir a:after { content: ""; } /* Don't show links for images */
1949- pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
1950- thead { display: table-header-group; } /* css-discuss.incutio.com/wiki/Printing_Tables */
1951- tr, img { page-break-inside: avoid; }
1952- @page { margin: 0.5cm; }
1953- p, h2, h3 { orphans: 3; widows: 3; }
1954- h2, h3{ page-break-after: avoid; }
1955+ background: #fff;
1956+ width: 880px;
1957+ padding: 40px;
1958+ margin: 20px auto 5px auto;
1959+ -moz-box-shadow: 0px 0px 3px #dedede;
1960+ -webkit-box-shadow: 5px 5px 0px #dedede;
1961+ box-shadow: 0px 0px 10px #d0d0d0;
1962+}
1963+
1964+#container img.ribbon {
1965+ float: right;
1966+ margin-left: 20px;
1967+ margin-top: -40px;
1968+ margin-right: -40px;
1969+}
1970+
1971+
1972+#header {
1973+ padding-bottom: 40px;
1974+}
1975+
1976+ul#navigation {
1977+ float: right;
1978+ padding: 20px;
1979+ background: #ededed;
1980+}
1981+
1982+ul#navigation li {
1983+ float: left;
1984+ margin-left: 10px;
1985+}
1986+
1987+ul#navigation li.user {
1988+ float: none;
1989+ padding-bottom: 5px;
1990+ font-size: 14px;
1991+}
1992+
1993+ul#navigation a {
1994+ color: #444;
1995+ text-decoration: none;
1996+ text-shadow: #fff 1px 1px 1px;
1997+ font-weight: bold;
1998+ font-size: 14px;
1999+}
2000+
2001+
2002+#content h1 {
2003+ font-size: 32px;
2004+ margin-bottom: 10px;
2005+ text-transform: uppercase;
2006+ font-weight: bold;
2007+}
2008+
2009+#content h1 span {
2010+ font-weight: normal;
2011+ text-transform: none;
2012+}
2013+
2014+#content p.intro {
2015+ line-height: 20px;
2016+ text-align: justify;
2017+ margin-bottom: 20px;
2018+ background: #ededed;
2019+ padding: 20px;
2020+}
2021+
2022+#content .box {
2023+ background: #444;
2024+ width: 340px;
2025+ height: 320px;
2026+ margin: 20px 0;
2027+ float: left;
2028+ padding: 40px;
2029+}
2030+
2031+#content .box.box-hover {
2032+ background: #555;
2033+ transition: background-color 0.3s linear;
2034+ -moz-transition: background-color 0.3s linear; /* FF3.7+ */
2035+ -o-transition: background-color 0.3s linear; /* Opera 10.5 */
2036+ -webkit-transition: background-color 0.3s linear; /* Saf3.2+, Chrome */
2037+}
2038+
2039+#content .box:nth-child(even) {
2040+ margin-left: 40px;
2041+}
2042+
2043+#content .box h2 {
2044+ text-transform: uppercase;
2045+ color: #fff;
2046+ font-weight: bold;
2047+ font-size: 24px;
2048+}
2049+
2050+#content .box h2 span {
2051+ font-size: 48px;
2052+}
2053+
2054+#content .box a {
2055+ display: block;
2056+ color: #fff;
2057+ text-decoration: none;
2058+ text-transform: uppercase;
2059+ font-weight: bold;
2060+ float: right;
2061+ margin-top: 32px;
2062+ background: #0a70b4;
2063+ padding: 10px;
2064+ border-radius:5px;
2065+ -webkit-border-radius:5px;
2066+ -moz-border-radius:5px;
2067+}
2068+
2069+#content .box span.info {
2070+ display: block;
2071+ color: #fff;
2072+ text-decoration: none;
2073+ text-transform: uppercase;
2074+ font-weight: bold;
2075+ float: right;
2076+ margin-top: 42px;
2077+ font-style: italic;
2078+ padding-top: 0px;
2079+}
2080+
2081+#content .box img {
2082+ margin-top: 30px;
2083+}
2084+
2085+
2086+#content form table td {
2087+ padding: 5px 5px 10px 5px;
2088+ vertical-align: top;
2089+}
2090+
2091+#content form table td {
2092+ font-size: 13px;
2093+ font-weight: bold;
2094+}
2095+
2096+
2097+
2098+#content form input {
2099+ border: 1px solid #ddd;
2100+ padding: 5px;
2101+ width: 350px;
2102+ font-size: 13px;
2103+}
2104+
2105+#content form input[type=submit] {
2106+ width: auto;
2107+}
2108+
2109+#content form textarea {
2110+ border: 1px solid #ddd;
2111+ padding: 5px;
2112+ width: 350px;
2113+ font-size: 13px;
2114+}
2115+
2116+#content form .error {
2117+ padding: 5px;
2118+ width: 350px;
2119+ font-size: 13px;
2120+ color: #fff;
2121+ background: #e60000;
2122+ margin-top: 5px;
2123+ font-weight: bold;
2124+}
2125+
2126+#content table.targetlist {
2127+ width: 100%;
2128+ font-size: 14px;
2129+}
2130+
2131+#content table.targetlist th {
2132+ //background: #005ea3;
2133+ background: #444;
2134+ color: #fff;
2135+ border: 1px solid #fff;
2136+ border-bottom: 2px solid #fff;
2137+ font-weight: bold;
2138+ padding: 5px;
2139+ text-align: left;
2140+}
2141+
2142+#content table.targetlist td {
2143+ border: 1px solid #fff;
2144+ border-bottom: 2px solid #fff;
2145+ padding: 5px;
2146+ background: #ededed;
2147+ text-align: left;
2148+}
2149+
2150+#content table.targetlist tr.odd td {
2151+ background: #f5f5f5;
2152+}
2153+
2154+#content table.targetlist td.delete {
2155+ text-align: center;
2156+}
2157+
2158+#content table.targetlist td.delete button {
2159+ background: #e60000;
2160+ color: #fff;
2161+ border: 0;
2162+ border-radius: 3px;
2163+ -moz-border-radius: 3px;
2164+ -webkit-border-radius: 3px;
2165+ font-weight: bold;
2166+ cursor: pointer;
2167+}
2168+
2169+#content table.targetlist .downloads {
2170+ width: 70px;
2171+ text-align: center;
2172+}
2173+
2174+.entry {
2175+ width: 500px;
2176+ margin: 0 auto;
2177+ padding: 40px;
2178+ background: #f4f4f4;
2179+}
2180+
2181+.entry h2, .entry h3 {
2182+ font-weight: bold;
2183+ font-size: 18px;
2184+ margin-bottom: 5px;
2185+}
2186+
2187+.entry h2.title {
2188+ font-size: 28px;
2189+}
2190+
2191+.entry h3 {
2192+ padding-top: 5px;
2193+}
2194+
2195+
2196+.entry p {
2197+ font-size: 14px;
2198+}
2199+
2200+.entry li {
2201+ padding: 7px 0 7px 30px;
2202+ font-size: 14px;
2203+}
2204+
2205+.material ul {
2206+ margin-bottom: 20px;
2207+}
2208+
2209+.material li.zip {
2210+ background: url('/globaleaks/static/images/box_16x16.png') no-repeat left center;
2211+}
2212+
2213+.material li.img {
2214+ background: url('/globaleaks/static/images/image_16x16.png') no-repeat left center;
2215+}
2216+
2217+.material li.pdf {
2218+ background: url('/globaleaks/static/images/document_fill_16x16.png') no-repeat left center;
2219+}
2220+
2221+.material a {
2222+ display: block;
2223+ color: #fff;
2224+ text-decoration: none;
2225+ text-transform: uppercase;
2226+ font-weight: bold;
2227+ font-size: 14px;
2228+ float: left;
2229+ margin: 10px 10px 0 0;
2230+ padding: 10px 10px 10px 30px;
2231+ border-radius:5px;
2232+ -webkit-border-radius:5px;
2233+ -moz-border-radius:5px;
2234+}
2235+
2236+.material a.zip {
2237+ background: #0a70b4 url('/globaleaks/static/images/icon-download-zip.png') no-repeat 5px center;
2238+}
2239+
2240+.material a.crypt {
2241+ background: #0a70b4 url('/globaleaks/static/images/icon-download-crypt.png') no-repeat 5px center;
2242+}
2243+
2244+.downloads-left {
2245+ font-size: 18px;
2246+ float: left;
2247+ background: #444;
2248+ padding: 5px 10px;
2249+ color: #fff;
2250+ margin: 0 10px 10px 0;
2251+}
2252+
2253+.downloads-left.full {
2254+ background: #e60000;
2255+}
2256+
2257+
2258+.total-clicks {
2259+ font-size: 18px;
2260+ float: left;
2261+ background: #444;
2262+ padding: 5px 10px;
2263+ color: #fff;
2264+}
2265+
2266+.entry .material {
2267+ padding: 20px;
2268+ background: #444;
2269+ color: #fff;
2270+ margin: 20px 0;
2271+}
2272+
2273+#footer {
2274+ width: 960px;
2275+ margin: 10px auto 20px auto;
2276+ font-size: 12px;
2277+ text-align: right;
2278+}
2279+
2280+#footer a {
2281+ color: #0a70b4;
2282 }
2283
2284=== added file 'applications/globaleaks/static/css/old.css'
2285--- applications/globaleaks/static/css/old.css 1970-01-01 00:00:00 +0000
2286+++ applications/globaleaks/static/css/old.css 2011-09-02 13:53:25 +0000
2287@@ -0,0 +1,918 @@
2288+@charset "UTF-8";
2289+
2290+/* This file is contains the following sections:
2291+
2292+Update: Revision: 20101102 by Martin Mulone
2293+
2294+- The new revision contains:
2295+- Html5, good practice and normalization support.
2296+- Diferent hacks.
2297+- The normalization and some tags come from
2298+ diferent sites so i keep the credits and comments.
2299+ but the base of support html5 come from:
2300+ http://html5boilerplate.com/
2301+
2302+- ez.css (http://www.ez-css.org/layouts)
2303+- reset common tags
2304+- choose default fonts
2305+- choose link style
2306+- add bottom line to table rows
2307+- labels bold and occasionally centered
2308+- make all input fields the same size
2309+- add proper separation between h1-h6 and text
2310+- always indent the first line and add space below paragraphs
2311+- bullets and numbers style and indent
2312+- form and table padding
2313+- code blocks
2314+- left and right padding to quoted text
2315+- page layout alignment, width and padding (change this for spaces)
2316+- column widths (change this to use left_sidebar and right_sidebar)
2317+- backrgound images and colors (change this for colors)
2318+- web2py specific (.flash, .error)
2319+
2320+Notice:
2321+- even if you use a different layout/css you may need classes .flash and .error
2322+- this is all color neutral except for #349C01 (header, links, lines)
2323+- there are two backrgound images: images/background.png and images/header.png
2324+
2325+License: This file is released under BSD and MIT
2326+
2327+*/
2328+
2329+/*
2330+ credit is left where credit is due.
2331+ additionally, much inspiration was taken from these projects:
2332+ yui.yahooapis.com/2.8.1/build/base/base.css
2333+ camendesign.com/design/
2334+ praegnanz.de/weblog/htmlcssjs-kickstart
2335+*/
2336+
2337+/*
2338+ html5doctor.com Reset Stylesheet (Eric Meyer's Reset Reloaded + HTML5 baseline)
2339+ v1.4 2009-07-27 | Authors: Eric Meyer & Richard Clark
2340+ html5doctor.com/html-5-reset-stylesheet/
2341+*/
2342+
2343+html, body, div, span, object, iframe,
2344+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
2345+abbr, address, cite, code,
2346+del, dfn, em, img, ins, kbd, q, samp,
2347+small, strong, sub, sup, var,
2348+b, i,
2349+dl, dt, dd, ol, ul, li,
2350+fieldset, form, label, legend,
2351+table, caption, tbody, tfoot, thead, tr, th, td,
2352+article, aside, canvas, details, figcaption, figure,
2353+footer, header, hgroup, menu, nav, section, summary,
2354+time, mark, audio, video {
2355+ margin:0;
2356+ padding:0;
2357+ border:0;
2358+ outline:0;
2359+ font: inherit;
2360+ font-size:100%;
2361+ vertical-align:baseline;
2362+ background:transparent;
2363+}
2364+
2365+article, aside, details, figcaption, figure,
2366+footer, header, hgroup, menu, nav, section {
2367+ display:block;
2368+}
2369+
2370+nav ul { list-style:none; }
2371+
2372+blockquote, q { quotes:none; }
2373+
2374+blockquote:before, blockquote:after,
2375+q:before, q:after { content:''; content:none; }
2376+
2377+a { margin:0; padding:0; font-size:100%; vertical-align:baseline; background:transparent; }
2378+a:hover { text-decoration: underline }
2379+
2380+ins { background-color:#ff9; color:#000; text-decoration:none; }
2381+
2382+mark { background-color:#ff9; color:#000; font-style:italic; font-weight:bold; }
2383+
2384+del { text-decoration: line-through; }
2385+
2386+abbr[title], dfn[title] { border-bottom:1px dotted #000; cursor:help; }
2387+
2388+/* tables still need cellspacing="0" in the markup */
2389+table { border-collapse:collapse; border-spacing:0; }
2390+
2391+hr { display:block; height:1px; border:0; border-top:1px solid #ccc; margin:1em 0; padding:0; }
2392+
2393+input, select { vertical-align:middle; }
2394+/* END RESET CSS */
2395+
2396+
2397+/*
2398+fonts.css from the YUI Library: developer.yahoo.com/yui/
2399+ Please refer to developer.yahoo.com/yui/fonts/ for font sizing percentages
2400+
2401+There are three custom edits:
2402+ * remove arial, helvetica from explicit font stack
2403+ * make the line-height relative and unit-less
2404+ * remove the pre, code styles
2405+*/
2406+body { line-height: 1; font:13px/1.231 sans-serif; *font-size:small; } /* hack retained to preserve specificity */
2407+
2408+/*table { font-size:inherit; font:100%; }*/
2409+
2410+select, input, textarea, button { font:99% sans-serif; }
2411+
2412+
2413+/* normalize monospace sizing
2414+ * en.wikipedia.org/wiki/MediaWiki_talk:Common.css/Archive_11#Teletype_style_fix_for_Chrome
2415+ */
2416+pre, code, kbd, samp { font-family: monospace, sans-serif; }
2417+
2418+/*
2419+ * minimal base styles
2420+ */
2421+
2422+/* #444 looks better than black: twitter.com/H_FJ/statuses/11800719859 */
2423+body, select, input, textarea { color:#444; }
2424+
2425+/* Headers (h1,h2,etc) have no default font-size or margin,
2426+ you'll want to define those yourself. */
2427+
2428+/* www.aestheticallyloyal.com/public/optimize-legibility/ */
2429+h1,h2,h3,h4,h5,h6 { font-weight: bold; }
2430+
2431+/* always force a scrollbar in non-IE */
2432+html { overflow-y: scroll; }
2433+
2434+/* Accessible focus treatment: people.opera.com/patrickl/experiments/keyboard/test */
2435+a:hover, a:active { outline: none; }
2436+
2437+a, a:active, a:visited { color:#607890; }
2438+a:hover { color:#036; }
2439+
2440+ul, ol { margin-left: 1.8em; }
2441+ol { list-style-type: decimal; }
2442+
2443+/* Remove margins for navigation lists */
2444+nav ul, nav li { margin: 0; }
2445+
2446+small { font-size:85%; }
2447+strong, th { font-weight: bold; }
2448+
2449+td, td img { vertical-align:top; }
2450+
2451+sub { vertical-align: sub; font-size: smaller; }
2452+sup { vertical-align: super; font-size: smaller; }
2453+
2454+pre {
2455+ padding: 15px;
2456+
2457+ /* www.pathf.com/blogs/2008/05/formatting-quoted-code-in-blog-posts-css21-white-space-pre-wrap/ */
2458+ white-space: pre; /* CSS2 */
2459+ white-space: pre-wrap; /* CSS 2.1 */
2460+ white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
2461+ word-wrap: break-word; /* IE */
2462+}
2463+
2464+textarea { overflow: auto; } /* thnx ivannikolic! www.sitepoint.com/blogs/2010/08/20/ie-remove-textarea-scrollbars/ */
2465+
2466+.ie6 legend, .ie7 legend { margin-left: -7px; } /* thnx ivannikolic! */
2467+
2468+/* align checkboxes, radios, text inputs with their label
2469+ by: Thierry Koblentz tjkdesign.com/ez-css/css/base.css */
2470+input[type="radio"] { vertical-align: text-bottom; }
2471+input[type="checkbox"] { vertical-align: bottom; }
2472+.ie7 input[type="checkbox"] { vertical-align: baseline; }
2473+.ie6 input { vertical-align: text-bottom; }
2474+
2475+/* hand cursor on clickable input elements */
2476+label, input[type=button], input[type=submit], button { cursor: pointer; }
2477+
2478+/* webkit browsers add a 2px margin outside the chrome of form elements */
2479+button, input, select, textarea { margin: 0; }
2480+
2481+/* colors for form validity */
2482+input:valid, textarea:valid { }
2483+input:invalid, textarea:invalid {
2484+ border-radius: 1px;
2485+ -moz-box-shadow: 0px 0px 5px red;
2486+ -webkit-box-shadow: 0px 0px 5px red;
2487+ box-shadow: 0px 0px 5px red;
2488+}
2489+.no-boxshadow input:invalid,
2490+.no-boxshadow textarea:invalid { background-color: #f0dddd; }
2491+
2492+
2493+/* These selection declarations have to be separate.
2494+ No text-shadow: twitter.com/miketaylr/status/12228805301
2495+ Also: hot pink. */
2496+::-moz-selection{ background: #555; color:#fff; text-shadow: none; }
2497+::selection { background:#555; color:#fff; text-shadow: none; }
2498+
2499+/* j.mp/webkit-tap-highlight-color */
2500+a:link { -webkit-tap-highlight-color: #555; }
2501+
2502+
2503+/* make buttons play nice in IE:
2504+ www.viget.com/inspire/styling-the-button-element-in-internet-explorer/ */
2505+button { width: auto; overflow: visible; }
2506+
2507+/* bicubic resizing for non-native sized IMG:
2508+ code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ */
2509+.ie7 img { -ms-interpolation-mode: bicubic; }
2510+
2511+/*
2512+ * Non-semantic helper classes
2513+ */
2514+
2515+/* for image replacement */
2516+.ir { display:block; text-indent:-999em; overflow:hidden; background-repeat: no-repeat; }
2517+
2518+/* Hide for both screenreaders and browsers
2519+ css-discuss.incutio.com/wiki/Screenreader_Visibility */
2520+.hidden { display:none; }
2521+
2522+/* Hide only visually, but have it available for screenreaders
2523+ www.webaim.org/techniques/css/invisiblecontent/
2524+ Solution from: j.mp/visuallyhidden - Thanks Jonathan Neal! */
2525+.visuallyhidden { position:absolute !important;
2526+ clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
2527+ clip: rect(1px, 1px, 1px, 1px); }
2528+
2529+/* Hide visually and from screenreaders, but maintain layout */
2530+.invisible { visibility: hidden; }
2531+
2532+/* >> The Magnificent CLEARFIX: Updated to prevent margin-collapsing on child elements << j.mp/bestclearfix */
2533+.clearfix:before, .clearfix:after {
2534+ content: "\0020"; display: block; height: 0; visibility: hidden;
2535+}
2536+
2537+.clearfix:after { clear: both; }
2538+/* Fix clearfix: blueprintcss.lighthouseapp.com/projects/15318/tickets/5-extra-margin-padding-bottom-of-page */
2539+.clearfix { zoom: 1; }
2540+
2541+
2542+/*********** layout info (ez.css) ***********/
2543+/* 2009 -2010 (c) | ez-css.org
2544+ * ez-plug-min.css :: version 1.1 :: 01182010
2545+ */
2546+.ez-wr:after,.ez-box:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ez-wr,.ez-box,.ez-last{display:inline-block;min-height:0}/* \*/ * html .ez-wr,* html .ez-box,* html .ez-last{height:1%}.ez-wr,.ez-box,.ez-last{display:block}/* */.ez-oh{overflow:hidden}* html .ez-oh{overflow:visible}.ez-oa{overflow:auto}.ez-dt{display:table}.ez-it{display:inline-table}.ez-tc{display:table-cell}.ez-ib{display:inline-block}.ez-fl{float:left}* html .ez-fl{margin-right:-3px}.ez-fr{float:right}* html .ez-fr{margin-left:-3px}.ez-25{width:25%}.ez-33{width:33.33%}.ez-50{width:50%}.ez-66{width:66.66%}.ez-75{width:75%}.ez-negmr{margin-right:-1px}* html .ez-negmr{margin-right:-4px}.ez-negmx{margin-right:-1px}.ez-negml{margin-left:-1px}* html .ez-negml{margin-left:-4px}
2547+
2548+
2549+/*********** add bottom line to table rows ***********/
2550+th, td { padding: 0.1em 0.5em 0.1em 0.5em;}
2551+
2552+/*********** labels bold and occasionally centered ***********/
2553+label {
2554+ white-space: nowrap;
2555+}
2556+label, b, th {
2557+ font-weight: bold;
2558+}
2559+thead th {
2560+ text-align: center;
2561+ border-bottom: 1px solid #444;
2562+}
2563+/*********** forms and table padding ***********/
2564+form, table {
2565+ padding: 5px 10px 5px 10px;
2566+}
2567+
2568+/*********** code blocks ***********/
2569+code {
2570+ padding: 3px 5px;
2571+ font-family: Andale Mono, monospace;
2572+ font-size: 0.9em;
2573+}
2574+
2575+/*********** left and right padding to quoted text ***********/
2576+blockquote {
2577+ background: #cccccc;
2578+ border-left: 30px transparent;
2579+ border-right: 30px transparent;
2580+ /*padding: 5px;*/
2581+}
2582+
2583+input[type=text], input[type=password], textarea, select {
2584+ margin: 2px 15px 2px 5px;
2585+ width: 280px;
2586+ background: #fff;
2587+ color: #555;
2588+ border: 1px solid #dedede;
2589+ -moz-border-radius: 2px;
2590+ -webkit-border-radius: 2px;
2591+ border-radius: 2px;
2592+ font-size: 12px;
2593+}
2594+
2595+input[type=text], input[type=password] {
2596+ height: 16px;
2597+}
2598+
2599+select[multiple=multiple] {
2600+ height: 90px;
2601+}
2602+
2603+input[type=submit], input[type=button], button {
2604+ margin: 0px;
2605+ /*width: 85px;*/
2606+ height: 22px;
2607+ background: #eaeaea;
2608+ color: #555;
2609+ border: 1px solid #dedede;
2610+ -moz-border-radius: 2px;
2611+ -webkit-border-radius: 2px;
2612+ border-radius: 2px;
2613+}
2614+
2615+fieldset { border: 1px solid #dedede; padding: 6px; }
2616+legend { font-weight: bold; }
2617+
2618+input:focus, textarea:focus { background: #fafafa; }
2619+
2620+p {text-indent:30px;}
2621+
2622+p, blockquote {
2623+ margin-bottom: 10px;
2624+}
2625+
2626+h1,h2,h3,h4,h5,h6 { line-height: 170%; }
2627+h1 {font-size: 2.0em;}
2628+h2 {font-size: 1.8em;}
2629+h3 {font-size: 1.4em;}
2630+h4 {font-size: 1.2em;}
2631+h5 {font-size: 1.0em;}
2632+h6 {font-size: 0.8em;}
2633+
2634+/*********** page layout alignment, width and padding ***********/
2635+/*body {background-color: #000;}*/
2636+#wrapper {width: 900px;}
2637+
2638+#wrapper {margin: 0 auto;}
2639+#wrapper {background-color: #fff; padding: 5px;}
2640+#statusbar { margin: 5px 0px 20px 0px;}
2641+#footer {
2642+ margin-top: 30px;
2643+ padding: 5px;
2644+}
2645+#statusbar, #footer {
2646+ background: #eaeaea;
2647+ border-top: 1px #aaa solid;
2648+}
2649+#logo {
2650+ width: 68px;
2651+ height: 62px;
2652+ background: url(../images/logo.png);
2653+}
2654+#appname {
2655+ color: #cccccc;
2656+}
2657+
2658+#right_sidebar { width: 160px; float:right; display: none; }
2659+#left_sidebar { width: 160px; float:left; display: none; }
2660+#content { float: left; /*width: 740px;*//*width: 63%;*/ /*width: 640px; float:left;*/ } /* uncomment this if you are going to use sidebars */
2661+
2662+.auth_navbar {
2663+ top: 0px;
2664+ float: right;
2665+ padding: 3px 10px 3px 10px;
2666+}
2667+
2668+/*********** web2py specific ***********/
2669+div.flash {
2670+ font-weight: bold;
2671+ display: none;
2672+ position: fixed;
2673+ padding: 10px;
2674+ top: 40px;
2675+ right: 10px;
2676+ min-width: 280px;
2677+ opacity: 0.85;
2678+ margin: 0px 0px 10px 10px;
2679+ color: #fff;
2680+ vertical-align: middle;
2681+ cursor: pointer;
2682+ background: #000;
2683+ border: 2px solid #fff;
2684+ -moz-border-radius: 5px;
2685+ -webkit-border-radius: 5px;
2686+ z-index: 2;
2687+}
2688+
2689+div.error {
2690+ background-color: red;
2691+ color: white;
2692+ padding: 3px;
2693+}
2694+
2695+/***************************
2696+ * CSS 3 Buttons
2697+ * http://github.com/michenriksen/css3buttons
2698+ * created by Michael Henriksen
2699+ * License: Unlicense
2700+ *
2701+ * *******************/
2702+
2703+a.button { display: inline-block; padding: 3px 5px 3px 5px; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 12px; color: #3C3C3D; text-shadow: 1px 1px 0 #FFFFFF; background: #ECECEC url('../images/css3buttons_backgrounds.png') 0 0 no-repeat; white-space: nowrap; overflow: visible; cursor: pointer; text-decoration: none; border: 1px solid #CACACA; -webkit-border-radius: 2px; -moz-border-radius: 2px; -webkit-background-clip: padding-box; border-radius: 2px; outline: none; position: relative; zoom: 1; *display: inline; }
2704+a.button.primary { font-weight: bold }
2705+a.button:hover { color: #FFFFFF; border-color: #388AD4; text-decoration: none; text-shadow: -1px -1px 0 rgba(0,0,0,0.3); background-position: 0 -40px; background-color: #2D7DC5; }
2706+a.button:active,
2707+a.button.active { background-position: 0 -81px; border-color: #347BBA; background-color: #0F5EA2; color: #FFFFFF; text-shadow: none; }
2708+a.button:active { top: 1px }
2709+a.button.negative:hover { color: #FFFFFF; background-position: 0 -121px; background-color: #D84743; border-color: #911D1B; }
2710+a.button.negative:active,
2711+a.button.negative.active { background-position: 0 -161px; background-color: #A5211E; border-color: #911D1B; }
2712+a.button.pill { -webkit-border-radius: 19px; -moz-border-radius: 19px; border-radius: 19px; padding: 2px 10px 2px 10px; }
2713+a.button.left { -webkit-border-bottom-right-radius: 0px; -webkit-border-top-right-radius: 0px; -moz-border-radius-bottomright: 0px; -moz-border-radius-topright: 0px; border-bottom-right-radius: 0px; border-top-right-radius: 0px; margin-right: 0px; }
2714+a.button.middle { margin-right: 0px; margin-left: 0px; -webkit-border-radius: 0px; -moz-border-radius: 0px; border-radius: 0px; border-right: none; border-left: none; }
2715+a.button.right { -webkit-border-bottom-left-radius: 0px; -webkit-border-top-left-radius: 0px; -moz-border-radius-bottomleft: 0px; -moz-border-radius-topleft: 0px; border-top-left-radius: 0px; border-bottom-left-radius: 0px; margin-left: 0px; }
2716+a.button.left:active,
2717+a.button.middle:active,
2718+a.button.right:active { top: 0px }
2719+a.button.big { font-size: 16px; padding-left: 17px; padding-right: 17px; }
2720+a.button span.icon { display: inline-block; width: 14px; height: 12px; margin: auto 7px auto auto; position: relative; top: 2px; background-image: url('../images/css3buttons_icons.png'); background-repeat: no-repeat; }
2721+a.big.button span.icon { top: 0px }
2722+a.button span.icon.book { background-position: 0 0 }
2723+a.button:hover span.icon.book { background-position: 0 -15px }
2724+a.button span.icon.calendar { background-position: 0 -30px }
2725+a.button:hover span.icon.calendar { background-position: 0 -45px }
2726+a.button span.icon.chat { background-position: 0 -60px }
2727+a.button:hover span.icon.chat { background-position: 0 -75px }
2728+a.button span.icon.check { background-position: 0 -90px }
2729+a.button:hover span.icon.check { background-position: 0 -103px }
2730+a.button span.icon.clock { background-position: 0 -116px }
2731+a.button:hover span.icon.clock { background-position: 0 -131px }
2732+a.button span.icon.cog { background-position: 0 -146px }
2733+a.button:hover span.icon.cog { background-position: 0 -161px }
2734+a.button span.icon.comment { background-position: 0 -176px }
2735+a.button:hover span.icon.comment { background-position: 0 -190px }
2736+a.button span.icon.cross { background-position: 0 -204px }
2737+a.button:hover span.icon.cross { background-position: 0 -219px }
2738+a.button span.icon.downarrow { background-position: 0 -234px }
2739+a.button:hover span.icon.downarrow { background-position: 0 -249px }
2740+a.button span.icon.fork { background-position: 0 -264px }
2741+a.button:hover span.icon.fork { background-position: 0 -279px }
2742+a.button span.icon.heart { background-position: 0 -294px }
2743+a.button:hover span.icon.heart { background-position: 0 -308px }
2744+a.button span.icon.home { background-position: 0 -322px }
2745+a.button:hover span.icon.home { background-position: 0 -337px }
2746+a.button span.icon.key { background-position: 0 -352px }
2747+a.button:hover span.icon.key { background-position: 0 -367px }
2748+a.button span.icon.leftarrow { background-position: 0 -382px }
2749+a.button:hover span.icon.leftarrow { background-position: 0 -397px }
2750+a.button span.icon.lock { background-position: 0 -412px }
2751+a.button:hover span.icon.lock { background-position: 0 -427px }
2752+a.button span.icon.loop { background-position: 0 -442px }
2753+a.button:hover span.icon.loop { background-position: 0 -457px }
2754+a.button span.icon.magnifier { background-position: 0 -472px }
2755+a.button:hover span.icon.magnifier { background-position: 0 -487px }
2756+a.button span.icon.mail { background-position: 0 -502px }
2757+a.button:hover span.icon.mail { background-position: 0 -514px }
2758+a.button span.icon.move { background-position: 0 -526px }
2759+a.button:hover span.icon.move { background-position: 0 -541px }
2760+a.button span.icon.pen { background-position: 0 -556px }
2761+a.button:hover span.icon.pen { background-position: 0 -571px }
2762+a.button span.icon.pin { background-position: 0 -586px }
2763+a.button:hover span.icon.pin { background-position: 0 -601px }
2764+a.button span.icon.plus { background-position: 0 -616px }
2765+a.button:hover span.icon.plus { background-position: 0 -631px }
2766+a.button span.icon.reload { background-position: 0 -646px }
2767+a.button:hover span.icon.reload { background-position: 0 -660px }
2768+a.button span.icon.rightarrow { background-position: 0 -674px }
2769+a.button:hover span.icon.rightarrow { background-position: 0 -689px }
2770+a.button span.icon.rss { background-position: 0 -704px }
2771+a.button:hover span.icon.rss { background-position: 0 -719px }
2772+a.button span.icon.tag { background-position: 0 -734px }
2773+a.button:hover span.icon.tag { background-position: 0 -749px }
2774+a.button span.icon.trash { background-position: 0 -764px }
2775+a.button:hover span.icon.trash { background-position: 0 -779px }
2776+a.button span.icon.unlock { background-position: 0 -794px }
2777+a.button:hover span.icon.unlock { background-position: 0 -809px }
2778+a.button span.icon.uparrow { background-position: 0 -824px }
2779+a.button:hover span.icon.uparrow { background-position: 0 -839px }
2780+a.button span.icon.user { background-position: 0 -854px }
2781+a.button:hover span.icon.user { background-position: 0 -869px }
2782+
2783+
2784+/*****************************************************
2785+ * HERE YOU CAN START TO WRITE YOUR OWN DIVS
2786+ */
2787+
2788+body {
2789+ background: #f3f3f3;
2790+ font-family: Arial, sans-serif;
2791+ color: #444;
2792+}
2793+
2794+.clear {
2795+ clear: both;
2796+}
2797+
2798+strong {
2799+ font-weight: bold;
2800+}
2801+
2802+a.button {
2803+ color: #fff;
2804+ border: 0;
2805+ border-radius: 5px;
2806+ -moz-border-radius: 5px;
2807+ -webkit-border-radius: 5px;
2808+ font-weight: bold;
2809+ cursor: pointer;
2810+ padding: 10px;
2811+ display: block;
2812+ text-decoration: none;
2813+ text-align: center;
2814+ margin: 20px 0 20px 10px;
2815+ float: right;
2816+
2817+}
2818+
2819+a.button.whistblower {
2820+ background: #0a70b4;
2821+ width: 200px;
2822+}
2823+
2824+a.button.addtarget {
2825+ background: #444;
2826+ width: 100px;
2827+}
2828+
2829+input[type=submit]{
2830+ background: #444;
2831+ color: #fff;
2832+ border: 0;
2833+ border-radius: 5px;
2834+ -moz-border-radius: 5px;
2835+ -webkit-border-radius: 5px;
2836+ font-weight: bold;
2837+ cursor: pointer;
2838+ padding: 5px 10px;
2839+ display: block;
2840+ text-decoration: none;
2841+ text-align: center;
2842+ margin: 10px 0;
2843+ cursor: pointer;
2844+ font-size: 14px;
2845+}
2846+
2847+
2848+p.tulip{
2849+ background: #444;
2850+ color: #fff;
2851+ border: 0;
2852+ border-radius: 5px;
2853+ -moz-border-radius: 5px;
2854+ -webkit-border-radius: 5px;
2855+ font-weight: bold;
2856+ padding: 20px;
2857+ display: block;
2858+ text-decoration: none;
2859+ text-align: center;
2860+ margin: 10px 0 20px 0;
2861+ font-size: 24px;
2862+ width: 300px;
2863+}
2864+
2865+
2866+#container {
2867+ background: #fff;
2868+ width: 880px;
2869+ padding: 40px;
2870+ margin: 20px auto;
2871+ -moz-box-shadow: 0px 0px 3px #dedede;
2872+ -webkit-box-shadow: 5px 5px 0px #dedede;
2873+ box-shadow: 0px 0px 10px #d0d0d0;
2874+}
2875+
2876+#container img.ribbon {
2877+ float: right;
2878+ margin-left: 20px;
2879+ margin-right: -20px;
2880+ margin-top: -45px;
2881+}
2882+
2883+
2884+#header {
2885+ padding-bottom: 40px;
2886+}
2887+
2888+ul#navigation {
2889+ float: right;
2890+}
2891+
2892+ul#navigation li {
2893+ float: left;
2894+ margin-left: 10px;
2895+}
2896+
2897+ul#navigation a {
2898+ color: #444;
2899+ text-decoration: none;
2900+ font-weight: bold;
2901+ font-size: 14px;
2902+}
2903+
2904+
2905+#content h1 {
2906+ font-size: 28px;
2907+ margin-bottom: 10px;
2908+ text-transform: uppercase;
2909+ font-weight: bold;
2910+}
2911+
2912+#content h1 span {
2913+ font-weight: normal;
2914+ text-transform: none;
2915+}
2916+
2917+#content p.intro {
2918+ line-height: 18px;
2919+ text-align: justify;
2920+ margin-bottom: 20px;
2921+}
2922+
2923+#content .box {
2924+ background: #444;
2925+ width: 320px;
2926+ height: 320px;
2927+ margin: 20px 0;
2928+ float: left;
2929+ padding: 40px;
2930+}
2931+
2932+#content .box:nth-child(even) {
2933+ margin-left: 40px;
2934+}
2935+
2936+#content .box h2 {
2937+ text-transform: uppercase;
2938+ color: #fff;
2939+ font-weight: bold;
2940+ font-size: 24px;
2941+}
2942+
2943+#content .box h2 span {
2944+ font-size: 48px;
2945+}
2946+
2947+#content .box a {
2948+ display: block;
2949+ color: #fff;
2950+ text-decoration: none;
2951+ text-transform: uppercase;
2952+ font-weight: bold;
2953+ float: right;
2954+ margin-top: 32px;
2955+ background: #0a70b4;
2956+ padding: 10px;
2957+ border-radius:5px;
2958+ -webkit-border-radius:5px;
2959+ -moz-border-radius:5px;
2960+}
2961+
2962+#content .box span.info {
2963+ display: block;
2964+ color: #fff;
2965+ text-decoration: none;
2966+ text-transform: uppercase;
2967+ font-weight: bold;
2968+ float: right;
2969+ margin-top: 42px;
2970+ font-style: italic;
2971+ padding-top: 0px;
2972+}
2973+
2974+#content .box img {
2975+ margin-top: 30px;
2976+}
2977+
2978+
2979+#content form table td {
2980+ padding: 5px 5px 10px 5px;
2981+ vertical-align: top;
2982+}
2983+
2984+#content form table td.w2p_fl {
2985+ font-size: 13px;
2986+ font-weight: bold;
2987+}
2988+
2989+#content form label {
2990+ font-size: 13px;
2991+}
2992+
2993+
2994+#content form input.string {
2995+ border: 1px solid #ddd;
2996+ padding: 5px;
2997+ width: 350px;
2998+ font-size: 13px;
2999+}
3000+
3001+#content form textarea {
3002+ border: 1px solid #ddd;
3003+ padding: 5px;
3004+ width: 350px;
3005+ font-size: 13px;
3006+}
3007+
3008+#content form .error {
3009+ padding: 5px;
3010+ width: 350px;
3011+ font-size: 13px;
3012+ color: #fff;
3013+ background: #e60000;
3014+ margin-top: 5px;
3015+ font-weight: bold;
3016+}
3017+
3018+#content table.targetlist {
3019+ width: 100%;
3020+ font-size: 14px;
3021+}
3022+
3023+#content table.targetlist th {
3024+ //background: #005ea3;
3025+ background: #444;
3026+ color: #fff;
3027+ border: 1px solid #fff;
3028+ border-bottom: 2px solid #fff;
3029+ font-weight: bold;
3030+ padding: 5px;
3031+ text-align: left;
3032+}
3033+
3034+#content table.targetlist td {
3035+ border: 1px solid #fff;
3036+ border-bottom: 2px solid #fff;
3037+ padding: 5px;
3038+ background: #ededed;
3039+ text-align: left;
3040+}
3041+
3042+#content table.targetlist tr.odd td {
3043+ background: #f5f5f5;
3044+}
3045+
3046+#content table.targetlist td.delete {
3047+ text-align: center;
3048+}
3049+
3050+#content table.targetlist td.delete button {
3051+ background: #e60000;
3052+ color: #fff;
3053+ border: 0;
3054+ border-radius: 3px;
3055+ -moz-border-radius: 3px;
3056+ -webkit-border-radius: 3px;
3057+ font-weight: bold;
3058+ cursor: pointer;
3059+}
3060+
3061+#content table.targetlist .downloads {
3062+ width: 70px;
3063+ text-align: center;
3064+}
3065+
3066+.entry {
3067+ width: 500px;
3068+ margin: 0 auto;
3069+ padding: 40px;
3070+ background: #f4f4f4;
3071+}
3072+
3073+.entry h2, .entry h3 {
3074+ font-weight: bold;
3075+ font-size: 18px;
3076+ margin-bottom: 5px;
3077+}
3078+
3079+.entry h2.title {
3080+ font-size: 28px;
3081+}
3082+
3083+.entry h3 {
3084+ margin-bottom: 20px;
3085+ padding-top: 5px;
3086+}
3087+
3088+
3089+.entry p {
3090+ font-size: 14px;
3091+}
3092+
3093+.entry li {
3094+ padding: 7px 0 7px 30px;
3095+ font-size: 14px;
3096+}
3097+
3098+
3099+.material li.zip {
3100+ background: url('/globaleaks/static/images/box_16x16.png') no-repeat left center;
3101+}
3102+
3103+.material li.img {
3104+ background: url('/globaleaks/static/images/image_16x16.png') no-repeat left center;
3105+}
3106+
3107+.material li.pdf {
3108+ background: url('/globaleaks/static/images/document_fill_16x16.png') no-repeat left center;
3109+}
3110+
3111+.material a {
3112+ display: block;
3113+ color: #fff;
3114+ text-decoration: none;
3115+ text-transform: uppercase;
3116+ font-weight: bold;
3117+ font-size: 14px;
3118+ float: left;
3119+ margin: 20px 10px 0 0;
3120+ padding: 10px 10px 10px 30px;
3121+ border-radius:5px;
3122+ -webkit-border-radius:5px;
3123+ -moz-border-radius:5px;
3124+}
3125+
3126+.material a.zip {
3127+ background: #0a70b4 url('/globaleaks/static/images/icon-download-zip.png') no-repeat 5px center;
3128+}
3129+
3130+.material a.crypt {
3131+ background: #0a70b4 url('/globaleaks/static/images/icon-download-crypt.png') no-repeat 5px center;
3132+}
3133+
3134+.downloads-left {
3135+ font-size: 18px;
3136+ float: left;
3137+ background: #444;
3138+ padding: 5px 10px;
3139+ color: #fff;
3140+ margin: 0 10px 10px 0;
3141+}
3142+
3143+.downloads-left.full {
3144+ background: #e60000;
3145+}
3146+
3147+
3148+.total-clicks {
3149+ font-size: 18px;
3150+ float: left;
3151+ background: #444;
3152+ padding: 5px 10px;
3153+ color: #fff;
3154+}
3155+
3156+.entry .material {
3157+ padding: 20px;
3158+ background: #444;
3159+ color: #fff;
3160+ margin: 20px 0;
3161+}
3162+
3163+
3164+/*
3165+ * Media queries for responsive design
3166+ */
3167+
3168+@media all and (orientation:portrait) {
3169+ /* Style adjustments for portrait mode goes here */
3170+
3171+}
3172+
3173+@media all and (orientation:landscape) {
3174+ /* Style adjustments for landscape mode goes here */
3175+
3176+}
3177+
3178+/* Grade-A Mobile Browsers (Opera Mobile, iPhone Safari, Android Chrome)
3179+ Consider this: www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/ */
3180+@media screen and (max-device-width: 480px) {
3181+
3182+
3183+ /* Uncomment if you don't want iOS and WinMobile to mobile-optimize the text for you
3184+ j.mp/textsizeadjust
3185+ html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
3186+}
3187+
3188+
3189+/*
3190+ * print styles
3191+ * inlined to avoid required HTTP connection www.phpied.com/delay-loading-your-print-css/
3192+ */
3193+@media print {
3194+ * { background: transparent !important; color: #444 !important; text-shadow: none !important; }
3195+ a, a:visited { color: #444 !important; text-decoration: underline; }
3196+ a:after { content: " (" attr(href) ")"; }
3197+ abbr:after { content: " (" attr(title) ")"; }
3198+ .ir a:after { content: ""; } /* Don't show links for images */
3199+ pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
3200+ thead { display: table-header-group; } /* css-discuss.incutio.com/wiki/Printing_Tables */
3201+ tr, img { page-break-inside: avoid; }
3202+ @page { margin: 0.5cm; }
3203+ p, h2, h3 { orphans: 3; widows: 3; }
3204+ h2, h3{ page-break-after: avoid; }
3205+}
3206
3207=== added file 'applications/globaleaks/static/css/semifixed.css'
3208--- applications/globaleaks/static/css/semifixed.css 1970-01-01 00:00:00 +0000
3209+++ applications/globaleaks/static/css/semifixed.css 2011-09-02 13:53:25 +0000
3210@@ -0,0 +1,435 @@
3211+@charset "UTF-8";
3212+html, body, div, span, object, iframe,
3213+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
3214+abbr, address, cite, code,
3215+del, dfn, em, img, ins, kbd, q, samp,
3216+small, strong, sub, sup, var,
3217+b, i,
3218+dl, dt, dd, ol, ul, li,
3219+fieldset, form, label, legend,
3220+table, caption, tbody, tfoot, thead, tr, th, td,
3221+article, aside, canvas, details, figcaption, figure,
3222+footer, header, hgroup, menu, nav, section, summary,
3223+time, mark, audio, video {
3224+ margin:0;
3225+ padding:0;
3226+ border:0;
3227+ outline:0;
3228+ font: inherit;
3229+ font-size:100%;
3230+ vertical-align:baseline;
3231+ background:transparent;
3232+}
3233+
3234+article, aside, details, figcaption, figure,
3235+footer, header, hgroup, menu, nav, section {
3236+ display:block;
3237+}
3238+
3239+nav ul { list-style:none; }
3240+
3241+blockquote, q { quotes:none; }
3242+
3243+blockquote:before, blockquote:after,
3244+q:before, q:after { content:''; content:none; }
3245+
3246+a { margin:0; padding:0; font-size:100%; vertical-align:baseline; background:transparent; }
3247+a:hover { text-decoration: underline }
3248+
3249+ins { background-color:#ff9; color:#000; text-decoration:none; }
3250+
3251+mark { background-color:#ff9; color:#000; font-style:italic; font-weight:bold; }
3252+
3253+del { text-decoration: line-through; }
3254+
3255+abbr[title], dfn[title] { border-bottom:1px dotted #000; cursor:help; }
3256+
3257+/* tables still need cellspacing="0" in the markup */
3258+table { border-collapse:collapse; border-spacing:0; }
3259+
3260+hr { display:block; height:1px; border:0; border-top:1px solid #ccc; margin:1em 0; padding:0; }
3261+
3262+input, select { vertical-align:middle; }
3263+
3264+ol, ul {
3265+ list-style: none;
3266+}
3267+
3268+body { line-height: 1; font:13px/1.231 sans-serif; *font-size:small; } /* hack retained to preserve specificity */
3269+
3270+body {
3271+ background: #f3f3f3;
3272+ font-family: Arial, sans-serif;
3273+ color: #444;
3274+}
3275+
3276+.clear {
3277+ clear: both;
3278+}
3279+
3280+strong {
3281+ font-weight: bold;
3282+}
3283+
3284+a.button {
3285+ color: #fff;
3286+ border: 0;
3287+ border-radius: 5px;
3288+ -moz-border-radius: 5px;
3289+ -webkit-border-radius: 5px;
3290+ font-weight: bold;
3291+ cursor: pointer;
3292+ padding: 10px;
3293+ display: block;
3294+ text-decoration: none;
3295+ text-align: center;
3296+ margin: 20px 0 20px 10px;
3297+ float: right;
3298+
3299+}
3300+
3301+a.button.whistblower {
3302+ background: #0a70b4;
3303+ width: 200px;
3304+}
3305+
3306+a.button.addtarget {
3307+ background: #444;
3308+ width: 100px;
3309+}
3310+
3311+input[type=submit]{
3312+ background: #444;
3313+ color: #fff;
3314+ border: 0;
3315+ border-radius: 5px;
3316+ -moz-border-radius: 5px;
3317+ -webkit-border-radius: 5px;
3318+ font-weight: bold;
3319+ cursor: pointer;
3320+ padding: 5px 10px;
3321+ display: block;
3322+ text-decoration: none;
3323+ text-align: center;
3324+ margin: 10px 0;
3325+ cursor: pointer;
3326+ font-size: 14px;
3327+}
3328+
3329+
3330+p.tulip{
3331+ background: #444;
3332+ color: #fff;
3333+ border: 0;
3334+ border-radius: 5px;
3335+ -moz-border-radius: 5px;
3336+ -webkit-border-radius: 5px;
3337+ font-weight: bold;
3338+ padding: 20px;
3339+ display: block;
3340+ text-decoration: none;
3341+ text-align: center;
3342+ margin: 10px 0 20px 0;
3343+ font-size: 24px;
3344+ width: 300px;
3345+}
3346+
3347+
3348+#container {
3349+ background: #fff;
3350+ width: 880px;
3351+ padding: 40px;
3352+ margin: 20px auto;
3353+ -moz-box-shadow: 0px 0px 3px #dedede;
3354+ -webkit-box-shadow: 5px 5px 0px #dedede;
3355+ box-shadow: 0px 0px 10px #d0d0d0;
3356+}
3357+
3358+#container img.ribbon {
3359+ float: right;
3360+ margin-left: 20px;
3361+ margin-right: -20px;
3362+ margin-top: -45px;
3363+}
3364+
3365+
3366+#header {
3367+ padding-bottom: 40px;
3368+}
3369+
3370+ul#navigation {
3371+ float: right;
3372+}
3373+
3374+ul#navigation li {
3375+ float: left;
3376+ margin-left: 10px;
3377+}
3378+
3379+ul#navigation a {
3380+ color: #444;
3381+ text-decoration: none;
3382+ font-weight: bold;
3383+ font-size: 14px;
3384+}
3385+
3386+
3387+#content h1 {
3388+ font-size: 28px;
3389+ margin-bottom: 10px;
3390+ text-transform: uppercase;
3391+ font-weight: bold;
3392+}
3393+
3394+#content h1 span {
3395+ font-weight: normal;
3396+ text-transform: none;
3397+}
3398+
3399+#content p.intro {
3400+ line-height: 18px;
3401+ text-align: justify;
3402+ margin-bottom: 20px;
3403+}
3404+
3405+#content .box {
3406+ background: #444;
3407+ width: 320px;
3408+ height: 320px;
3409+ margin: 20px 0;
3410+ float: left;
3411+ padding: 40px;
3412+}
3413+
3414+#content .box:nth-child(even) {
3415+ margin-left: 40px;
3416+}
3417+
3418+#content .box h2 {
3419+ text-transform: uppercase;
3420+ color: #fff;
3421+ font-weight: bold;
3422+ font-size: 24px;
3423+}
3424+
3425+#content .box h2 span {
3426+ font-size: 48px;
3427+}
3428+
3429+#content .box a {
3430+ display: block;
3431+ color: #fff;
3432+ text-decoration: none;
3433+ text-transform: uppercase;
3434+ font-weight: bold;
3435+ float: right;
3436+ margin-top: 32px;
3437+ background: #0a70b4;
3438+ padding: 10px;
3439+ border-radius:5px;
3440+ -webkit-border-radius:5px;
3441+ -moz-border-radius:5px;
3442+}
3443+
3444+#content .box span.info {
3445+ display: block;
3446+ color: #fff;
3447+ text-decoration: none;
3448+ text-transform: uppercase;
3449+ font-weight: bold;
3450+ float: right;
3451+ margin-top: 42px;
3452+ font-style: italic;
3453+ padding-top: 0px;
3454+}
3455+
3456+#content .box img {
3457+ margin-top: 30px;
3458+}
3459+
3460+
3461+#content form table td {
3462+ padding: 5px 5px 10px 5px;
3463+ vertical-align: top;
3464+}
3465+
3466+#content form table td.w2p_fl {
3467+ font-size: 13px;
3468+ font-weight: bold;
3469+}
3470+
3471+#content form label {
3472+ font-size: 13px;
3473+}
3474+
3475+
3476+#content form input.string {
3477+ border: 1px solid #ddd;
3478+ padding: 5px;
3479+ width: 350px;
3480+ font-size: 13px;
3481+}
3482+
3483+#content form textarea {
3484+ border: 1px solid #ddd;
3485+ padding: 5px;
3486+ width: 350px;
3487+ font-size: 13px;
3488+}
3489+
3490+#content form .error {
3491+ padding: 5px;
3492+ width: 350px;
3493+ font-size: 13px;
3494+ color: #fff;
3495+ background: #e60000;
3496+ margin-top: 5px;
3497+ font-weight: bold;
3498+}
3499+
3500+#content table.targetlist {
3501+ width: 100%;
3502+ font-size: 14px;
3503+}
3504+
3505+#content table.targetlist th {
3506+ //background: #005ea3;
3507+ background: #444;
3508+ color: #fff;
3509+ border: 1px solid #fff;
3510+ border-bottom: 2px solid #fff;
3511+ font-weight: bold;
3512+ padding: 5px;
3513+ text-align: left;
3514+}
3515+
3516+#content table.targetlist td {
3517+ border: 1px solid #fff;
3518+ border-bottom: 2px solid #fff;
3519+ padding: 5px;
3520+ background: #ededed;
3521+ text-align: left;
3522+}
3523+
3524+#content table.targetlist tr.odd td {
3525+ background: #f5f5f5;
3526+}
3527+
3528+#content table.targetlist td.delete {
3529+ text-align: center;
3530+}
3531+
3532+#content table.targetlist td.delete button {
3533+ background: #e60000;
3534+ color: #fff;
3535+ border: 0;
3536+ border-radius: 3px;
3537+ -moz-border-radius: 3px;
3538+ -webkit-border-radius: 3px;
3539+ font-weight: bold;
3540+ cursor: pointer;
3541+}
3542+
3543+#content table.targetlist .downloads {
3544+ width: 70px;
3545+ text-align: center;
3546+}
3547+
3548+.entry {
3549+ width: 500px;
3550+ margin: 0 auto;
3551+ padding: 40px;
3552+ background: #f4f4f4;
3553+}
3554+
3555+.entry h2, .entry h3 {
3556+ font-weight: bold;
3557+ font-size: 18px;
3558+ margin-bottom: 5px;
3559+}
3560+
3561+.entry h2.title {
3562+ font-size: 28px;
3563+}
3564+
3565+.entry h3 {
3566+ margin-bottom: 20px;
3567+ padding-top: 5px;
3568+}
3569+
3570+
3571+.entry p {
3572+ font-size: 14px;
3573+}
3574+
3575+.entry li {
3576+ padding: 7px 0 7px 30px;
3577+ font-size: 14px;
3578+}
3579+
3580+
3581+.material li.zip {
3582+ background: url('/globaleaks/static/images/box_16x16.png') no-repeat left center;
3583+}
3584+
3585+.material li.img {
3586+ background: url('/globaleaks/static/images/image_16x16.png') no-repeat left center;
3587+}
3588+
3589+.material li.pdf {
3590+ background: url('/globaleaks/static/images/document_fill_16x16.png') no-repeat left center;
3591+}
3592+
3593+.material a {
3594+ display: block;
3595+ color: #fff;
3596+ text-decoration: none;
3597+ text-transform: uppercase;
3598+ font-weight: bold;
3599+ font-size: 14px;
3600+ float: left;
3601+ margin: 20px 10px 0 0;
3602+ padding: 10px 10px 10px 30px;
3603+ border-radius:5px;
3604+ -webkit-border-radius:5px;
3605+ -moz-border-radius:5px;
3606+}
3607+
3608+.material a.zip {
3609+ background: #0a70b4 url('/globaleaks/static/images/icon-download-zip.png') no-repeat 5px center;
3610+}
3611+
3612+.material a.crypt {
3613+ background: #0a70b4 url('/globaleaks/static/images/icon-download-crypt.png') no-repeat 5px center;
3614+}
3615+
3616+.downloads-left {
3617+ font-size: 18px;
3618+ float: left;
3619+ background: #444;
3620+ padding: 5px 10px;
3621+ color: #fff;
3622+ margin: 0 10px 10px 0;
3623+}
3624+
3625+.downloads-left.full {
3626+ background: #e60000;
3627+}
3628+
3629+
3630+.total-clicks {
3631+ font-size: 18px;
3632+ float: left;
3633+ background: #444;
3634+ padding: 5px 10px;
3635+ color: #fff;
3636+}
3637+
3638+.entry .material {
3639+ padding: 20px;
3640+ background: #444;
3641+ color: #fff;
3642+ margin: 20px 0;
3643+}
3644+
3645+
3646
3647=== added file 'applications/globaleaks/static/images/background-big.png'
3648Binary files applications/globaleaks/static/images/background-big.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/background-big.png 2011-09-02 13:53:25 +0000 differ
3649=== added file 'applications/globaleaks/static/images/background.png'
3650Binary files applications/globaleaks/static/images/background.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/background.png 2011-09-02 13:53:25 +0000 differ
3651=== added file 'applications/globaleaks/static/images/box_16x16.png'
3652Binary files applications/globaleaks/static/images/box_16x16.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/box_16x16.png 2011-09-02 13:53:25 +0000 differ
3653=== added file 'applications/globaleaks/static/images/demo_node_maintainer.png'
3654Binary files applications/globaleaks/static/images/demo_node_maintainer.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/demo_node_maintainer.png 2011-09-02 13:53:25 +0000 differ
3655=== added file 'applications/globaleaks/static/images/demo_target.png'
3656Binary files applications/globaleaks/static/images/demo_target.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/demo_target.png 2011-09-02 13:53:25 +0000 differ
3657=== added file 'applications/globaleaks/static/images/demo_whistleblower1.png'
3658Binary files applications/globaleaks/static/images/demo_whistleblower1.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/demo_whistleblower1.png 2011-09-02 13:53:25 +0000 differ
3659=== added file 'applications/globaleaks/static/images/document_fill_16x16.png'
3660Binary files applications/globaleaks/static/images/document_fill_16x16.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/document_fill_16x16.png 2011-09-02 13:53:25 +0000 differ
3661=== modified file 'applications/globaleaks/static/images/globaleaks.png'
3662Binary files applications/globaleaks/static/images/globaleaks.png 2011-08-28 13:59:09 +0000 and applications/globaleaks/static/images/globaleaks.png 2011-09-02 13:53:25 +0000 differ
3663=== added file 'applications/globaleaks/static/images/icon-admin.png'
3664Binary files applications/globaleaks/static/images/icon-admin.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/icon-admin.png 2011-09-02 13:53:25 +0000 differ
3665=== added file 'applications/globaleaks/static/images/icon-download-crypt.png'
3666Binary files applications/globaleaks/static/images/icon-download-crypt.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/icon-download-crypt.png 2011-09-02 13:53:25 +0000 differ
3667=== added file 'applications/globaleaks/static/images/icon-download-zip.png'
3668Binary files applications/globaleaks/static/images/icon-download-zip.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/icon-download-zip.png 2011-09-02 13:53:25 +0000 differ
3669=== added file 'applications/globaleaks/static/images/icon-report.png'
3670Binary files applications/globaleaks/static/images/icon-report.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/icon-report.png 2011-09-02 13:53:25 +0000 differ
3671=== added file 'applications/globaleaks/static/images/icon-target.png'
3672Binary files applications/globaleaks/static/images/icon-target.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/icon-target.png 2011-09-02 13:53:25 +0000 differ
3673=== added file 'applications/globaleaks/static/images/icon-whistleblower.png'
3674Binary files applications/globaleaks/static/images/icon-whistleblower.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/icon-whistleblower.png 2011-09-02 13:53:25 +0000 differ
3675=== added file 'applications/globaleaks/static/images/image_16x16.png'
3676Binary files applications/globaleaks/static/images/image_16x16.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/image_16x16.png 2011-09-02 13:53:25 +0000 differ
3677=== added file 'applications/globaleaks/static/images/prototype.png'
3678Binary files applications/globaleaks/static/images/prototype.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/prototype.png 2011-09-02 13:53:25 +0000 differ
3679=== added file 'applications/globaleaks/static/images/ribbon.png'
3680Binary files applications/globaleaks/static/images/ribbon.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/ribbon.png 2011-09-02 13:53:25 +0000 differ
3681=== added file 'applications/globaleaks/static/images/whistleblower2.png'
3682Binary files applications/globaleaks/static/images/whistleblower2.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/images/whistleblower2.png 2011-09-02 13:53:25 +0000 differ
3683=== added file 'applications/globaleaks/static/js/AlteHaas_700.font.js'
3684--- applications/globaleaks/static/js/AlteHaas_700.font.js 1970-01-01 00:00:00 +0000
3685+++ applications/globaleaks/static/js/AlteHaas_700.font.js 2011-09-02 13:53:25 +0000
3686@@ -0,0 +1,19 @@
3687+/*!
3688+ * The following copyright notice may not be removed under any circumstances.
3689+ *
3690+ * Copyright:
3691+ * Copyright (c) 2007 by Yann Le Coroller. All rights reserved.
3692+ *
3693+ * Description:
3694+ * Copyright (c) 2007 by Yann Le Coroller. All rights reserved.
3695+ *
3696+ * Manufacturer:
3697+ * Yann Le Coroller
3698+ *
3699+ * Designer:
3700+ * Yann Le Coroller
3701+ *
3702+ * Vendor URL:
3703+ * http://www.kub.fr/
3704+ */
3705+Cufon.registerFont({"w":200,"face":{"font-family":"AlteHaas","font-weight":700,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 8 3 0 0 0 9 0 4","ascent":"288","descent":"-72","bbox":"-6.19356 -290.188 335 78.0141","underline-thickness":"18","underline-position":"-27","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"w":100},"!":{"d":"43,-78v-20,-39,-19,-108,-19,-169v0,-16,29,-9,45,-9v21,39,-3,119,-5,169v0,9,-12,12,-21,9xm22,-46v6,-15,60,-17,56,5v-3,17,8,44,-16,41v-17,-2,-40,7,-40,-16r0,-30","w":100},"\"":{"d":"37,-256v19,-4,39,-1,31,22r0,83v2,13,-15,8,-27,9v-9,0,-10,-5,-10,-14r-1,-86v0,-9,1,-12,7,-14xm104,-256v19,-4,39,-1,31,22r0,82v2,13,-13,10,-26,10v-9,0,-12,-5,-11,-14r-1,-86v0,-9,1,-12,7,-14","w":166},"#":{"d":"49,-123v14,-44,-36,-4,-25,-53v7,-10,39,6,35,-23v9,-21,-9,-60,36,-52v13,12,-2,41,-2,62v0,12,14,9,25,9v20,-5,9,-38,17,-60v-1,-13,15,-11,28,-11v18,11,-9,50,3,70v17,-2,26,8,21,27v-14,11,-41,1,-35,43v2,14,36,1,24,35v-4,11,-35,-2,-32,17v-9,22,8,68,-33,59v-23,-5,11,-53,-7,-71v-40,-10,-29,34,-37,62v0,12,-19,9,-30,8v-9,-12,3,-39,3,-58v6,-24,-36,4,-28,-36v3,-19,42,5,37,-28xm82,-111v16,21,45,2,39,-27v1,-14,-14,-9,-27,-10v-14,4,-8,22,-12,37"},"$":{"d":"96,-290v26,-3,3,31,29,29v35,10,62,26,65,69v-7,10,-26,3,-43,5v-11,-8,-11,-30,-29,-32v-16,4,-4,39,-6,60v49,15,106,40,85,110v-10,32,-40,49,-79,54v-16,3,3,33,-20,31v-19,-1,4,-34,-24,-32v-43,-9,-67,-34,-72,-82v8,-9,52,-10,51,9v3,17,17,34,36,28v-1,-27,13,-76,-21,-76v-33,-12,-67,-30,-61,-78v5,-38,31,-60,71,-66v17,1,6,-25,18,-29xm79,-219v-30,3,-28,56,5,54v11,-6,6,-36,4,-52v-1,-3,-6,-4,-9,-2xm111,-44v13,16,41,-7,39,-29v-2,-18,-21,-34,-38,-26v-4,14,1,36,-1,55"},"%":{"d":"236,-251v1,-10,26,-13,30,-4r-139,254v-3,8,-12,8,-24,8v-13,0,-5,-14,-1,-17xm85,-257v78,-7,81,128,17,138v-57,9,-84,-33,-72,-89v6,-29,23,-47,55,-49xm85,-230v-29,4,-32,80,-4,86v39,9,36,-68,15,-84v-3,-2,-6,-2,-11,-2xm292,1v-57,14,-87,-28,-77,-91v7,-49,92,-61,110,-14v15,40,5,96,-33,105xm271,-108v-32,4,-32,89,3,86v31,-2,30,-79,3,-86r-6,0","w":360},"&":{"d":"162,-102v19,8,15,-39,58,-18v8,29,-36,54,-8,75v8,15,29,26,30,44v-25,-1,-57,9,-66,-14v-24,-13,-71,41,-121,12v-51,-13,-55,-102,-11,-127v11,-6,28,-14,15,-29v-32,-37,-6,-100,51,-100v77,0,93,91,36,119v-14,14,9,27,16,38xm60,-75v-8,42,68,51,77,13v-16,-16,-24,-39,-45,-49v-17,6,-28,18,-32,36xm113,-167v27,-4,36,-57,0,-58v-31,1,-24,52,0,58","w":246},"'":{"d":"37,-256v19,-3,37,-3,32,22r0,83v2,13,-15,8,-27,9v-10,1,-10,-6,-11,-14r0,-86v0,-8,1,-12,6,-14","w":100},"(":{"d":"104,-258v-39,73,-46,235,-1,312v7,12,-10,11,-22,11v-86,-49,-78,-273,-7,-328v11,1,28,-3,30,5","w":106},")":{"d":"39,63v-14,4,-43,6,-35,-10v44,-78,39,-230,0,-305v-7,-14,13,-11,28,-11v75,65,68,258,7,326","w":106},"*":{"d":"55,-146v-5,15,-28,6,-27,-8v1,-13,30,-31,8,-37v-15,-4,-34,-14,-18,-32v12,-5,21,7,33,8v21,2,-11,-49,28,-42v19,-1,-5,44,19,41v14,-8,37,-15,38,8v2,19,-49,12,-30,34v4,8,12,13,13,23v-3,10,-22,19,-27,7v-7,-8,-16,-31,-27,-16","w":146},"+":{"d":"138,-110v30,0,66,-16,61,27v-3,22,-41,7,-63,12v-30,6,22,82,-38,71v-18,-3,-5,-39,-9,-62v-4,-21,-39,-7,-63,-10v-12,-2,-7,-18,-8,-29v5,-18,39,-5,63,-9v27,-4,-20,-72,33,-72v25,0,7,39,14,62v0,6,3,10,10,10","w":216},",":{"d":"29,-55v21,3,49,-11,49,16v0,53,-7,89,-50,96v-25,-23,35,-35,12,-57v-24,5,-17,-22,-18,-45v0,-6,2,-9,7,-10","w":100},"-":{"d":"113,-120v20,-4,14,22,13,38v-1,7,-8,5,-15,5r-78,1v-18,2,-15,-20,-13,-35v0,-6,3,-9,9,-9r84,0","w":146},".":{"d":"77,-8v-8,13,-61,16,-55,-8v3,-14,-8,-41,10,-39v17,2,47,-10,46,14v0,11,1,24,-1,33","w":100},"\/":{"d":"1,2v25,-89,64,-169,92,-255v4,-12,33,-12,41,-5r-94,256v-3,11,-31,11,-39,4","w":133},"0":{"d":"85,-256v95,-11,115,74,105,168v-6,58,-43,103,-113,89v-70,-14,-80,-110,-64,-184v8,-39,29,-68,72,-73xm91,-39v60,10,55,-83,47,-137v-3,-24,-22,-49,-52,-37v-36,15,-31,89,-24,136v3,19,11,35,29,38"},"1":{"d":"35,-164v-18,-10,-9,-48,19,-39v26,-6,40,-24,49,-46v11,-4,45,-8,38,16r0,221v1,19,-27,11,-46,11v-13,-32,-1,-107,-5,-155v-6,-15,-35,-2,-55,-8"},"2":{"d":"64,-174v5,24,-42,23,-50,12v-12,-109,159,-126,175,-31v15,89,-78,94,-109,145v19,11,65,0,99,4v19,-2,11,18,13,37v-3,12,-26,7,-41,7r-131,0v-26,-4,-1,-47,6,-60v29,-52,122,-52,112,-129v-4,-33,-67,-29,-71,3"},"3":{"d":"88,-149v47,7,65,-61,17,-66v-31,-3,-41,20,-48,43v-16,5,-58,7,-40,-26v11,-70,133,-75,160,-16v14,30,-1,65,-20,78v23,15,45,41,33,82v-13,44,-65,69,-122,54v-36,-9,-62,-38,-60,-82v5,-8,43,-9,47,3v-3,44,71,59,83,15v9,-35,-12,-50,-48,-50v-11,0,-12,-31,-2,-35"},"4":{"d":"161,-118v-4,40,42,-9,33,50v-3,20,-44,-5,-33,33v9,32,-19,46,-48,30v-3,-24,14,-54,-26,-54r-75,0v-25,-58,39,-95,62,-137v22,-22,27,-65,80,-55v7,1,7,8,7,15r0,118xm52,-108v13,16,74,18,61,-18v-2,-17,2,-42,-5,-54v-22,20,-37,48,-56,72"},"5":{"d":"17,-124v13,-41,5,-106,32,-128r123,1v14,4,13,48,-9,41r-77,0v-17,1,-18,36,-15,51v60,-32,129,7,122,86v-8,92,-165,101,-183,19v-10,-22,14,-23,38,-21v16,51,115,41,92,-29v-7,-20,-27,-34,-55,-27v-17,9,-35,26,-66,16v-2,-2,-3,-5,-2,-9"},"6":{"d":"92,-166v81,-24,128,77,78,141v-29,37,-114,35,-138,-6v-42,-74,-31,-227,72,-226v48,0,74,23,82,62v-2,13,-24,5,-40,7v-16,-9,-16,-35,-44,-31v-30,4,-45,38,-41,69v13,-3,18,-12,31,-16xm64,-68v11,48,82,35,77,-16v8,-52,-71,-64,-77,-14v-4,7,-2,22,0,30"},"7":{"d":"15,-210v0,-15,-8,-42,9,-42r154,1v16,6,7,53,-7,57v-37,47,-62,104,-67,183v-1,17,-30,10,-48,10v-13,-3,-4,-26,-2,-36v10,-67,44,-117,73,-163v-17,-12,-67,-2,-99,-5v-8,0,-12,0,-13,-5"},"8":{"d":"130,1v-67,14,-136,-17,-122,-91v0,-27,31,-30,35,-49v-15,-11,-27,-24,-27,-51v0,-81,135,-80,161,-27v14,29,1,68,-20,79v19,19,49,42,35,86v-8,28,-31,46,-62,53xm114,-217v-51,-17,-72,58,-22,66v46,14,65,-55,22,-66xm57,-82v-8,54,74,65,85,20v9,-35,-18,-62,-57,-52v-16,5,-25,15,-28,32"},"9":{"d":"77,-255v126,-27,144,167,76,237v-37,38,-138,25,-139,-41v7,-12,52,-9,52,9v14,29,64,12,66,-14v1,-12,12,-27,6,-38v-19,8,-32,22,-63,18v-48,-7,-77,-49,-65,-104v8,-37,29,-59,67,-67xm89,-122v35,4,47,-18,49,-50v2,-35,-48,-59,-70,-29v-17,23,-11,76,21,79"},":":{"d":"77,-135v-8,13,-61,16,-55,-8v3,-14,-8,-41,10,-39v17,2,47,-10,46,14v0,11,1,24,-1,33xm77,-8v-8,13,-61,16,-55,-8v3,-14,-8,-41,10,-39v17,2,47,-10,46,14v0,11,1,24,-1,33","w":100},";":{"d":"77,-135v-8,13,-61,16,-55,-8v3,-14,-8,-41,10,-39v17,2,47,-10,46,14v0,11,1,24,-1,33xm29,-55v21,3,49,-11,49,16v0,53,-7,89,-50,96v-25,-23,35,-35,12,-57v-24,5,-17,-22,-18,-45v0,-6,2,-9,7,-10","w":100},"<":{"d":"197,-145v-35,23,-90,28,-121,55v35,22,84,32,119,51v10,10,5,53,-16,33r-160,-65v-4,-13,-6,-46,12,-46r162,-64v11,0,6,26,4,36","w":216},"=":{"d":"27,-111v-17,0,-11,-34,-3,-37r165,0v14,-2,10,19,9,31v-1,7,-8,6,-15,6r-156,0xm173,-71v24,-10,36,22,19,37r-163,1v-14,1,-11,-16,-11,-30v-1,-8,7,-8,15,-8r140,0","w":216},">":{"d":"19,-37v35,-23,90,-28,121,-55v-34,-22,-84,-33,-119,-51v-10,-9,-5,-54,16,-33r160,64v4,14,6,47,-12,47r-162,64v-10,-1,-6,-27,-4,-36","w":216},"?":{"d":"112,-220v-30,-5,-45,14,-48,39v-4,11,-28,4,-43,6v-27,-45,44,-108,111,-84v61,6,73,102,22,129v-15,8,-31,20,-31,42v0,17,-26,10,-42,10v-22,-39,27,-72,48,-94v7,-18,2,-45,-17,-48xm77,-55v35,-7,59,2,48,50v-9,7,-59,15,-55,-11v2,-14,-5,-37,7,-39"},"@":{"d":"206,-81v40,0,49,-59,36,-97v-14,-41,-57,-60,-113,-55v-79,7,-105,127,-51,182v27,27,85,35,126,18v14,-6,33,-30,52,-14v-23,39,-79,56,-139,48v-110,-14,-132,-186,-46,-239v89,-54,232,-4,199,117v-12,43,-65,93,-108,57v-40,34,-103,1,-92,-66v9,-51,71,-95,116,-55v7,-2,20,-20,35,-7v-3,38,-19,65,-22,103v1,6,1,8,7,8xm126,-84v46,11,73,-72,25,-84v-38,-1,-58,48,-37,78v3,3,7,5,12,6","w":288},"A":{"d":"156,-249r89,244v-8,10,-64,11,-60,-13v-8,-15,-5,-39,-28,-40r-70,0v-38,7,-3,72,-74,58v-12,2,-13,-10,-8,-18r91,-237v16,-2,55,-9,60,6xm93,-102v21,4,72,13,57,-18v-10,-21,-12,-49,-27,-65v-15,23,-24,54,-30,83","w":246,"k":{"y":6,"w":6,"v":6,"Y":27,"W":9,"V":17,"T":33}},"B":{"d":"225,-212v8,33,-11,56,-24,72v24,16,47,44,36,87v-17,67,-122,53,-205,52v-9,0,-7,-13,-7,-23r0,-221v0,-8,4,-11,10,-12v69,9,174,-19,190,45xm157,-210v-43,-11,-95,-10,-74,54v25,7,90,13,90,-24v0,-16,-5,-25,-16,-30xm95,-43v39,-2,86,7,89,-32v3,-46,-52,-42,-95,-39v-17,6,-8,38,-8,60v0,8,5,11,14,11","w":253},"C":{"d":"118,4v-134,-11,-140,-267,17,-267v64,0,113,36,111,90v-17,4,-55,7,-56,-15v-13,-21,-39,-34,-71,-25v-41,11,-52,62,-46,115v7,63,114,77,123,12v3,-19,27,-11,47,-13v20,9,-1,44,-8,56v-19,35,-62,52,-117,47","w":266},"D":{"d":"25,-236v0,-11,-1,-20,10,-21v137,-21,259,43,206,189v-16,44,-53,69,-115,68r-94,-1v-9,0,-7,-13,-7,-23r0,-212xm90,-47v83,12,117,-32,103,-111v-7,-43,-54,-60,-108,-50v-10,34,-3,110,-3,156v1,3,4,5,8,5","w":266},"E":{"d":"25,-219v2,-15,-7,-38,10,-38r174,1v13,3,6,25,7,39v-3,13,-27,7,-41,7r-86,1v-16,2,-6,32,-7,50v23,12,75,2,115,5v13,1,8,25,7,37v0,10,-16,6,-28,6r-86,0v-17,2,-6,35,-9,56v1,13,23,8,36,8r92,0v16,0,8,22,10,39v-2,15,-28,8,-43,8r-144,-1v-14,-1,-7,-27,-7,-41r0,-177","w":233},"F":{"d":"25,-231v1,-12,-4,-25,10,-25r162,0v13,1,8,27,7,42v-23,12,-71,4,-108,4v-25,0,-13,29,-15,51v-1,13,16,9,28,10r72,0v12,1,5,22,7,36v-1,10,-15,6,-26,7r-72,0v-13,0,-8,17,-9,29v-4,37,21,91,-48,77v-15,-2,-8,-30,-8,-46r0,-185","w":213,"k":{"A":20,".":57,",":57}},"G":{"d":"206,-23v-104,92,-257,-63,-168,-190v20,-29,49,-50,97,-50v62,0,102,29,111,81v3,16,-34,8,-50,7v-11,-27,-35,-49,-76,-39v-78,19,-63,196,36,171v25,-6,39,-20,44,-46v-4,-26,-70,19,-55,-45v18,-12,62,-3,95,-5v23,-1,8,37,12,57r-1,72v1,13,-16,9,-28,9v-11,0,-6,-20,-17,-22","w":273},"H":{"d":"25,-204v3,-19,-8,-49,10,-53v21,4,54,-12,46,27v4,24,-12,66,12,72r82,0v28,-6,-3,-74,17,-98v19,3,50,-13,50,16r0,231v-2,15,-32,8,-50,8v-16,-16,0,-70,-7,-105v-20,-11,-69,-3,-99,-4v-12,19,-5,64,-5,97v0,20,-23,12,-42,13v-25,1,-14,-37,-14,-60r0,-144","w":266},"I":{"d":"24,-178v5,-25,-11,-70,10,-78v18,3,46,-12,46,18r0,225v3,22,-26,10,-47,13v-15,-3,-9,-30,-9,-47r0,-131","w":106},"J":{"d":"119,-203v3,-20,-8,-50,10,-54v24,1,47,-9,46,31r-4,180v-11,66,-138,67,-158,9v-5,-14,-9,-32,-7,-50v2,-14,27,-7,44,-8v10,3,4,20,8,31v4,33,61,29,61,-8r0,-131"},"K":{"d":"25,-204v3,-19,-9,-50,10,-53v22,3,54,-11,46,29v3,22,-4,53,4,70v35,-27,62,-64,93,-95v14,-7,46,-5,65,-2v3,11,-13,17,-18,25v-23,25,-50,46,-70,74v29,56,70,97,101,149v-6,15,-75,11,-76,-10r-63,-93v-39,3,-38,53,-36,101v-2,15,-31,8,-47,8v-18,-3,-9,-39,-9,-59r0,-144","w":259},"L":{"d":"25,-219v2,-15,-7,-37,10,-38v19,3,46,-11,46,19r1,186v26,13,80,-1,118,6v12,2,4,25,6,40v-6,10,-27,6,-42,6r-132,-1v-14,-1,-7,-27,-7,-41r0,-177","w":213,"k":{"y":13,"Y":40,"W":20,"V":33,"T":33}},"M":{"d":"71,-1v-20,0,-46,9,-46,-15r2,-237v16,-5,78,-14,82,11r56,153v27,-48,34,-120,60,-166v16,-5,44,0,67,-2v10,0,9,11,9,22r0,227v-3,14,-30,7,-47,7v-18,-35,8,-120,-10,-164v-25,50,-35,112,-60,162v-17,7,-50,6,-49,-17r-54,-143v-9,37,-2,105,-4,154v0,5,-1,8,-6,8","w":326},"N":{"d":"25,-204v3,-19,-8,-49,10,-53v20,1,47,-5,53,11r96,151v12,-2,5,-28,5,-43r0,-108v1,-17,29,-10,47,-10v12,7,6,37,6,57r0,189v-3,18,-60,15,-64,-3r-91,-145v-3,-7,-9,-3,-9,2r-1,144v2,20,-27,10,-46,11v-12,-9,-6,-39,-6,-59r0,-144","w":266},"O":{"d":"213,-241v98,69,49,282,-111,242v-92,-23,-113,-176,-43,-236v33,-28,115,-34,154,-6xm75,-92v23,85,145,51,136,-35v-5,-53,-24,-94,-83,-88v-51,6,-67,69,-53,123","w":280},"P":{"d":"25,-231v0,-13,-3,-26,10,-26v86,0,202,-20,194,92v-5,64,-60,78,-137,72v-23,7,-6,52,-11,81v1,19,-30,11,-48,11v-7,0,-9,-7,-8,-15r0,-215xm81,-201v5,31,-18,65,28,65v36,0,66,-2,66,-40v0,-42,-47,-39,-88,-37v-4,2,-7,6,-6,12","w":240,"k":{"A":27,".":64,",":64}},"Q":{"d":"234,18v-16,-18,-36,-31,-66,-15v-107,15,-173,-60,-150,-169v12,-58,49,-91,117,-97v124,-11,162,142,102,227v8,20,40,38,4,55v-3,1,-5,1,-7,-1xm150,-79v32,-9,71,13,58,-75v-7,-40,-37,-69,-87,-59v-65,13,-67,146,-10,165v9,7,28,8,43,6v13,-12,-26,-23,-4,-37","w":280},"R":{"d":"228,-145v-43,27,20,61,10,124v4,11,6,23,-13,21v-17,-2,-42,4,-39,-17v-5,-44,-2,-92,-65,-84v-22,3,-47,-7,-40,28r-1,68v-7,10,-26,3,-43,5v-11,0,-12,-7,-12,-19r0,-227v-1,-8,4,-9,10,-11r151,3v42,7,66,65,42,109xm87,-141v48,5,111,4,92,-53v-9,-27,-55,-17,-91,-19v-16,6,-3,39,-7,62v0,5,2,9,6,10","w":259,"k":{"Y":13,"W":6,"V":6,"T":6}},"S":{"d":"170,-66v-4,-43,-56,-38,-92,-50v-36,-12,-71,-38,-58,-88v10,-37,43,-58,89,-58v59,0,102,19,106,73v1,16,-30,7,-48,8v-12,-20,-25,-43,-64,-38v-20,3,-34,14,-30,37v43,43,188,24,144,141v-28,75,-208,60,-208,-33v0,-18,26,-9,44,-11v18,3,10,31,29,38v23,15,84,16,88,-19","w":233},"T":{"d":"74,-209v-37,-2,-88,12,-65,-46v59,-5,140,-3,203,0v5,11,11,54,-18,45v-22,6,-56,-16,-56,24r-1,179v-3,13,-33,6,-48,6v-15,-5,-7,-37,-7,-55r-1,-147v-1,-4,-3,-6,-7,-6","w":219,"k":{"y":40,"w":40,"u":33,"s":40,"r":33,"o":40,"e":40,"c":40,"a":40,"A":33,";":40,":":40,".":40,"-":46,",":40}},"U":{"d":"242,-114v4,79,-31,117,-104,119v-81,2,-114,-38,-114,-120r0,-133v2,-17,29,-6,48,-9v14,6,7,36,8,56v5,70,-24,182,74,157v59,-15,25,-122,32,-201v2,-20,27,-9,48,-12v17,7,8,47,8,70r0,73","w":266},"V":{"d":"78,-8r-77,-245v11,-6,61,-12,59,12r52,155v14,-6,12,-27,18,-41v17,-41,25,-90,44,-128v12,-4,37,-3,50,0v-16,88,-55,168,-78,249v-10,10,-57,11,-68,-2","w":226,"k":{"y":6,"u":13,"r":13,"o":20,"i":6,"e":20,"a":20,"A":17,";":17,":":17,".":46,"-":20,",":46}},"W":{"d":"66,-9v-11,-78,-67,-179,-54,-248r36,0v34,31,21,120,51,163v22,-49,24,-114,48,-162v17,2,46,-7,50,7r42,157v5,0,4,-6,6,-8r29,-122v6,-14,1,-37,24,-35v13,2,37,-6,37,8r-55,208v-8,15,-2,44,-28,41v-17,-2,-37,4,-42,-13v-14,-49,-19,-109,-42,-150v-19,48,-26,106,-41,157v-9,9,-54,12,-61,-3","w":339,"k":{"u":6,"r":6,"o":21,"e":21,"a":13,"A":9,";":6,":":6,".":27,",":27}},"X":{"d":"86,-133v-9,-42,-77,-85,-67,-124v25,2,58,-7,63,20v13,19,23,41,39,57v21,-18,32,-47,47,-69v9,-13,45,-10,61,-4v-20,46,-58,77,-74,121r78,118v2,3,8,13,-2,13v-25,0,-63,7,-67,-18r-42,-64v-18,2,-22,31,-34,41v-16,14,-12,44,-44,42v-17,0,-49,8,-34,-16","w":240},"Y":{"d":"138,-1v-26,-2,-54,11,-46,-29v-1,-37,4,-79,-17,-98r-72,-120v-1,-17,36,-7,56,-8v22,27,37,60,55,90v26,6,36,-52,55,-71v3,-24,39,-22,68,-19v-23,83,-89,115,-89,243v0,7,-2,13,-10,12","w":240,"k":{"v":20,"u":27,"q":33,"p":27,"o":40,"i":13,"e":40,"a":33,"A":27,";":33,":":33,".":50,"-":40,",":50}},"Z":{"d":"9,-8v-9,-44,24,-64,42,-87v29,-38,63,-70,89,-111v-23,-10,-74,-1,-112,-4v-14,0,-8,-24,-8,-38v0,-7,4,-7,9,-9r185,1v17,8,5,56,-8,62r-91,108v-5,12,-36,28,-18,39r120,0v12,3,8,26,7,40v-5,12,-30,7,-47,7r-158,0v-7,-1,-9,-2,-10,-8","w":233},"[":{"d":"75,9v-4,37,44,-5,44,32v0,13,2,24,-14,24r-69,0v-13,1,-11,-10,-11,-20r0,-299v10,-20,54,-4,86,-9v16,6,12,50,-14,40v-15,-2,-22,1,-22,18r0,214","w":119},"\\":{"d":"94,-1r-94,-257v11,-12,46,-5,44,14r89,245v-4,9,-35,8,-39,-2","w":133},"]":{"d":"45,-207v0,-40,-56,13,-44,-47v11,-20,54,-5,83,-9v13,-2,11,10,11,20r0,299v-10,20,-54,4,-86,9v-16,-5,-13,-49,13,-40v15,1,23,0,23,-18r0,-214","w":119},"^":{"d":"74,-135v2,19,-36,31,-47,16v17,-47,37,-88,58,-130v25,-9,60,-2,59,24r44,97v8,13,-7,17,-24,15v-23,-2,-20,-29,-31,-45v-10,-14,-12,-26,-19,-42v-22,-7,-26,47,-40,65","w":216},"_":{"d":"18,44v-16,5,-27,-17,-9,-17r167,1v7,10,-1,16,-14,16r-144,0","w":180},"`":{"d":"67,-212v-32,15,-75,-31,-70,-47v9,-2,22,0,34,-1v19,8,31,29,36,48","w":93},"a":{"d":"111,-156v-28,-3,-37,12,-48,26v-48,15,-51,-28,-18,-46v45,-24,139,-24,141,50r3,120v-6,12,-50,10,-54,-6v-46,35,-152,11,-118,-65v14,-28,52,-28,88,-34v32,4,42,-41,6,-45xm63,-49v16,38,82,20,72,-29v-4,-18,-36,-2,-51,0v-14,1,-23,11,-21,29","w":206},"b":{"d":"71,-173v19,0,46,-26,82,-13v84,30,66,213,-44,189v-17,-4,-27,-18,-40,-16v0,18,-23,12,-43,13v-7,-2,-6,-9,-7,-18r0,-228v0,-17,25,-8,44,-10v16,12,2,55,8,83xm104,-34v44,7,59,-40,49,-82v-5,-23,-28,-44,-57,-33v-39,15,-38,108,8,115","w":219},"c":{"d":"17,-64v-14,-68,20,-127,87,-127v50,0,84,19,90,65v-6,8,-51,11,-51,-7v-24,-41,-87,-10,-79,42v-9,56,68,80,83,26v3,-10,41,-10,48,0v-9,50,-50,78,-112,67v-34,-6,-59,-32,-66,-66","w":206},"d":{"d":"157,-256v21,2,44,-11,44,19r0,226v2,17,-39,15,-48,5v-11,-22,-25,19,-55,10v-104,12,-113,-173,-23,-192v31,-6,54,8,73,16v9,-21,-8,-68,9,-84xm105,-152v-59,1,-54,117,0,119v40,1,52,-38,45,-78v-4,-24,-15,-42,-45,-41","w":219},"e":{"d":"70,-185v71,-22,130,20,125,97v-1,10,-18,6,-30,7v-32,4,-78,-7,-102,6v-2,28,21,44,51,41v26,-3,42,-40,75,-18v-8,61,-115,72,-154,27v-19,-22,-32,-71,-17,-107v10,-25,26,-45,52,-53xm66,-131v-7,12,1,20,18,18v18,-3,44,4,57,-3v6,-25,-23,-43,-51,-35v-11,3,-19,10,-24,20","w":206},"f":{"d":"0,-159v-6,-49,40,-5,32,-56v6,-31,36,-45,74,-41v18,-3,18,31,8,37v-24,-5,-42,14,-28,32v20,-1,35,2,30,28v-3,17,-41,-8,-35,26v-3,42,3,93,-4,131v-12,2,-51,10,-46,-13r-1,-130v-2,-14,-28,1,-30,-14","w":119,"k":{"f":6}},"g":{"d":"71,-8v-112,-39,-42,-237,61,-172v4,5,16,16,18,3v2,-15,24,-9,40,-9v8,0,9,8,8,17r-1,175v-3,78,-158,87,-175,15v-4,-16,23,-8,41,-10v16,11,31,33,63,22v19,-7,30,-35,21,-58v-20,10,-44,28,-76,17xm98,-44v58,10,68,-78,32,-102v-39,-26,-79,19,-63,70v5,16,13,29,31,32","w":219},"h":{"d":"20,-183v4,-35,-21,-85,41,-73v22,4,1,59,11,86v18,-4,39,-27,75,-19v64,13,41,103,47,176v2,20,-26,12,-44,12v-12,0,-5,-23,-7,-36v-3,-48,16,-123,-44,-112v-50,10,-17,98,-33,148v-17,-3,-46,13,-46,-14r0,-168","w":213},"i":{"d":"21,-249v9,-15,62,-15,51,15v6,25,-22,19,-43,18v-12,-1,-7,-19,-8,-33xm21,-176v2,-17,50,-15,50,-1r0,169v-2,13,-57,16,-50,-9r0,-159","w":92},"j":{"d":"66,-257v15,2,13,43,0,42v-29,11,-60,-17,-33,-42r33,0xm24,-166v-7,-27,29,-23,49,-17v5,62,1,137,1,203v0,39,-46,53,-79,40v2,-12,-7,-36,6,-36v17,0,27,-13,23,-31r0,-159","w":100},"k":{"d":"24,-204v3,-19,-8,-49,9,-53v22,0,49,-7,42,27v2,33,-3,73,3,103v35,-19,49,-76,113,-56v-13,30,-47,37,-59,68v21,39,49,70,70,109v-10,13,-65,9,-67,-11r-36,-58v-10,-8,-25,6,-24,26v2,29,9,59,-38,49v-24,1,-13,-38,-13,-60r0,-144","w":206},"l":{"d":"64,0v-20,-2,-44,9,-43,-16r6,-240v17,-1,45,-9,45,17r0,226v0,8,-2,11,-8,13","w":92},"m":{"d":"72,-169v18,-7,28,-21,54,-21v31,0,40,14,57,25v33,-43,123,-30,122,47r-1,112v-4,11,-28,5,-43,5v-27,-24,32,-160,-49,-148v-40,16,-19,84,-24,140v-2,14,-42,13,-50,2r-1,-116v-1,-20,-16,-32,-38,-27v-42,10,-23,84,-27,140v-1,16,-25,8,-42,10v-18,-5,-9,-41,-9,-61r0,-116v1,-14,28,-8,43,-8v6,2,3,12,8,16","w":326},"n":{"d":"68,-172v14,10,29,-25,57,-18v88,-7,68,94,68,181v0,15,-28,8,-43,8v-30,-25,32,-163,-51,-149v-46,8,-29,82,-29,139v0,18,-24,9,-42,11v-17,-7,-4,-49,-8,-73v3,-35,-6,-83,4,-111v14,-1,46,-10,44,12","w":213},"o":{"d":"37,-160v69,-71,205,-3,160,112v-22,55,-120,68,-160,23v-27,-30,-29,-105,0,-135xm67,-68v15,60,88,35,88,-25v0,-38,-20,-67,-60,-57v-30,8,-37,49,-28,82","w":219},"p":{"d":"109,-189v110,-23,131,153,49,188v-27,12,-67,4,-80,-13v-17,1,-8,44,-8,69v0,18,-27,10,-44,10v-8,-3,-7,-9,-7,-19r0,-220v-2,-17,39,-15,48,-5v-1,4,2,7,4,9v14,-5,22,-16,38,-19xm113,-33v58,3,59,-109,9,-118v-48,-8,-62,40,-51,84v5,20,16,33,42,34","w":219},"q":{"d":"16,-56v-30,-98,66,-170,133,-115v1,-18,28,-17,46,-14v6,1,5,11,5,18r0,223v-1,14,-21,9,-37,9v-30,0,-1,-59,-17,-80v-17,7,-28,20,-53,19v-46,-1,-66,-25,-77,-60xm96,-35v46,10,63,-40,51,-86v-6,-23,-31,-38,-57,-28v-38,15,-39,105,6,114","w":219},"r":{"d":"19,-176v3,-16,48,-15,48,-1v0,21,12,10,19,3v10,-10,24,-17,46,-16v12,4,14,59,-12,46v-65,-1,-45,80,-52,141v-11,5,-49,11,-49,-13r0,-160","w":140,"k":{"q":6,"o":6,"n":-6,"g":10,"e":6,"d":6,"c":6,".":33,"-":20,",":33}},"s":{"d":"13,-56v49,-24,50,39,100,25v11,-3,21,-12,17,-28v-29,-37,-123,-7,-114,-84v8,-68,149,-61,159,-2v3,19,-20,12,-39,13v-13,-13,-23,-30,-54,-24v-19,3,-17,29,0,34v43,12,111,14,99,77v-12,65,-148,66,-166,5v-1,-5,-4,-11,-2,-16","w":193},"t":{"d":"34,-135v0,-33,-41,3,-30,-45v4,-13,35,4,30,-22v2,-14,-7,-38,10,-39v15,3,43,-10,40,14v-3,26,-4,49,33,42v14,16,1,40,-27,34v-14,15,-3,64,-5,96v-1,16,15,18,31,18v21,23,-4,48,-41,38v-57,-1,-41,-76,-41,-136","w":126},"u":{"d":"20,-62v4,-44,-8,-100,6,-123v17,3,48,-11,44,16v7,52,-25,144,43,133v47,-8,25,-82,30,-140v0,-16,24,-7,41,-9v17,-2,9,27,9,42r0,134v1,15,-39,12,-47,3v1,-16,-13,-9,-19,-2v-42,29,-113,6,-107,-54","w":213},"v":{"d":"67,-2v-24,-57,-46,-121,-62,-180v10,-6,48,-10,53,7r32,103v18,5,17,-37,25,-53v9,-18,11,-41,20,-58v9,-4,25,-3,39,-3v17,25,-22,74,-26,108r-17,48v-4,15,-5,33,-26,30v-13,-1,-29,2,-38,-2","w":187,"k":{".":27,",":27}},"w":{"d":"11,-186v28,-1,52,-4,51,23v10,30,15,66,28,92v15,-20,15,-56,24,-83v5,-13,2,-36,24,-32v63,-10,37,72,65,114v21,-25,19,-81,37,-112v11,-2,53,-9,47,10r-54,168v-6,10,-25,4,-39,5v-38,-4,-20,-81,-47,-113v-17,25,-18,69,-30,102v0,17,-48,15,-58,4r-52,-163v-1,-5,-4,-15,4,-15","w":293,"k":{".":20,",":20}},"x":{"d":"64,-97v-10,-37,-46,-53,-51,-87v19,-4,55,-7,60,12v9,9,11,25,25,29v20,-11,16,-43,48,-43v16,0,43,-4,28,17v-17,23,-35,44,-47,71v17,35,46,61,60,94v-8,8,-37,4,-51,2v-17,-14,-22,-38,-39,-51v-24,19,-35,72,-91,49v15,-36,43,-58,58,-93","w":193},"y":{"d":"67,63v-28,3,-60,10,-51,-32v3,-20,64,3,48,-41r-59,-159v-1,-5,-8,-19,4,-17v29,-3,52,0,53,30r29,84v17,4,18,-37,26,-53v13,-29,5,-71,62,-61v11,2,4,14,2,20r-63,170v-10,26,-19,56,-51,59","w":186,"k":{".":27,",":27}},"z":{"d":"15,-156v1,-13,-4,-29,10,-30r138,0v32,60,-61,92,-81,144v18,9,59,1,88,4v14,1,13,38,0,38r-153,0v-17,-2,-10,-46,2,-51r79,-90v-7,-16,-46,-3,-71,-7v-7,1,-12,-2,-12,-8","w":186},"{":{"d":"30,-149v-5,-71,-2,-128,82,-114v10,2,10,33,2,39v-65,-10,-6,101,-58,125v28,14,25,57,25,103v0,16,12,21,30,21v13,-1,11,31,3,39v-52,5,-84,-7,-84,-63v0,-20,0,-42,-1,-60v-2,-26,-39,-13,-32,-46v4,-19,35,-15,33,-44","w":119},"|":{"d":"59,68v-3,15,-44,13,-38,-5r0,-330v-2,-19,14,-15,31,-15v10,1,6,16,7,27r0,323","w":80},"}":{"d":"90,-159v-7,32,20,37,32,52v7,37,-39,21,-32,73v9,67,-11,112,-82,98v-12,0,-11,-32,-2,-38v64,11,5,-100,56,-121v-2,-16,-32,-28,-23,-65v-3,-28,10,-63,-30,-63v-14,0,-13,-33,-3,-39v52,-6,88,8,84,62r0,41","w":119},"~":{"d":"38,-66v-28,-26,7,-67,47,-54v30,11,70,36,90,3v31,20,3,65,-37,57v-26,-6,-42,-28,-76,-23v-11,2,-14,16,-24,17","w":216},"\u00a0":{"w":100}}});
3706
3707=== added file 'applications/globaleaks/static/js/cufon.js'
3708--- applications/globaleaks/static/js/cufon.js 1970-01-01 00:00:00 +0000
3709+++ applications/globaleaks/static/js/cufon.js 2011-09-02 13:53:25 +0000
3710@@ -0,0 +1,7 @@
3711+/*
3712+ * Copyright (c) 2009 Simo Kinnunen.
3713+ * Licensed under the MIT license.
3714+ *
3715+ * @version 1.09i
3716+ */
3717+var Cufon=(function(){var m=function(){return m.replace.apply(null,arguments)};var x=m.DOM={ready:(function(){var C=false,E={loaded:1,complete:1};var B=[],D=function(){if(C){return}C=true;for(var F;F=B.shift();F()){}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",D,false);window.addEventListener("pageshow",D,false)}if(!window.opera&&document.readyState){(function(){E[document.readyState]?D():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll("left");D()}catch(F){setTimeout(arguments.callee,1)}})()}q(window,"load",D);return function(F){if(!arguments.length){D()}else{C?F():B.push(F)}}})(),root:function(){return document.documentElement||document.body}};var n=m.CSS={Size:function(C,B){this.value=parseFloat(C);this.unit=String(C).match(/[a-z%]*$/)[0]||"px";this.convert=function(D){return D/B*this.value};this.convertFrom=function(D){return D/this.value*B};this.toString=function(){return this.value+this.unit}},addClass:function(C,B){var D=C.className;C.className=D+(D&&" ")+B;return C},color:j(function(C){var B={};B.color=C.replace(/^rgba\((.*?),\s*([\d.]+)\)/,function(E,D,F){B.opacity=parseFloat(F);return"rgb("+D+")"});return B}),fontStretch:j(function(B){if(typeof B=="number"){return B}if(/%$/.test(B)){return parseFloat(B)/100}return{"ultra-condensed":0.5,"extra-condensed":0.625,condensed:0.75,"semi-condensed":0.875,"semi-expanded":1.125,expanded:1.25,"extra-expanded":1.5,"ultra-expanded":2}[B]||1}),getStyle:function(C){var B=document.defaultView;if(B&&B.getComputedStyle){return new a(B.getComputedStyle(C,null))}if(C.currentStyle){return new a(C.currentStyle)}return new a(C.style)},gradient:j(function(F){var G={id:F,type:F.match(/^-([a-z]+)-gradient\(/)[1],stops:[]},C=F.substr(F.indexOf("(")).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);for(var E=0,B=C.length,D;E<B;++E){D=C[E].split("=",2).reverse();G.stops.push([D[1]||E/(B-1),D[0]])}return G}),quotedList:j(function(E){var D=[],C=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,B;while(B=C.exec(E)){D.push(B[3]||B[1])}return D}),recognizesMedia:j(function(G){var E=document.createElement("style"),D,C,B;E.type="text/css";E.media=G;try{E.appendChild(document.createTextNode("/**/"))}catch(F){}C=g("head")[0];C.insertBefore(E,C.firstChild);D=(E.sheet||E.styleSheet);B=D&&!D.disabled;C.removeChild(E);return B}),removeClass:function(D,C){var B=RegExp("(?:^|\\s+)"+C+"(?=\\s|$)","g");D.className=D.className.replace(B,"");return D},supports:function(D,C){var B=document.createElement("span").style;if(B[D]===undefined){return false}B[D]=C;return B[D]===C},textAlign:function(E,D,B,C){if(D.get("textAlign")=="right"){if(B>0){E=" "+E}}else{if(B<C-1){E+=" "}}return E},textShadow:j(function(F){if(F=="none"){return null}var E=[],G={},B,C=0;var D=/(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;while(B=D.exec(F)){if(B[0]==","){E.push(G);G={};C=0}else{if(B[1]){G.color=B[1]}else{G[["offX","offY","blur"][C++]]=B[2]}}}E.push(G);return E}),textTransform:(function(){var B={uppercase:function(C){return C.toUpperCase()},lowercase:function(C){return C.toLowerCase()},capitalize:function(C){return C.replace(/\b./g,function(D){return D.toUpperCase()})}};return function(E,D){var C=B[D.get("textTransform")];return C?C(E):E}})(),whiteSpace:(function(){var D={inline:1,"inline-block":1,"run-in":1};var C=/^\s+/,B=/\s+$/;return function(H,F,G,E){if(E){if(E.nodeName.toLowerCase()=="br"){H=H.replace(C,"")}}if(D[F.get("display")]){return H}if(!G.previousSibling){H=H.replace(C,"")}if(!G.nextSibling){H=H.replace(B,"")}return H}})()};n.ready=(function(){var B=!n.recognizesMedia("all"),E=false;var D=[],H=function(){B=true;for(var K;K=D.shift();K()){}};var I=g("link"),J=g("style");function C(K){return K.disabled||G(K.sheet,K.media||"screen")}function G(M,P){if(!n.recognizesMedia(P||"all")){return true}if(!M||M.disabled){return false}try{var Q=M.cssRules,O;if(Q){search:for(var L=0,K=Q.length;O=Q[L],L<K;++L){switch(O.type){case 2:break;case 3:if(!G(O.styleSheet,O.media.mediaText)){return false}break;default:break search}}}}catch(N){}return true}function F(){if(document.createStyleSheet){return true}var L,K;for(K=0;L=I[K];++K){if(L.rel.toLowerCase()=="stylesheet"&&!C(L)){return false}}for(K=0;L=J[K];++K){if(!C(L)){return false}}return true}x.ready(function(){if(!E){E=n.getStyle(document.body).isUsable()}if(B||(E&&F())){H()}else{setTimeout(arguments.callee,10)}});return function(K){if(B){K()}else{D.push(K)}}})();function s(D){var C=this.face=D.face,B={"\u0020":1,"\u00a0":1,"\u3000":1};this.glyphs=D.glyphs;this.w=D.w;this.baseSize=parseInt(C["units-per-em"],10);this.family=C["font-family"].toLowerCase();this.weight=C["font-weight"];this.style=C["font-style"]||"normal";this.viewBox=(function(){var F=C.bbox.split(/\s+/);var E={minX:parseInt(F[0],10),minY:parseInt(F[1],10),maxX:parseInt(F[2],10),maxY:parseInt(F[3],10)};E.width=E.maxX-E.minX;E.height=E.maxY-E.minY;E.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")};return E})();this.ascent=-parseInt(C.ascent,10);this.descent=-parseInt(C.descent,10);this.height=-this.ascent+this.descent;this.spacing=function(L,N,E){var O=this.glyphs,M,K,G,P=[],F=0,J=-1,I=-1,H;while(H=L[++J]){M=O[H]||this.missingGlyph;if(!M){continue}if(K){F-=G=K[H]||0;P[I]-=G}F+=P[++I]=~~(M.w||this.w)+N+(B[H]?E:0);K=M.k}P.total=F;return P}}function f(){var C={},B={oblique:"italic",italic:"oblique"};this.add=function(D){(C[D.style]||(C[D.style]={}))[D.weight]=D};this.get=function(H,I){var G=C[H]||C[B[H]]||C.normal||C.italic||C.oblique;if(!G){return null}I={normal:400,bold:700}[I]||parseInt(I,10);if(G[I]){return G[I]}var E={1:1,99:0}[I%100],K=[],F,D;if(E===undefined){E=I>400}if(I==500){I=400}for(var J in G){if(!k(G,J)){continue}J=parseInt(J,10);if(!F||J<F){F=J}if(!D||J>D){D=J}K.push(J)}if(I<F){I=F}if(I>D){I=D}K.sort(function(M,L){return(E?(M>=I&&L>=I)?M<L:M>L:(M<=I&&L<=I)?M>L:M<L)?-1:1});return G[K[0]]}}function r(){function D(F,G){if(F.contains){return F.contains(G)}return F.compareDocumentPosition(G)&16}function B(G){var F=G.relatedTarget;if(!F||D(this,F)){return}C(this,G.type=="mouseover")}function E(F){C(this,F.type=="mouseenter")}function C(F,G){setTimeout(function(){var H=d.get(F).options;m.replace(F,G?h(H,H.hover):H,true)},10)}this.attach=function(F){if(F.onmouseenter===undefined){q(F,"mouseover",B);q(F,"mouseout",B)}else{q(F,"mouseenter",E);q(F,"mouseleave",E)}}}function u(){var C=[],D={};function B(H){var E=[],G;for(var F=0;G=H[F];++F){E[F]=C[D[G]]}return E}this.add=function(F,E){D[F]=C.push(E)-1};this.repeat=function(){var E=arguments.length?B(arguments):C,F;for(var G=0;F=E[G++];){m.replace(F[0],F[1],true)}}}function A(){var D={},B=0;function C(E){return E.cufid||(E.cufid=++B)}this.get=function(E){var F=C(E);return D[F]||(D[F]={})}}function a(B){var D={},C={};this.extend=function(E){for(var F in E){if(k(E,F)){D[F]=E[F]}}return this};this.get=function(E){return D[E]!=undefined?D[E]:B[E]};this.getSize=function(F,E){return C[F]||(C[F]=new n.Size(this.get(F),E))};this.isUsable=function(){return !!B}}function q(C,B,D){if(C.addEventListener){C.addEventListener(B,D,false)}else{if(C.attachEvent){C.attachEvent("on"+B,function(){return D.call(C,window.event)})}}}function v(C,B){var D=d.get(C);if(D.options){return C}if(B.hover&&B.hoverables[C.nodeName.toLowerCase()]){b.attach(C)}D.options=B;return C}function j(B){var C={};return function(D){if(!k(C,D)){C[D]=B.apply(null,arguments)}return C[D]}}function c(F,E){var B=n.quotedList(E.get("fontFamily").toLowerCase()),D;for(var C=0;D=B[C];++C){if(i[D]){return i[D].get(E.get("fontStyle"),E.get("fontWeight"))}}return null}function g(B){return document.getElementsByTagName(B)}function k(C,B){return C.hasOwnProperty(B)}function h(){var C={},B,F;for(var E=0,D=arguments.length;B=arguments[E],E<D;++E){for(F in B){if(k(B,F)){C[F]=B[F]}}}return C}function o(E,M,C,N,F,D){var K=document.createDocumentFragment(),H;if(M===""){return K}var L=N.separate;var I=M.split(p[L]),B=(L=="words");if(B&&t){if(/^\s/.test(M)){I.unshift("")}if(/\s$/.test(M)){I.push("")}}for(var J=0,G=I.length;J<G;++J){H=z[N.engine](E,B?n.textAlign(I[J],C,J,G):I[J],C,N,F,D,J<G-1);if(H){K.appendChild(H)}}return K}function l(D,M){var C=D.nodeName.toLowerCase();if(M.ignore[C]){return}var E=!M.textless[C];var B=n.getStyle(v(D,M)).extend(M);var F=c(D,B),G,K,I,H,L,J;if(!F){return}for(G=D.firstChild;G;G=I){K=G.nodeType;I=G.nextSibling;if(E&&K==3){if(H){H.appendData(G.data);D.removeChild(G)}else{H=G}if(I){continue}}if(H){D.replaceChild(o(F,n.whiteSpace(H.data,B,H,J),B,M,G,D),H);H=null}if(K==1){if(G.firstChild){if(G.nodeName.toLowerCase()=="cufon"){z[M.engine](F,null,B,M,G,D)}else{arguments.callee(G,M)}}J=G}}}var t=" ".split(/\s+/).length==0;var d=new A();var b=new r();var y=new u();var e=false;var z={},i={},w={autoDetect:false,engine:null,forceHitArea:false,hover:false,hoverables:{a:true},ignore:{applet:1,canvas:1,col:1,colgroup:1,head:1,iframe:1,map:1,optgroup:1,option:1,script:1,select:1,style:1,textarea:1,title:1,pre:1},printable:true,selector:(window.Sizzle||(window.jQuery&&function(B){return jQuery(B)})||(window.dojo&&dojo.query)||(window.Ext&&Ext.query)||(window.YAHOO&&YAHOO.util&&YAHOO.util.Selector&&YAHOO.util.Selector.query)||(window.$$&&function(B){return $$(B)})||(window.$&&function(B){return $(B)})||(document.querySelectorAll&&function(B){return document.querySelectorAll(B)})||g),separate:"words",textless:{dl:1,html:1,ol:1,table:1,tbody:1,thead:1,tfoot:1,tr:1,ul:1},textShadow:"none"};var p={words:/\s/.test("\u00a0")?/[^\S\u00a0]+/:/\s+/,characters:"",none:/^/};m.now=function(){x.ready();return m};m.refresh=function(){y.repeat.apply(y,arguments);return m};m.registerEngine=function(C,B){if(!B){return m}z[C]=B;return m.set("engine",C)};m.registerFont=function(D){if(!D){return m}var B=new s(D),C=B.family;if(!i[C]){i[C]=new f()}i[C].add(B);return m.set("fontFamily",'"'+C+'"')};m.replace=function(D,C,B){C=h(w,C);if(!C.engine){return m}if(!e){n.addClass(x.root(),"cufon-active cufon-loading");n.ready(function(){n.addClass(n.removeClass(x.root(),"cufon-loading"),"cufon-ready")});e=true}if(C.hover){C.forceHitArea=true}if(C.autoDetect){delete C.fontFamily}if(typeof C.textShadow=="string"){C.textShadow=n.textShadow(C.textShadow)}if(typeof C.color=="string"&&/^-/.test(C.color)){C.textGradient=n.gradient(C.color)}else{delete C.textGradient}if(!B){y.add(D,arguments)}if(D.nodeType||typeof D=="string"){D=[D]}n.ready(function(){for(var F=0,E=D.length;F<E;++F){var G=D[F];if(typeof G=="string"){m.replace(C.selector(G),C,true)}else{l(G,C)}}});return m};m.set=function(B,C){w[B]=C;return m};return m})();Cufon.registerEngine("vml",(function(){var e=document.namespaces;if(!e){return}e.add("cvml","urn:schemas-microsoft-com:vml");e=null;var b=document.createElement("cvml:shape");b.style.behavior="url(#default#VML)";if(!b.coordsize){return}b=null;var h=(document.documentMode||0)<8;document.write(('<style type="text/css">cufoncanvas{text-indent:0;}@media screen{cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}cufoncanvas{position:absolute;text-align:left;}cufon{display:inline-block;position:relative;vertical-align:'+(h?"middle":"text-bottom")+";}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}</style>").replace(/;/g,"!important;"));function c(i,j){return a(i,/(?:em|ex|%)$|^[a-z-]+$/i.test(j)?"1em":j)}function a(l,m){if(m==="0"){return 0}if(/px$/i.test(m)){return parseFloat(m)}var k=l.style.left,j=l.runtimeStyle.left;l.runtimeStyle.left=l.currentStyle.left;l.style.left=m.replace("%","em");var i=l.style.pixelLeft;l.style.left=k;l.runtimeStyle.left=j;return i}function f(l,k,j,n){var i="computed"+n,m=k[i];if(isNaN(m)){m=k.get(n);k[i]=m=(m=="normal")?0:~~j.convertFrom(a(l,m))}return m}var g={};function d(p){var q=p.id;if(!g[q]){var n=p.stops,o=document.createElement("cvml:fill"),i=[];o.type="gradient";o.angle=180;o.focus="0";o.method="sigma";o.color=n[0][1];for(var m=1,l=n.length-1;m<l;++m){i.push(n[m][0]*100+"% "+n[m][1])}o.colors=i.join(",");o.color2=n[l][1];g[q]=o}return g[q]}return function(ac,G,Y,C,K,ad,W){var n=(G===null);if(n){G=K.alt}var I=ac.viewBox;var p=Y.computedFontSize||(Y.computedFontSize=new Cufon.CSS.Size(c(ad,Y.get("fontSize"))+"px",ac.baseSize));var y,q;if(n){y=K;q=K.firstChild}else{y=document.createElement("cufon");y.className="cufon cufon-vml";y.alt=G;q=document.createElement("cufoncanvas");y.appendChild(q);if(C.printable){var Z=document.createElement("cufontext");Z.appendChild(document.createTextNode(G));y.appendChild(Z)}if(!W){y.appendChild(document.createElement("cvml:shape"))}}var ai=y.style;var R=q.style;var l=p.convert(I.height),af=Math.ceil(l);var V=af/l;var P=V*Cufon.CSS.fontStretch(Y.get("fontStretch"));var U=I.minX,T=I.minY;R.height=af;R.top=Math.round(p.convert(T-ac.ascent));R.left=Math.round(p.convert(U));ai.height=p.convert(ac.height)+"px";var F=Y.get("color");var ag=Cufon.CSS.textTransform(G,Y).split("");var L=ac.spacing(ag,f(ad,Y,p,"letterSpacing"),f(ad,Y,p,"wordSpacing"));if(!L.length){return null}var k=L.total;var x=-U+k+(I.width-L[L.length-1]);var ah=p.convert(x*P),X=Math.round(ah);var O=x+","+I.height,m;var J="r"+O+"ns";var u=C.textGradient&&d(C.textGradient);var o=ac.glyphs,S=0;var H=C.textShadow;var ab=-1,aa=0,w;while(w=ag[++ab]){var D=o[ag[ab]]||ac.missingGlyph,v;if(!D){continue}if(n){v=q.childNodes[aa];while(v.firstChild){v.removeChild(v.firstChild)}}else{v=document.createElement("cvml:shape");q.appendChild(v)}v.stroked="f";v.coordsize=O;v.coordorigin=m=(U-S)+","+T;v.path=(D.d?"m"+D.d+"xe":"")+"m"+m+J;v.fillcolor=F;if(u){v.appendChild(u.cloneNode(false))}var ae=v.style;ae.width=X;ae.height=af;if(H){var s=H[0],r=H[1];var B=Cufon.CSS.color(s.color),z;var N=document.createElement("cvml:shadow");N.on="t";N.color=B.color;N.offset=s.offX+","+s.offY;if(r){z=Cufon.CSS.color(r.color);N.type="double";N.color2=z.color;N.offset2=r.offX+","+r.offY}N.opacity=B.opacity||(z&&z.opacity)||1;v.appendChild(N)}S+=L[aa++]}var M=v.nextSibling,t,A;if(C.forceHitArea){if(!M){M=document.createElement("cvml:rect");M.stroked="f";M.className="cufon-vml-cover";t=document.createElement("cvml:fill");t.opacity=0;M.appendChild(t);q.appendChild(M)}A=M.style;A.width=X;A.height=af}else{if(M){q.removeChild(M)}}ai.width=Math.max(Math.ceil(p.convert(k*P)),0);if(h){var Q=Y.computedYAdjust;if(Q===undefined){var E=Y.get("lineHeight");if(E=="normal"){E="1em"}else{if(!isNaN(E)){E+="em"}}Y.computedYAdjust=Q=0.5*(a(ad,E)-parseFloat(ai.height))}if(Q){ai.marginTop=Math.ceil(Q)+"px";ai.marginBottom=Q+"px"}}return y}})());Cufon.registerEngine("canvas",(function(){var b=document.createElement("canvas");if(!b||!b.getContext||!b.getContext.apply){return}b=null;var a=Cufon.CSS.supports("display","inline-block");var e=!a&&(document.compatMode=="BackCompat"||/frameset|transitional/i.test(document.doctype.publicId));var f=document.createElement("style");f.type="text/css";f.appendChild(document.createTextNode(("cufon{text-indent:0;}@media screen,projection{cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;"+(e?"":"font-size:1px;line-height:1px;")+"}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}"+(a?"cufon canvas{position:relative;}":"cufon canvas{position:absolute;}")+"}@media print{cufon{padding:0;}cufon canvas{display:none;}}").replace(/;/g,"!important;")));document.getElementsByTagName("head")[0].appendChild(f);function d(p,h){var n=0,m=0;var g=[],o=/([mrvxe])([^a-z]*)/g,k;generate:for(var j=0;k=o.exec(p);++j){var l=k[2].split(",");switch(k[1]){case"v":g[j]={m:"bezierCurveTo",a:[n+~~l[0],m+~~l[1],n+~~l[2],m+~~l[3],n+=~~l[4],m+=~~l[5]]};break;case"r":g[j]={m:"lineTo",a:[n+=~~l[0],m+=~~l[1]]};break;case"m":g[j]={m:"moveTo",a:[n=~~l[0],m=~~l[1]]};break;case"x":g[j]={m:"closePath"};break;case"e":break generate}h[g[j].m].apply(h,g[j].a)}return g}function c(m,k){for(var j=0,h=m.length;j<h;++j){var g=m[j];k[g.m].apply(k,g.a)}}return function(V,w,P,t,C,W){var k=(w===null);if(k){w=C.getAttribute("alt")}var A=V.viewBox;var m=P.getSize("fontSize",V.baseSize);var B=0,O=0,N=0,u=0;var z=t.textShadow,L=[];if(z){for(var U=z.length;U--;){var F=z[U];var K=m.convertFrom(parseFloat(F.offX));var I=m.convertFrom(parseFloat(F.offY));L[U]=[K,I];if(I<B){B=I}if(K>O){O=K}if(I>N){N=I}if(K<u){u=K}}}var Z=Cufon.CSS.textTransform(w,P).split("");var E=V.spacing(Z,~~m.convertFrom(parseFloat(P.get("letterSpacing"))||0),~~m.convertFrom(parseFloat(P.get("wordSpacing"))||0));if(!E.length){return null}var h=E.total;O+=A.width-E[E.length-1];u+=A.minX;var s,n;if(k){s=C;n=C.firstChild}else{s=document.createElement("cufon");s.className="cufon cufon-canvas";s.setAttribute("alt",w);n=document.createElement("canvas");s.appendChild(n);if(t.printable){var S=document.createElement("cufontext");S.appendChild(document.createTextNode(w));s.appendChild(S)}}var aa=s.style;var H=n.style;var j=m.convert(A.height);var Y=Math.ceil(j);var M=Y/j;var G=M*Cufon.CSS.fontStretch(P.get("fontStretch"));var J=h*G;var Q=Math.ceil(m.convert(J+O-u));var o=Math.ceil(m.convert(A.height-B+N));n.width=Q;n.height=o;H.width=Q+"px";H.height=o+"px";B+=A.minY;H.top=Math.round(m.convert(B-V.ascent))+"px";H.left=Math.round(m.convert(u))+"px";var r=Math.max(Math.ceil(m.convert(J)),0)+"px";if(a){aa.width=r;aa.height=m.convert(V.height)+"px"}else{aa.paddingLeft=r;aa.paddingBottom=(m.convert(V.height)-1)+"px"}var X=n.getContext("2d"),D=j/A.height;X.scale(D,D*M);X.translate(-u,-B);X.save();function T(){var x=V.glyphs,ab,l=-1,g=-1,y;X.scale(G,1);while(y=Z[++l]){var ab=x[Z[l]]||V.missingGlyph;if(!ab){continue}if(ab.d){X.beginPath();if(ab.code){c(ab.code,X)}else{ab.code=d("m"+ab.d,X)}X.fill()}X.translate(E[++g],0)}X.restore()}if(z){for(var U=z.length;U--;){var F=z[U];X.save();X.fillStyle=F.color;X.translate.apply(X,L[U]);T()}}var q=t.textGradient;if(q){var v=q.stops,p=X.createLinearGradient(0,A.minY,0,A.maxY);for(var U=0,R=v.length;U<R;++U){p.addColorStop.apply(p,v[U])}X.fillStyle=p}else{X.fillStyle=P.get("color")}T();return s}})());
3718\ No newline at end of file
3719
3720=== added directory 'applications/globaleaks/static/js/fancybox'
3721=== added file 'applications/globaleaks/static/js/fancybox/blank.gif'
3722Binary files applications/globaleaks/static/js/fancybox/blank.gif 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/blank.gif 2011-09-02 13:53:25 +0000 differ
3723=== added file 'applications/globaleaks/static/js/fancybox/fancy_close.png'
3724Binary files applications/globaleaks/static/js/fancybox/fancy_close.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_close.png 2011-09-02 13:53:25 +0000 differ
3725=== added file 'applications/globaleaks/static/js/fancybox/fancy_loading.png'
3726Binary files applications/globaleaks/static/js/fancybox/fancy_loading.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_loading.png 2011-09-02 13:53:25 +0000 differ
3727=== added file 'applications/globaleaks/static/js/fancybox/fancy_nav_left.png'
3728Binary files applications/globaleaks/static/js/fancybox/fancy_nav_left.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_nav_left.png 2011-09-02 13:53:25 +0000 differ
3729=== added file 'applications/globaleaks/static/js/fancybox/fancy_nav_right.png'
3730Binary files applications/globaleaks/static/js/fancybox/fancy_nav_right.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_nav_right.png 2011-09-02 13:53:25 +0000 differ
3731=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_e.png'
3732Binary files applications/globaleaks/static/js/fancybox/fancy_shadow_e.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_shadow_e.png 2011-09-02 13:53:25 +0000 differ
3733=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_n.png'
3734Binary files applications/globaleaks/static/js/fancybox/fancy_shadow_n.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_shadow_n.png 2011-09-02 13:53:25 +0000 differ
3735=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_ne.png'
3736Binary files applications/globaleaks/static/js/fancybox/fancy_shadow_ne.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_shadow_ne.png 2011-09-02 13:53:25 +0000 differ
3737=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_nw.png'
3738Binary files applications/globaleaks/static/js/fancybox/fancy_shadow_nw.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_shadow_nw.png 2011-09-02 13:53:25 +0000 differ
3739=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_s.png'
3740Binary files applications/globaleaks/static/js/fancybox/fancy_shadow_s.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_shadow_s.png 2011-09-02 13:53:25 +0000 differ
3741=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_se.png'
3742Binary files applications/globaleaks/static/js/fancybox/fancy_shadow_se.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_shadow_se.png 2011-09-02 13:53:25 +0000 differ
3743=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_sw.png'
3744Binary files applications/globaleaks/static/js/fancybox/fancy_shadow_sw.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_shadow_sw.png 2011-09-02 13:53:25 +0000 differ
3745=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_w.png'
3746Binary files applications/globaleaks/static/js/fancybox/fancy_shadow_w.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_shadow_w.png 2011-09-02 13:53:25 +0000 differ
3747=== added file 'applications/globaleaks/static/js/fancybox/fancy_title_left.png'
3748Binary files applications/globaleaks/static/js/fancybox/fancy_title_left.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_title_left.png 2011-09-02 13:53:25 +0000 differ
3749=== added file 'applications/globaleaks/static/js/fancybox/fancy_title_main.png'
3750Binary files applications/globaleaks/static/js/fancybox/fancy_title_main.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_title_main.png 2011-09-02 13:53:25 +0000 differ
3751=== added file 'applications/globaleaks/static/js/fancybox/fancy_title_over.png'
3752Binary files applications/globaleaks/static/js/fancybox/fancy_title_over.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_title_over.png 2011-09-02 13:53:25 +0000 differ
3753=== added file 'applications/globaleaks/static/js/fancybox/fancy_title_right.png'
3754Binary files applications/globaleaks/static/js/fancybox/fancy_title_right.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancy_title_right.png 2011-09-02 13:53:25 +0000 differ
3755=== added file 'applications/globaleaks/static/js/fancybox/fancybox-x.png'
3756Binary files applications/globaleaks/static/js/fancybox/fancybox-x.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancybox-x.png 2011-09-02 13:53:25 +0000 differ
3757=== added file 'applications/globaleaks/static/js/fancybox/fancybox-y.png'
3758Binary files applications/globaleaks/static/js/fancybox/fancybox-y.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancybox-y.png 2011-09-02 13:53:25 +0000 differ
3759=== added file 'applications/globaleaks/static/js/fancybox/fancybox.png'
3760Binary files applications/globaleaks/static/js/fancybox/fancybox.png 1970-01-01 00:00:00 +0000 and applications/globaleaks/static/js/fancybox/fancybox.png 2011-09-02 13:53:25 +0000 differ
3761=== added file 'applications/globaleaks/static/js/fancybox/jquery.easing-1.3.pack.js'
3762--- applications/globaleaks/static/js/fancybox/jquery.easing-1.3.pack.js 1970-01-01 00:00:00 +0000
3763+++ applications/globaleaks/static/js/fancybox/jquery.easing-1.3.pack.js 2011-09-02 13:53:25 +0000
3764@@ -0,0 +1,72 @@
3765+/*
3766+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
3767+ *
3768+ * Uses the built in easing capabilities added In jQuery 1.1
3769+ * to offer multiple easing options
3770+ *
3771+ * TERMS OF USE - jQuery Easing
3772+ *
3773+ * Open source under the BSD License.
3774+ *
3775+ * Copyright © 2008 George McGinley Smith
3776+ * All rights reserved.
3777+ *
3778+ * Redistribution and use in source and binary forms, with or without modification,
3779+ * are permitted provided that the following conditions are met:
3780+ *
3781+ * Redistributions of source code must retain the above copyright notice, this list of
3782+ * conditions and the following disclaimer.
3783+ * Redistributions in binary form must reproduce the above copyright notice, this list
3784+ * of conditions and the following disclaimer in the documentation and/or other materials
3785+ * provided with the distribution.
3786+ *
3787+ * Neither the name of the author nor the names of contributors may be used to endorse
3788+ * or promote products derived from this software without specific prior written permission.
3789+ *
3790+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
3791+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3792+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
3793+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
3794+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
3795+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
3796+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
3797+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
3798+ * OF THE POSSIBILITY OF SUCH DAMAGE.
3799+ *
3800+*/
3801+
3802+// t: current time, b: begInnIng value, c: change In value, d: duration
3803+eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t<d/2)6 h.i.A(x,t*2,0,c,d)*.5+b;6 h.i.v(x,t*2-d,0,c,d)*.5+c*.5+b}});',62,74,'||||||return||Math|function|||||if|var|PI|jQuery|easing|pow|75|70158|else|sin|sqrt||5625|asin|||undefined|easeOutBounce|abs||def|swing|easeInBounce|525|cos|easeOutQuad|easeOutBack|easeInBack|easeInSine|easeOutElastic|easeInOutQuint|easeOutQuint|easeInQuint|easeInOutQuart|easeOutQuart|easeInQuart|extend|easeInElastic|easeInOutCirc|easeInOutCubic|easeOutCirc|easeInOutElastic|easeOutCubic|easeInCirc|easeInOutExpo|easeInCubic|easeOutExpo|easeInExpo||9375|easeInOutSine|easeInOutQuad|25|easeOutSine|easeInOutBack|easeInQuad|625|984375|jswing|easeInOutBounce'.split('|'),0,{}))
3804+
3805+/*
3806+ *
3807+ * TERMS OF USE - EASING EQUATIONS
3808+ *
3809+ * Open source under the BSD License.
3810+ *
3811+ * Copyright © 2001 Robert Penner
3812+ * All rights reserved.
3813+ *
3814+ * Redistribution and use in source and binary forms, with or without modification,
3815+ * are permitted provided that the following conditions are met:
3816+ *
3817+ * Redistributions of source code must retain the above copyright notice, this list of
3818+ * conditions and the following disclaimer.
3819+ * Redistributions in binary form must reproduce the above copyright notice, this list
3820+ * of conditions and the following disclaimer in the documentation and/or other materials
3821+ * provided with the distribution.
3822+ *
3823+ * Neither the name of the author nor the names of contributors may be used to endorse
3824+ * or promote products derived from this software without specific prior written permission.
3825+ *
3826+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
3827+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3828+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
3829+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
3830+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
3831+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
3832+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
3833+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
3834+ * OF THE POSSIBILITY OF SUCH DAMAGE.
3835+ *
3836+ */
3837
3838=== added file 'applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.css'
3839--- applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.css 1970-01-01 00:00:00 +0000
3840+++ applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.css 2011-09-02 13:53:25 +0000
3841@@ -0,0 +1,359 @@
3842+/*
3843+ * FancyBox - jQuery Plugin
3844+ * Simple and fancy lightbox alternative
3845+ *
3846+ * Examples and documentation at: http://fancybox.net
3847+ *
3848+ * Copyright (c) 2008 - 2010 Janis Skarnelis
3849+ * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
3850+ *
3851+ * Version: 1.3.4 (11/11/2010)
3852+ * Requires: jQuery v1.3+
3853+ *
3854+ * Dual licensed under the MIT and GPL licenses:
3855+ * http://www.opensource.org/licenses/mit-license.php
3856+ * http://www.gnu.org/licenses/gpl.html
3857+ */
3858+
3859+#fancybox-loading {
3860+ position: fixed;
3861+ top: 50%;
3862+ left: 50%;
3863+ width: 40px;
3864+ height: 40px;
3865+ margin-top: -20px;
3866+ margin-left: -20px;
3867+ cursor: pointer;
3868+ overflow: hidden;
3869+ z-index: 1104;
3870+ display: none;
3871+}
3872+
3873+#fancybox-loading div {
3874+ position: absolute;
3875+ top: 0;
3876+ left: 0;
3877+ width: 40px;
3878+ height: 480px;
3879+ background-image: url('fancybox.png');
3880+}
3881+
3882+#fancybox-overlay {
3883+ position: absolute;
3884+ top: 0;
3885+ left: 0;
3886+ width: 100%;
3887+ z-index: 1100;
3888+ display: none;
3889+}
3890+
3891+#fancybox-tmp {
3892+ padding: 0;
3893+ margin: 0;
3894+ border: 0;
3895+ overflow: auto;
3896+ display: none;
3897+}
3898+
3899+#fancybox-wrap {
3900+ position: absolute;
3901+ top: 0;
3902+ left: 0;
3903+ padding: 20px;
3904+ z-index: 1101;
3905+ outline: none;
3906+ display: none;
3907+}
3908+
3909+#fancybox-outer {
3910+ position: relative;
3911+ width: 100%;
3912+ height: 100%;
3913+ background: #fff;
3914+}
3915+
3916+#fancybox-content {
3917+ width: 0;
3918+ height: 0;
3919+ padding: 0;
3920+ outline: none;
3921+ position: relative;
3922+ overflow: hidden;
3923+ z-index: 1102;
3924+ border: 0px solid #fff;
3925+}
3926+
3927+#fancybox-hide-sel-frame {
3928+ position: absolute;
3929+ top: 0;
3930+ left: 0;
3931+ width: 100%;
3932+ height: 100%;
3933+ background: transparent;
3934+ z-index: 1101;
3935+}
3936+
3937+#fancybox-close {
3938+ position: absolute;
3939+ top: -15px;
3940+ right: -15px;
3941+ width: 30px;
3942+ height: 30px;
3943+ background: transparent url('fancybox.png') -40px 0px;
3944+ cursor: pointer;
3945+ z-index: 1103;
3946+ display: none;
3947+}
3948+
3949+#fancybox-error {
3950+ color: #444;
3951+ font: normal 12px/20px Arial;
3952+ padding: 14px;
3953+ margin: 0;
3954+}
3955+
3956+#fancybox-img {
3957+ width: 100%;
3958+ height: 100%;
3959+ padding: 0;
3960+ margin: 0;
3961+ border: none;
3962+ outline: none;
3963+ line-height: 0;
3964+ vertical-align: top;
3965+}
3966+
3967+#fancybox-frame {
3968+ width: 100%;
3969+ height: 100%;
3970+ border: none;
3971+ display: block;
3972+}
3973+
3974+#fancybox-left, #fancybox-right {
3975+ position: absolute;
3976+ bottom: 0px;
3977+ height: 100%;
3978+ width: 35%;
3979+ cursor: pointer;
3980+ outline: none;
3981+ background: transparent url('blank.gif');
3982+ z-index: 1102;
3983+ display: none;
3984+}
3985+
3986+#fancybox-left {
3987+ left: 0px;
3988+}
3989+
3990+#fancybox-right {
3991+ right: 0px;
3992+}
3993+
3994+#fancybox-left-ico, #fancybox-right-ico {
3995+ position: absolute;
3996+ top: 50%;
3997+ left: -9999px;
3998+ width: 30px;
3999+ height: 30px;
4000+ margin-top: -15px;
4001+ cursor: pointer;
4002+ z-index: 1102;
4003+ display: block;
4004+}
4005+
4006+#fancybox-left-ico {
4007+ background-image: url('fancybox.png');
4008+ background-position: -40px -30px;
4009+}
4010+
4011+#fancybox-right-ico {
4012+ background-image: url('fancybox.png');
4013+ background-position: -40px -60px;
4014+}
4015+
4016+#fancybox-left:hover, #fancybox-right:hover {
4017+ visibility: visible; /* IE6 */
4018+}
4019+
4020+#fancybox-left:hover span {
4021+ left: 20px;
4022+}
4023+
4024+#fancybox-right:hover span {
4025+ left: auto;
4026+ right: 20px;
4027+}
4028+
4029+.fancybox-bg {
4030+ position: absolute;
4031+ padding: 0;
4032+ margin: 0;
4033+ border: 0;
4034+ width: 20px;
4035+ height: 20px;
4036+ z-index: 1001;
4037+}
4038+
4039+#fancybox-bg-n {
4040+ top: -20px;
4041+ left: 0;
4042+ width: 100%;
4043+ background-image: url('fancybox-x.png');
4044+}
4045+
4046+#fancybox-bg-ne {
4047+ top: -20px;
4048+ right: -20px;
4049+ background-image: url('fancybox.png');
4050+ background-position: -40px -162px;
4051+}
4052+
4053+#fancybox-bg-e {
4054+ top: 0;
4055+ right: -20px;
4056+ height: 100%;
4057+ background-image: url('fancybox-y.png');
4058+ background-position: -20px 0px;
4059+}
4060+
4061+#fancybox-bg-se {
4062+ bottom: -20px;
4063+ right: -20px;
4064+ background-image: url('fancybox.png');
4065+ background-position: -40px -182px;
4066+}
4067+
4068+#fancybox-bg-s {
4069+ bottom: -20px;
4070+ left: 0;
4071+ width: 100%;
4072+ background-image: url('fancybox-x.png');
4073+ background-position: 0px -20px;
4074+}
4075+
4076+#fancybox-bg-sw {
4077+ bottom: -20px;
4078+ left: -20px;
4079+ background-image: url('fancybox.png');
4080+ background-position: -40px -142px;
4081+}
4082+
4083+#fancybox-bg-w {
4084+ top: 0;
4085+ left: -20px;
4086+ height: 100%;
4087+ background-image: url('fancybox-y.png');
4088+}
4089+
4090+#fancybox-bg-nw {
4091+ top: -20px;
4092+ left: -20px;
4093+ background-image: url('fancybox.png');
4094+ background-position: -40px -122px;
4095+}
4096+
4097+#fancybox-title {
4098+ font-family: Helvetica;
4099+ font-size: 12px;
4100+ z-index: 1102;
4101+}
4102+
4103+.fancybox-title-inside {
4104+ padding-bottom: 10px;
4105+ text-align: center;
4106+ color: #333;
4107+ background: #fff;
4108+ position: relative;
4109+}
4110+
4111+.fancybox-title-outside {
4112+ padding-top: 10px;
4113+ color: #fff;
4114+}
4115+
4116+.fancybox-title-over {
4117+ position: absolute;
4118+ bottom: 0;
4119+ left: 0;
4120+ color: #FFF;
4121+ text-align: left;
4122+}
4123+
4124+#fancybox-title-over {
4125+ padding: 10px;
4126+ background-image: url('fancy_title_over.png');
4127+ display: block;
4128+}
4129+
4130+.fancybox-title-float {
4131+ position: absolute;
4132+ left: 0;
4133+ bottom: -20px;
4134+ height: 32px;
4135+}
4136+
4137+#fancybox-title-float-wrap {
4138+ border: none;
4139+ border-collapse: collapse;
4140+ width: auto;
4141+}
4142+
4143+#fancybox-title-float-wrap td {
4144+ border: none;
4145+ white-space: nowrap;
4146+}
4147+
4148+#fancybox-title-float-left {
4149+ padding: 0 0 0 15px;
4150+ background: url('fancybox.png') -40px -90px no-repeat;
4151+}
4152+
4153+#fancybox-title-float-main {
4154+ color: #FFF;
4155+ line-height: 29px;
4156+ font-weight: bold;
4157+ padding: 0 0 3px 0;
4158+ background: url('fancybox-x.png') 0px -40px;
4159+}
4160+
4161+#fancybox-title-float-right {
4162+ padding: 0 0 0 15px;
4163+ background: url('fancybox.png') -55px -90px no-repeat;
4164+}
4165+
4166+/* IE6 */
4167+
4168+.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); }
4169+
4170+.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); }
4171+.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); }
4172+
4173+.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
4174+.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); }
4175+.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); }
4176+.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); }
4177+
4178+.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame {
4179+ height: expression(this.parentNode.clientHeight + "px");
4180+}
4181+
4182+#fancybox-loading.fancybox-ie6 {
4183+ position: absolute; margin-top: 0;
4184+ top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px');
4185+}
4186+
4187+#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); }
4188+
4189+/* IE6, IE7, IE8 */
4190+
4191+.fancybox-ie .fancybox-bg { background: transparent !important; }
4192+
4193+.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
4194+.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
4195+.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
4196+.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
4197+.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
4198+.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
4199+.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
4200+.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }
4201\ No newline at end of file
4202
4203=== added file 'applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.js'
4204--- applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.js 1970-01-01 00:00:00 +0000
4205+++ applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.js 2011-09-02 13:53:25 +0000
4206@@ -0,0 +1,1156 @@
4207+/*
4208+ * FancyBox - jQuery Plugin
4209+ * Simple and fancy lightbox alternative
4210+ *
4211+ * Examples and documentation at: http://fancybox.net
4212+ *
4213+ * Copyright (c) 2008 - 2010 Janis Skarnelis
4214+ * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
4215+ *
4216+ * Version: 1.3.4 (11/11/2010)
4217+ * Requires: jQuery v1.3+
4218+ *
4219+ * Dual licensed under the MIT and GPL licenses:
4220+ * http://www.opensource.org/licenses/mit-license.php
4221+ * http://www.gnu.org/licenses/gpl.html
4222+ */
4223+
4224+;(function($) {
4225+ var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right,
4226+
4227+ selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [],
4228+
4229+ ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i,
4230+
4231+ loadingTimer, loadingFrame = 1,
4232+
4233+ titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('<div/>')[0], { prop: 0 }),
4234+
4235+ isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,
4236+
4237+ /*
4238+ * Private methods
4239+ */
4240+
4241+ _abort = function() {
4242+ loading.hide();
4243+
4244+ imgPreloader.onerror = imgPreloader.onload = null;
4245+
4246+ if (ajaxLoader) {
4247+ ajaxLoader.abort();
4248+ }
4249+
4250+ tmp.empty();
4251+ },
4252+
4253+ _error = function() {
4254+ if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) {
4255+ loading.hide();
4256+ busy = false;
4257+ return;
4258+ }
4259+
4260+ selectedOpts.titleShow = false;
4261+
4262+ selectedOpts.width = 'auto';
4263+ selectedOpts.height = 'auto';
4264+
4265+ tmp.html( '<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>' );
4266+
4267+ _process_inline();
4268+ },
4269+
4270+ _start = function() {
4271+ var obj = selectedArray[ selectedIndex ],
4272+ href,
4273+ type,
4274+ title,
4275+ str,
4276+ emb,
4277+ ret;
4278+
4279+ _abort();
4280+
4281+ selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox')));
4282+
4283+ ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts);
4284+
4285+ if (ret === false) {
4286+ busy = false;
4287+ return;
4288+ } else if (typeof ret == 'object') {
4289+ selectedOpts = $.extend(selectedOpts, ret);
4290+ }
4291+
4292+ title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || '';
4293+
4294+ if (obj.nodeName && !selectedOpts.orig) {
4295+ selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj);
4296+ }
4297+
4298+ if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) {
4299+ title = selectedOpts.orig.attr('alt');
4300+ }
4301+
4302+ href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null;
4303+
4304+ if ((/^(?:javascript)/i).test(href) || href == '#') {
4305+ href = null;
4306+ }
4307+
4308+ if (selectedOpts.type) {
4309+ type = selectedOpts.type;
4310+
4311+ if (!href) {
4312+ href = selectedOpts.content;
4313+ }
4314+
4315+ } else if (selectedOpts.content) {
4316+ type = 'html';
4317+
4318+ } else if (href) {
4319+ if (href.match(imgRegExp)) {
4320+ type = 'image';
4321+
4322+ } else if (href.match(swfRegExp)) {
4323+ type = 'swf';
4324+
4325+ } else if ($(obj).hasClass("iframe")) {
4326+ type = 'iframe';
4327+
4328+ } else if (href.indexOf("#") === 0) {
4329+ type = 'inline';
4330+
4331+ } else {
4332+ type = 'ajax';
4333+ }
4334+ }
4335+
4336+ if (!type) {
4337+ _error();
4338+ return;
4339+ }
4340+
4341+ if (type == 'inline') {
4342+ obj = href.substr(href.indexOf("#"));
4343+ type = $(obj).length > 0 ? 'inline' : 'ajax';
4344+ }
4345+
4346+ selectedOpts.type = type;
4347+ selectedOpts.href = href;
4348+ selectedOpts.title = title;
4349+
4350+ if (selectedOpts.autoDimensions) {
4351+ if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') {
4352+ selectedOpts.width = 'auto';
4353+ selectedOpts.height = 'auto';
4354+ } else {
4355+ selectedOpts.autoDimensions = false;
4356+ }
4357+ }
4358+
4359+ if (selectedOpts.modal) {
4360+ selectedOpts.overlayShow = true;
4361+ selectedOpts.hideOnOverlayClick = false;
4362+ selectedOpts.hideOnContentClick = false;
4363+ selectedOpts.enableEscapeButton = false;
4364+ selectedOpts.showCloseButton = false;
4365+ }
4366+
4367+ selectedOpts.padding = parseInt(selectedOpts.padding, 10);
4368+ selectedOpts.margin = parseInt(selectedOpts.margin, 10);
4369+
4370+ tmp.css('padding', (selectedOpts.padding + selectedOpts.margin));
4371+
4372+ $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() {
4373+ $(this).replaceWith(content.children());
4374+ });
4375+
4376+ switch (type) {
4377+ case 'html' :
4378+ tmp.html( selectedOpts.content );
4379+ _process_inline();
4380+ break;
4381+
4382+ case 'inline' :
4383+ if ( $(obj).parent().is('#fancybox-content') === true) {
4384+ busy = false;
4385+ return;
4386+ }
4387+
4388+ $('<div class="fancybox-inline-tmp" />')
4389+ .hide()
4390+ .insertBefore( $(obj) )
4391+ .bind('fancybox-cleanup', function() {
4392+ $(this).replaceWith(content.children());
4393+ }).bind('fancybox-cancel', function() {
4394+ $(this).replaceWith(tmp.children());
4395+ });
4396+
4397+ $(obj).appendTo(tmp);
4398+
4399+ _process_inline();
4400+ break;
4401+
4402+ case 'image':
4403+ busy = false;
4404+
4405+ $.fancybox.showActivity();
4406+
4407+ imgPreloader = new Image();
4408+
4409+ imgPreloader.onerror = function() {
4410+ _error();
4411+ };
4412+
4413+ imgPreloader.onload = function() {
4414+ busy = true;
4415+
4416+ imgPreloader.onerror = imgPreloader.onload = null;
4417+
4418+ _process_image();
4419+ };
4420+
4421+ imgPreloader.src = href;
4422+ break;
4423+
4424+ case 'swf':
4425+ selectedOpts.scrolling = 'no';
4426+
4427+ str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"><param name="movie" value="' + href + '"></param>';
4428+ emb = '';
4429+
4430+ $.each(selectedOpts.swf, function(name, val) {
4431+ str += '<param name="' + name + '" value="' + val + '"></param>';
4432+ emb += ' ' + name + '="' + val + '"';
4433+ });
4434+
4435+ str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"' + emb + '></embed></object>';
4436+
4437+ tmp.html(str);
4438+
4439+ _process_inline();
4440+ break;
4441+
4442+ case 'ajax':
4443+ busy = false;
4444+
4445+ $.fancybox.showActivity();
4446+
4447+ selectedOpts.ajax.win = selectedOpts.ajax.success;
4448+
4449+ ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, {
4450+ url : href,
4451+ data : selectedOpts.ajax.data || {},
4452+ error : function(XMLHttpRequest, textStatus, errorThrown) {
4453+ if ( XMLHttpRequest.status > 0 ) {
4454+ _error();
4455+ }
4456+ },
4457+ success : function(data, textStatus, XMLHttpRequest) {
4458+ var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader;
4459+ if (o.status == 200) {
4460+ if ( typeof selectedOpts.ajax.win == 'function' ) {
4461+ ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest);
4462+
4463+ if (ret === false) {
4464+ loading.hide();
4465+ return;
4466+ } else if (typeof ret == 'string' || typeof ret == 'object') {
4467+ data = ret;
4468+ }
4469+ }
4470+
4471+ tmp.html( data );
4472+ _process_inline();
4473+ }
4474+ }
4475+ }));
4476+
4477+ break;
4478+
4479+ case 'iframe':
4480+ _show();
4481+ break;
4482+ }
4483+ },
4484+
4485+ _process_inline = function() {
4486+ var
4487+ w = selectedOpts.width,
4488+ h = selectedOpts.height;
4489+
4490+ if (w.toString().indexOf('%') > -1) {
4491+ w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px';
4492+
4493+ } else {
4494+ w = w == 'auto' ? 'auto' : w + 'px';
4495+ }
4496+
4497+ if (h.toString().indexOf('%') > -1) {
4498+ h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px';
4499+
4500+ } else {
4501+ h = h == 'auto' ? 'auto' : h + 'px';
4502+ }
4503+
4504+ tmp.wrapInner('<div style="width:' + w + ';height:' + h + ';overflow: ' + (selectedOpts.scrolling == 'auto' ? 'auto' : (selectedOpts.scrolling == 'yes' ? 'scroll' : 'hidden')) + ';position:relative;"></div>');
4505+
4506+ selectedOpts.width = tmp.width();
4507+ selectedOpts.height = tmp.height();
4508+
4509+ _show();
4510+ },
4511+
4512+ _process_image = function() {
4513+ selectedOpts.width = imgPreloader.width;
4514+ selectedOpts.height = imgPreloader.height;
4515+
4516+ $("<img />").attr({
4517+ 'id' : 'fancybox-img',
4518+ 'src' : imgPreloader.src,
4519+ 'alt' : selectedOpts.title
4520+ }).appendTo( tmp );
4521+
4522+ _show();
4523+ },
4524+
4525+ _show = function() {
4526+ var pos, equal;
4527+
4528+ loading.hide();
4529+
4530+ if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) {
4531+ $.event.trigger('fancybox-cancel');
4532+
4533+ busy = false;
4534+ return;
4535+ }
4536+
4537+ busy = true;
4538+
4539+ $(content.add( overlay )).unbind();
4540+
4541+ $(window).unbind("resize.fb scroll.fb");
4542+ $(document).unbind('keydown.fb');
4543+
4544+ if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') {
4545+ wrap.css('height', wrap.height());
4546+ }
4547+
4548+ currentArray = selectedArray;
4549+ currentIndex = selectedIndex;
4550+ currentOpts = selectedOpts;
4551+
4552+ if (currentOpts.overlayShow) {
4553+ overlay.css({
4554+ 'background-color' : currentOpts.overlayColor,
4555+ 'opacity' : currentOpts.overlayOpacity,
4556+ 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto',
4557+ 'height' : $(document).height()
4558+ });
4559+
4560+ if (!overlay.is(':visible')) {
4561+ if (isIE6) {
4562+ $('select:not(#fancybox-tmp select)').filter(function() {
4563+ return this.style.visibility !== 'hidden';
4564+ }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() {
4565+ this.style.visibility = 'inherit';
4566+ });
4567+ }
4568+
4569+ overlay.show();
4570+ }
4571+ } else {
4572+ overlay.hide();
4573+ }
4574+
4575+ final_pos = _get_zoom_to();
4576+
4577+ _process_title();
4578+
4579+ if (wrap.is(":visible")) {
4580+ $( close.add( nav_left ).add( nav_right ) ).hide();
4581+
4582+ pos = wrap.position(),
4583+
4584+ start_pos = {
4585+ top : pos.top,
4586+ left : pos.left,
4587+ width : wrap.width(),
4588+ height : wrap.height()
4589+ };
4590+
4591+ equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height);
4592+
4593+ content.fadeTo(currentOpts.changeFade, 0.3, function() {
4594+ var finish_resizing = function() {
4595+ content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish);
4596+ };
4597+
4598+ $.event.trigger('fancybox-change');
4599+
4600+ content
4601+ .empty()
4602+ .removeAttr('filter')
4603+ .css({
4604+ 'border-width' : currentOpts.padding,
4605+ 'width' : final_pos.width - currentOpts.padding * 2,
4606+ 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
4607+ });
4608+
4609+ if (equal) {
4610+ finish_resizing();
4611+
4612+ } else {
4613+ fx.prop = 0;
4614+
4615+ $(fx).animate({prop: 1}, {
4616+ duration : currentOpts.changeSpeed,
4617+ easing : currentOpts.easingChange,
4618+ step : _draw,
4619+ complete : finish_resizing
4620+ });
4621+ }
4622+ });
4623+
4624+ return;
4625+ }
4626+
4627+ wrap.removeAttr("style");
4628+
4629+ content.css('border-width', currentOpts.padding);
4630+
4631+ if (currentOpts.transitionIn == 'elastic') {
4632+ start_pos = _get_zoom_from();
4633+
4634+ content.html( tmp.contents() );
4635+
4636+ wrap.show();
4637+
4638+ if (currentOpts.opacity) {
4639+ final_pos.opacity = 0;
4640+ }
4641+
4642+ fx.prop = 0;
4643+
4644+ $(fx).animate({prop: 1}, {
4645+ duration : currentOpts.speedIn,
4646+ easing : currentOpts.easingIn,
4647+ step : _draw,
4648+ complete : _finish
4649+ });
4650+
4651+ return;
4652+ }
4653+
4654+ if (currentOpts.titlePosition == 'inside' && titleHeight > 0) {
4655+ title.show();
4656+ }
4657+
4658+ content
4659+ .css({
4660+ 'width' : final_pos.width - currentOpts.padding * 2,
4661+ 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
4662+ })
4663+ .html( tmp.contents() );
4664+
4665+ wrap
4666+ .css(final_pos)
4667+ .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish );
4668+ },
4669+
4670+ _format_title = function(title) {
4671+ if (title && title.length) {
4672+ if (currentOpts.titlePosition == 'float') {
4673+ return '<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">' + title + '</td><td id="fancybox-title-float-right"></td></tr></table>';
4674+ }
4675+
4676+ return '<div id="fancybox-title-' + currentOpts.titlePosition + '">' + title + '</div>';
4677+ }
4678+
4679+ return false;
4680+ },
4681+
4682+ _process_title = function() {
4683+ titleStr = currentOpts.title || '';
4684+ titleHeight = 0;
4685+
4686+ title
4687+ .empty()
4688+ .removeAttr('style')
4689+ .removeClass();
4690+
4691+ if (currentOpts.titleShow === false) {
4692+ title.hide();
4693+ return;
4694+ }
4695+
4696+ titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr);
4697+
4698+ if (!titleStr || titleStr === '') {
4699+ title.hide();
4700+ return;
4701+ }
4702+
4703+ title
4704+ .addClass('fancybox-title-' + currentOpts.titlePosition)
4705+ .html( titleStr )
4706+ .appendTo( 'body' )
4707+ .show();
4708+
4709+ switch (currentOpts.titlePosition) {
4710+ case 'inside':
4711+ title
4712+ .css({
4713+ 'width' : final_pos.width - (currentOpts.padding * 2),
4714+ 'marginLeft' : currentOpts.padding,
4715+ 'marginRight' : currentOpts.padding
4716+ });
4717+
4718+ titleHeight = title.outerHeight(true);
4719+
4720+ title.appendTo( outer );
4721+
4722+ final_pos.height += titleHeight;
4723+ break;
4724+
4725+ case 'over':
4726+ title
4727+ .css({
4728+ 'marginLeft' : currentOpts.padding,
4729+ 'width' : final_pos.width - (currentOpts.padding * 2),
4730+ 'bottom' : currentOpts.padding
4731+ })
4732+ .appendTo( outer );
4733+ break;
4734+
4735+ case 'float':
4736+ title
4737+ .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1)
4738+ .appendTo( wrap );
4739+ break;
4740+
4741+ default:
4742+ title
4743+ .css({
4744+ 'width' : final_pos.width - (currentOpts.padding * 2),
4745+ 'paddingLeft' : currentOpts.padding,
4746+ 'paddingRight' : currentOpts.padding
4747+ })
4748+ .appendTo( wrap );
4749+ break;
4750+ }
4751+
4752+ title.hide();
4753+ },
4754+
4755+ _set_navigation = function() {
4756+ if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) {
4757+ $(document).bind('keydown.fb', function(e) {
4758+ if (e.keyCode == 27 && currentOpts.enableEscapeButton) {
4759+ e.preventDefault();
4760+ $.fancybox.close();
4761+
4762+ } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
4763+ e.preventDefault();
4764+ $.fancybox[ e.keyCode == 37 ? 'prev' : 'next']();
4765+ }
4766+ });
4767+ }
4768+
4769+ if (!currentOpts.showNavArrows) {
4770+ nav_left.hide();
4771+ nav_right.hide();
4772+ return;
4773+ }
4774+
4775+ if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) {
4776+ nav_left.show();
4777+ }
4778+
4779+ if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) {
4780+ nav_right.show();
4781+ }
4782+ },
4783+
4784+ _finish = function () {
4785+ if (!$.support.opacity) {
4786+ content.get(0).style.removeAttribute('filter');
4787+ wrap.get(0).style.removeAttribute('filter');
4788+ }
4789+
4790+ if (selectedOpts.autoDimensions) {
4791+ content.css('height', 'auto');
4792+ }
4793+
4794+ wrap.css('height', 'auto');
4795+
4796+ if (titleStr && titleStr.length) {
4797+ title.show();
4798+ }
4799+
4800+ if (currentOpts.showCloseButton) {
4801+ close.show();
4802+ }
4803+
4804+ _set_navigation();
4805+
4806+ if (currentOpts.hideOnContentClick) {
4807+ content.bind('click', $.fancybox.close);
4808+ }
4809+
4810+ if (currentOpts.hideOnOverlayClick) {
4811+ overlay.bind('click', $.fancybox.close);
4812+ }
4813+
4814+ $(window).bind("resize.fb", $.fancybox.resize);
4815+
4816+ if (currentOpts.centerOnScroll) {
4817+ $(window).bind("scroll.fb", $.fancybox.center);
4818+ }
4819+
4820+ if (currentOpts.type == 'iframe') {
4821+ $('<iframe id="fancybox-frame" name="fancybox-frame' + new Date().getTime() + '" frameborder="0" hspace="0" ' + ($.browser.msie ? 'allowtransparency="true""' : '') + ' scrolling="' + selectedOpts.scrolling + '" src="' + currentOpts.href + '"></iframe>').appendTo(content);
4822+ }
4823+
4824+ wrap.show();
4825+
4826+ busy = false;
4827+
4828+ $.fancybox.center();
4829+
4830+ currentOpts.onComplete(currentArray, currentIndex, currentOpts);
4831+
4832+ _preload_images();
4833+ },
4834+
4835+ _preload_images = function() {
4836+ var href,
4837+ objNext;
4838+
4839+ if ((currentArray.length -1) > currentIndex) {
4840+ href = currentArray[ currentIndex + 1 ].href;
4841+
4842+ if (typeof href !== 'undefined' && href.match(imgRegExp)) {
4843+ objNext = new Image();
4844+ objNext.src = href;
4845+ }
4846+ }
4847+
4848+ if (currentIndex > 0) {
4849+ href = currentArray[ currentIndex - 1 ].href;
4850+
4851+ if (typeof href !== 'undefined' && href.match(imgRegExp)) {
4852+ objNext = new Image();
4853+ objNext.src = href;
4854+ }
4855+ }
4856+ },
4857+
4858+ _draw = function(pos) {
4859+ var dim = {
4860+ width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10),
4861+ height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10),
4862+
4863+ top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10),
4864+ left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10)
4865+ };
4866+
4867+ if (typeof final_pos.opacity !== 'undefined') {
4868+ dim.opacity = pos < 0.5 ? 0.5 : pos;
4869+ }
4870+
4871+ wrap.css(dim);
4872+
4873+ content.css({
4874+ 'width' : dim.width - currentOpts.padding * 2,
4875+ 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2
4876+ });
4877+ },
4878+
4879+ _get_viewport = function() {
4880+ return [
4881+ $(window).width() - (currentOpts.margin * 2),
4882+ $(window).height() - (currentOpts.margin * 2),
4883+ $(document).scrollLeft() + currentOpts.margin,
4884+ $(document).scrollTop() + currentOpts.margin
4885+ ];
4886+ },
4887+
4888+ _get_zoom_to = function () {
4889+ var view = _get_viewport(),
4890+ to = {},
4891+ resize = currentOpts.autoScale,
4892+ double_padding = currentOpts.padding * 2,
4893+ ratio;
4894+
4895+ if (currentOpts.width.toString().indexOf('%') > -1) {
4896+ to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10);
4897+ } else {
4898+ to.width = currentOpts.width + double_padding;
4899+ }
4900+
4901+ if (currentOpts.height.toString().indexOf('%') > -1) {
4902+ to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10);
4903+ } else {
4904+ to.height = currentOpts.height + double_padding;
4905+ }
4906+
4907+ if (resize && (to.width > view[0] || to.height > view[1])) {
4908+ if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') {
4909+ ratio = (currentOpts.width ) / (currentOpts.height );
4910+
4911+ if ((to.width ) > view[0]) {
4912+ to.width = view[0];
4913+ to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10);
4914+ }
4915+
4916+ if ((to.height) > view[1]) {
4917+ to.height = view[1];
4918+ to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10);
4919+ }
4920+
4921+ } else {
4922+ to.width = Math.min(to.width, view[0]);
4923+ to.height = Math.min(to.height, view[1]);
4924+ }
4925+ }
4926+
4927+ to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10);
4928+ to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10);
4929+
4930+ return to;
4931+ },
4932+
4933+ _get_obj_pos = function(obj) {
4934+ var pos = obj.offset();
4935+
4936+ pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0;
4937+ pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0;
4938+
4939+ pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0;
4940+ pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0;
4941+
4942+ pos.width = obj.width();
4943+ pos.height = obj.height();
4944+
4945+ return pos;
4946+ },
4947+
4948+ _get_zoom_from = function() {
4949+ var orig = selectedOpts.orig ? $(selectedOpts.orig) : false,
4950+ from = {},
4951+ pos,
4952+ view;
4953+
4954+ if (orig && orig.length) {
4955+ pos = _get_obj_pos(orig);
4956+
4957+ from = {
4958+ width : pos.width + (currentOpts.padding * 2),
4959+ height : pos.height + (currentOpts.padding * 2),
4960+ top : pos.top - currentOpts.padding - 20,
4961+ left : pos.left - currentOpts.padding - 20
4962+ };
4963+
4964+ } else {
4965+ view = _get_viewport();
4966+
4967+ from = {
4968+ width : currentOpts.padding * 2,
4969+ height : currentOpts.padding * 2,
4970+ top : parseInt(view[3] + view[1] * 0.5, 10),
4971+ left : parseInt(view[2] + view[0] * 0.5, 10)
4972+ };
4973+ }
4974+
4975+ return from;
4976+ },
4977+
4978+ _animate_loading = function() {
4979+ if (!loading.is(':visible')){
4980+ clearInterval(loadingTimer);
4981+ return;
4982+ }
4983+
4984+ $('div', loading).css('top', (loadingFrame * -40) + 'px');
4985+
4986+ loadingFrame = (loadingFrame + 1) % 12;
4987+ };
4988+
4989+ /*
4990+ * Public methods
4991+ */
4992+
4993+ $.fn.fancybox = function(options) {
4994+ if (!$(this).length) {
4995+ return this;
4996+ }
4997+
4998+ $(this)
4999+ .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {})))
5000+ .unbind('click.fb')
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches