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
=== modified file '.bzrignore'
--- .bzrignore 2011-08-28 14:30:18 +0000
+++ .bzrignore 2011-09-02 13:53:25 +0000
@@ -31,3 +31,7 @@
31applications/globaleaks/sessions/127.0.0.1-144deeb4-6d5c-4579-bdd3-3d9d5085abd231applications/globaleaks/sessions/127.0.0.1-144deeb4-6d5c-4579-bdd3-3d9d5085abd2
32applications/globaleaks/sessions/127.0.0.1-a8551263-bc3c-430c-abb2-8711fac671c132applications/globaleaks/sessions/127.0.0.1-a8551263-bc3c-430c-abb2-8711fac671c1
33applications/globaleaks/sessions/127.0.0.1-c6d5b9b3-1ec7-41c1-8d72-04c21b7a6b1133applications/globaleaks/sessions/127.0.0.1-c6d5b9b3-1ec7-41c1-8d72-04c21b7a6b11
34material/*
35applications/globaleaks/cache/cache.lock
36applications/globaleaks/cache/cache.shelve
37applications/admin/cache/*
3438
=== removed file 'applications/admin/cache/cache.lock'
=== removed file 'applications/admin/cache/cache.shelve'
35Binary 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 differ39Binary 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
=== modified file 'applications/admin/cron/crontab'
--- applications/admin/cron/crontab 2011-08-28 08:06:54 +0000
+++ applications/admin/cron/crontab 2011-09-02 13:53:25 +0000
@@ -1,1 +1,1 @@
110 * * * * root **applications/admin/cron/expire_sessions.py1#10 * * * * root **applications/admin/cron/expire_sessions.py
22
=== removed file 'applications/globaleaks/cache/cache.lock'
=== removed file 'applications/globaleaks/cache/cache.shelve'
3Binary 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 differ3Binary 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
=== added file 'applications/globaleaks/controllers/admin.py'
--- applications/globaleaks/controllers/admin.py 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/controllers/admin.py 2011-09-02 13:53:25 +0000
@@ -0,0 +1,37 @@
1# coding: utf8
2# try something like
3
4@auth.requires_login()
5def index():
6 return dict(message="hello from admin.py")
7
8@auth.requires_login()
9def targets():
10
11 response.flash = "You are now the GlobaLeaks Node Maintainer"
12
13 if(request.vars.edit and request.vars.edit.startswith("delete")):
14 gl.delete_target(request.vars.edit.split(".")[1])
15
16 if(request.vars.edit and request.vars.edit.startswith("edit")):
17 pass
18
19 form_content = (Field('Name', requires=IS_NOT_EMPTY()),
20 Field('Description', 'text', requires=IS_LENGTH(minsize=5,maxsize=50)),
21 Field('email', requires=[IS_EMAIL(), IS_NOT_IN_DB(db, db.target.url)])
22 )
23
24 form = SQLFORM.factory(*form_content)
25
26 targets = gl.get_targets("ANY")
27
28 if "display" in request.args and not request.vars:
29 return dict(form=None, list=True, targets=targets)
30
31 if form.accepts(request.vars, session):
32 c = request.vars
33 gl.create_target(c.Name, "demo", c.Description, c.email, "demo", "demo target")
34 targets = gl.get_targets("ANY")
35 return dict(form=form, list=True, targets=targets)
36
37 return dict(form=form, list=False, targets=targets)
038
=== modified file 'applications/globaleaks/controllers/default.py'
--- applications/globaleaks/controllers/default.py 2011-08-28 13:59:09 +0000
+++ applications/globaleaks/controllers/default.py 2011-09-02 13:53:25 +0000
@@ -1,13 +1,13 @@
1# -*- coding: utf-8 -*-
2### required - do no delete1### required - do no delete
3def user(): return dict(form=auth())2def user(): return dict(form=auth())
3
4def download(): return response.download(request,db)4def download(): return response.download(request,db)
5
5def call():6def call():
6 session.forget()7 session.forget()
7 return service()8 return service()
8### end requires9### end requires
9def index():10
10 return dict(message=T("Hello World, I am GlobaLeaks!"))11def index(): return dict(message=T("Hello World, I am GlobaLeaks!"))
1112
12def error():13def error(): return dict()
13 return dict()
1414
=== modified file 'applications/globaleaks/controllers/submission.py'
--- applications/globaleaks/controllers/submission.py 2011-08-28 20:00:22 +0000
+++ applications/globaleaks/controllers/submission.py 2011-09-02 13:53:25 +0000
@@ -1,30 +1,69 @@
1import os
2from pprint import pprint
3
1def index():4def index():
5 leaker_number = None
2 form_content = (Field('Title', requires=IS_NOT_EMPTY()),6 form_content = (Field('Title', requires=IS_NOT_EMPTY()),
3 Field('Description', 'text', requires=IS_NOT_EMPTY()),7 Field('Description', 'text', requires=IS_NOT_EMPTY()),
4 Field('Tags'),Field('material', 'upload', uploadfolder="uploads/"),8 Field('material1', 'upload', uploadfolder=os.path.join(request.folder,'uploads/')),
5 Field('dislaimer', 'boolean', requires=IS_EQUAL_TO("on", error_message="Please read the disclaimer")))9 Field('material2', 'upload', uploadfolder=os.path.join(request.folder,'uploads/')),
6 10 Field('material3', 'upload', uploadfolder=os.path.join(request.folder,'uploads/')),
7 form = SQLFORM.factory(*form_content)11 Field('metadata', 'boolean', requires=NOT_IMPLEMENTED("tulip-metadata-sanitization")),
8 12 Field('disclaimer', 'boolean', requires=IS_EQUAL_TO("on", error_message="Please read the disclaimer")),
13 )
14
15 form = SQLFORM.factory(*form_content,labels = {'disclaimer':'Accept and have read the disclaimer', 'metadata':'Metadata sanitization'})
16
17 form = FORM(TABLE(
18 TR('Title', INPUT(_name='Title', requires=IS_NOT_EMPTY())),
19 TR('Description:',TEXTAREA(_name='Description', requires=IS_NOT_EMPTY())),
20 TR('Material:', INPUT(_name='material1', _type='file', _class="disabled")),
21 TR('Metadata:',INPUT(_name='metadata', _type='checkbox', _class="notimplemented")),
22 TR('Accept Disclaimer:',
23 INPUT(_name='disclaimer', _type='checkbox',
24 requires=IS_EQUAL_TO("on", error_message="Please accept the disclaimer"))),
25 TR('', INPUT(_name='submit', _type='submit'))))
26
27
28
9 response.flash = "You are the Whistleblower"29 response.flash = "You are the Whistleblower"
10 30
11 if form.accepts(request.vars, session):31 if form.accepts(request.vars, session):
12 l = request.vars32 l = request.vars
33 leaker_number = randomizer.generate_tulip_receipt()
34
13 leak_id = gl.create_leak(l.Title, l.Description, None, None,35 leak_id = gl.create_leak(l.Title, l.Description, None, None,
14 {"Al Jazeera":10 , "CNN":20, "Leaker":0}, l.Tags)36 "demo", l.Tags, number=leaker_number[1])
37
38 i = 0
15 39
16 #response.flash = 'form accepted'40 #FIXME Refactor me please
41 for f in os.listdir(os.path.join(request.folder,'uploads/')):
42 ext = f.split(".")[-1:][0]
43 dst_folder = os.path.join(request.folder, 'material/' + str(leak_id.id) + '/')
44 if not os.path.isdir(dst_folder):
45 os.mkdir(dst_folder)
46 os.rename(os.path.join(request.folder, 'uploads/') + f, dst_folder + str(i) + "." + ext)
47 i += 1
17 leak = Leak(leak_id)48 leak = Leak(leak_id)
1849
19 #FIXME do this better...50 if(i>0):
20 tulips = []51 db.material.insert(leak_id=leak_id,
52 url="demo", type="demo")
53
21 for tulip in leak.tulips:54 for tulip in leak.tulips:
22 if tulip.target=="Leaker":55 target = gl.get_target(tulip.target)
56
57 if tulip.target=="0":
23 leaker_tulip = tulip.url58 leaker_tulip = tulip.url
24 else:59 continue
25 tulips.append((tulip.url, tulip.target))60
26 61 if target.status == "subscribed":
27 return dict(leak_id=leak_id, tulip=leaker_tulip, form=None, tulips=tulips)62 db.mail.insert(target=target.name,
63 address=target.url, tulip=tulip.url)
64 pretty_number = leaker_number[0][:3]+" "+leaker_number[0][3:6]+" " +leaker_number[0][6:]
65
66 return dict(leak_id=leak_id, leaker_tulip=pretty_number, form=None)
28 elif form.errors:67 elif form.errors:
29 response.flash = 'form has errors'68 response.flash = 'form has errors'
30 69
3170
=== added file 'applications/globaleaks/controllers/target.py'
--- applications/globaleaks/controllers/target.py 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/controllers/target.py 2011-09-02 13:53:25 +0000
@@ -0,0 +1,70 @@
1def index(): return dict(message="hello from target.py")
2
3def subscribe():
4 if not request.args:
5 subscribe_form = SQLFORM.factory(
6 Field('Name', requires=IS_NOT_EMPTY()),
7 Field('Email', requires=IS_NOT_EMPTY()),
8 Field('Description','text', requires=IS_NOT_EMPTY())
9 )
10 if subscribe_form.accepts(request.vars, session):
11 return dict(message="Not implemented!",subscribe=None)
12
13 return dict(message="Here you can subscribe as a target",subscribe=subscribe_form)
14
15 if request.args:
16 tulip_url = request.args[0]
17 else:
18 tulip_url = None
19
20 try:
21 tulip = Tulip(url=tulip_url)
22 except:
23 return dict(message="Error!",subscribe=None)
24
25 if not tulip_url or tulip.target == "0":
26 return dict(message="Error!",subscribe=None)
27
28 else:
29 target = db(db.target.id==tulip.target).select().first()
30
31 if not target:
32 return dict(message="Error!",subscribe=None)
33
34 if target.status == "subscribed":
35 return dict(message="already subscribed",subscribe=None)
36
37 else:
38 db.target[tulip.target].update_record(status="subscribed")
39 return dict(message="subscribed",subscribe=None)
40
41 return dict(message="this is logically impossible",subscribe=None)
42
43def unsubscribe():
44 if request.args:
45 tulip_url = request.args[0]
46 else:
47 tulip_url = None
48
49 try:
50 tulip = Tulip(url=tulip_url)
51 except:
52 return dict(message="Error!")
53
54 if not tulip_url or tulip.target == "0":
55 return dict(message="Error!")
56
57 else:
58 target = db(db.target.id==tulip.target).select().first()
59
60 if not target:
61 return dict(message="Error!")
62
63 if target.status == "unsubscribed":
64 return dict(message="already unsubscribed")
65
66 else:
67 db.target[tulip.target].update_record(status="unsubscribed")
68 return dict(message="unsubscribed")
69
70 return dict(message="this is logically impossible")
071
=== modified file 'applications/globaleaks/controllers/tulip.py'
--- applications/globaleaks/controllers/tulip.py 2011-08-28 18:49:15 +0000
+++ applications/globaleaks/controllers/tulip.py 2011-09-02 13:53:25 +0000
@@ -1,17 +1,24 @@
1def index():1def index():
2 return dict(dead=False,2 import hashlib
3 leak_title=None,3
4 leak_tags=None,4 tulip_url = None
5 leak_desc=None,5
6 leak_material=None,6 form = SQLFORM.factory(Field('Receipt', requires=IS_NOT_EMPTY()))
7 tulip_downloads=None,7
8 tulip_allowed_downloads=None,8 response.flash = "You are the Whistleblower"
9 comment=None, 9
10 name=None,10 if form.accepts(request.vars, session):
11 comment_form=None)11 l = request.vars
12 # Make the tulip work well
13 leak_number = l.Receipt.replace(' ','')
14 tulip_url = hashlib.sha256(leak_number).hexdigest()
15 redirect("/tulip/" + tulip_url)
16
17 return dict(form=form,tulip_url=None)
1218
13def status():19def status():
14 tulip_url = request.args[0]20 tulip_url = request.args[0]
21
15 try:22 try:
16 t = Tulip(url=tulip_url)23 t = Tulip(url=tulip_url)
17 24
@@ -20,45 +27,58 @@
2027
21 leak = t.get_leak()28 leak = t.get_leak()
22 29
30 if t.target == "0":
31 whistleblower=True
32 response.flash = "You are the Whistleblower"
33 else:
34 whistleblower=False
35 response.flash = "You are the Target"
36
23 dead = False37 dead = False
24 38
25 form = SQLFORM.factory(Field('Comment', 'text', requires=IS_NOT_EMPTY()))39 if(int(t.allowed_accesses) !=0 and int(t.accesses_counter) >= int(t.allowed_accesses)):
40 dead = True
41 else:
42 t.accesses_counter = int(t.accesses_counter) + 1
43
44 if(int(t.allowed_downloads) !=0 and int(t.downloads_counter) >= int(t.allowed_downloads)):
45 dead = True
46
47 print gl.get_targets("ANY")
48 return dict(err=None,
49 dead=dead,
50 whistleblower=whistleblower,
51 tulip_url=tulip_url,
52 leak_id=leak.id,
53 leak_title=leak.title,
54 leak_tags=leak.tags,
55 leak_desc=leak.desc,
56 leak_material=leak.material,
57 tulip_accesses=t.accesses_counter,
58 tulip_allowed_accesses=t.allowed_accesses,
59 tulip_downloads=t.downloads_counter,
60 tulip_allowed_downloads=t.allowed_downloads,
61 name=t.target,
62 targets=gl.get_targets("ANY"))
63
64def download():
65 import os
66
67 tulip_url = request.args[0]
68
69 try:
70 t = Tulip(url=tulip_url)
71 except:
72 redirect("/tulip/" + tulip_url);
2673
27 if(int(t.downloads_counter) >= int(t.allowed_downloads) and int(t.allowed_downloads)!=0):74 if(int(t.downloads_counter) >= int(t.allowed_downloads) and int(t.allowed_downloads)!=0):
28 dead = True75 redirect("/tulip/" + tulip_url);
29 else:76 else:
30 t.downloads_counter = int(t.downloads_counter) + 177 t.downloads_counter = int(t.downloads_counter) + 1
3178
32 if form.accepts(request.vars, session):79 leak = t.get_leak()
33 response.flash = 'ok!'80
34 c = response.vars81 response.headers['Content-Type'] = "application/octet"
35 print response.vars82 response.headers['Content-Disposition'] = 'attachment; filename="' + tulip_url + '.zip"'
3683
37 return dict(err=None,84 return response.stream(open(os.path.join(request.folder, 'material/', 'static.zip'),'rb'))
38 dead=dead,
39 leak_title=leak.title,
40 leak_tags=leak.tags,
41 leak_desc=leak.desc,
42 leak_material=leak.material,
43 tulip_downloads=t.downloads_counter,
44 tulip_allowed_downloads=t.allowed_downloads,
45 comment="asdads",
46 name=t.target,
47 comment_form=form)
48
49 elif form.errors:
50 response.flash = 'form has errors'
51 else:
52 response.flash = 'please fill the form'
53
54
55 return dict(err=None,
56 dead=dead,
57 leak_title=leak.title,
58 leak_tags=leak.tags,
59 leak_desc=leak.desc,
60 leak_material=leak.material,
61 tulip_downloads=t.downloads_counter,
62 tulip_allowed_downloads=t.allowed_downloads,
63 comment_form=form,
64 comment=None)
6585
=== modified file 'applications/globaleaks/cron/crontab'
--- applications/globaleaks/cron/crontab 2011-08-28 13:59:09 +0000
+++ applications/globaleaks/cron/crontab 2011-09-02 13:53:25 +0000
@@ -1,2 +1,3 @@
1#crontab1#crontab
2#* * * * * root *applications/init/cron/scheduler.py2* * * * * root *applications/globaleaks/cron/scheduler.py
30 */2 * * * root *applications/globaleaks/cron/target_list_clean.py
34
=== modified file 'applications/globaleaks/cron/scheduler.py' (properties changed: -x to +x)
--- applications/globaleaks/cron/scheduler.py 2011-08-28 13:59:09 +0000
+++ applications/globaleaks/cron/scheduler.py 2011-09-02 13:53:25 +0000
@@ -1,13 +1,58 @@
1#!/usr/bin/env python1#!/usr/bin/env python
2import time2import time,os
3import zipfile, tempfile
34
4fp = open("/tmp/test", "w")5fp = open("/tmp/cron.log", "a+")
5fp.write(time.ctime()+"\n")6fp.write(time.ctime()+"\n")
6fp.write(str(dir(db))+"\n")7"""
7fp.write(str(dir(gl))+"\n")8if(db.auth_user):
9 # XXX Remove for non demo usage
10 if(not db(db.auth_user.email=="node@globaleaks.org").select().first()):
11 db.auth_user.insert(first_name="Globaleaks node administrator",
12 last_name="Globaleaks",email="node@globaleaks.org",
13 password=db.auth_user.password.validate("testing"))
14"""
15
16new_material = db(db.leak.spooled==False).select()
17
18"""
19for mat in new_material:
20 if db(db.material.leak_id==mat.id).select():
21 mat_dir = os.path.join(request.folder, 'material/') + str(mat.id)
22 fp.write("mat_dir %s\n" % mat_dir)
23
24 fp.write("path %s\n" % os.path.join(mat_dir, str(mat.id)+".zip"))
25 zip = zipfile.ZipFile(mat_dir+".zip", 'w')
26 fp.write("zip %s\n" % zip)
27
28 for file in os.listdir(mat_dir):
29 zip.write(mat_dir+"/"+file, file)
30
31 zip.close()
32 db.leak[mat.id].update_record(spooled=True)
33 db.commit()"""
34
8fp.close()35fp.close()
936
1037mails = db(db.mail).select()
11#db.38
12#gl.39for m in mails:
1340 message = """Hello there I am GlobaLeaks.
41There is a fresh new leak waiting for your at:
42 http://%s:%s/tulip/%s
43
44Take Care,
45Random GlobaLeaks Node
46
47to unsubscribe: http://%s:%s/globaleaks/target/unsubscribe/%s
48to subscribe back: http://%s:%s/globaleaks/target/subscribe/%s
49""" % (settings.hostname, settings.port, m.tulip,
50 settings.hostname, settings.port, m.tulip,
51 settings.hostname, settings.port, m.tulip)
52
53 mail.send(to=m.address,
54 subject="GlobaLeaks notification for: " + m.target,
55 message=message)
56 db(db.mail.id==m.id).delete()
57
58db.commit()
1459
=== added file 'applications/globaleaks/cron/target_list_clean.py'
--- applications/globaleaks/cron/target_list_clean.py 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/cron/target_list_clean.py 2011-09-02 13:53:25 +0000
@@ -0,0 +1,4 @@
1#!/usr/bin/env python
2
3db(db.target).delete()
4db.commit()
05
=== modified file 'applications/globaleaks/languages/it.py'
--- applications/globaleaks/languages/it.py 2011-08-28 13:59:09 +0000
+++ applications/globaleaks/languages/it.py 2011-09-02 13:53:25 +0000
@@ -5,9 +5,13 @@
5'%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S',5'%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S',
6'%s rows deleted': '%s righe ("record") cancellate',6'%s rows deleted': '%s righe ("record") cancellate',
7'%s rows updated': '%s righe ("record") modificate',7'%s rows updated': '%s righe ("record") modificate',
8'Administrative interface': 'Interfaccia amministrativa',
9'Are you sure you want to delete this object?': 'Are you sure you want to delete this object?',
8'Available databases and tables': 'Database e tabelle disponibili',10'Available databases and tables': 'Database e tabelle disponibili',
9'Cannot be empty': 'Non può essere vuoto',11'Cannot be empty': 'Non può essere vuoto',
12'Change password': 'Change password',
10'Check to delete': 'Seleziona per cancellare',13'Check to delete': 'Seleziona per cancellare',
14'Check to delete:': 'Check to delete:',
11'Client IP': 'Client IP',15'Client IP': 'Client IP',
12'Controller': 'Controller',16'Controller': 'Controller',
13'Copyright': 'Copyright',17'Copyright': 'Copyright',
@@ -18,12 +22,16 @@
18'Database': 'Database',22'Database': 'Database',
19'Delete:': 'Cancella:',23'Delete:': 'Cancella:',
20'Description': 'Descrizione',24'Description': 'Descrizione',
25'Documentation': 'Documentazione',
21'E-mail': 'E-mail',26'E-mail': 'E-mail',
22'Edit': 'Modifica',27'Edit': 'Modifica',
23'Edit This App': 'Modifica questa applicazione',28'Edit This App': 'Modifica questa applicazione',
24'Edit current record': 'Modifica record corrente',29'Edit current record': 'Modifica record corrente',
30'Email non valida': 'Email non valida',
25'First name': 'Nome',31'First name': 'Nome',
32'Group %(group_id)s created': 'Group %(group_id)s created',
26'Group ID': 'ID Gruppo',33'Group ID': 'ID Gruppo',
34'Group uniquely assigned to user %(id)s': 'Group uniquely assigned to user %(id)s',
27'Hello World': 'Salve Mondo',35'Hello World': 'Salve Mondo',
28'Hello World in a flash!': 'Salve Mondo in un flash!',36'Hello World in a flash!': 'Salve Mondo in un flash!',
29'Import/Export': 'Importa/Esporta',37'Import/Export': 'Importa/Esporta',
@@ -31,23 +39,40 @@
31'Internal State': 'Stato interno',39'Internal State': 'Stato interno',
32'Invalid Query': 'Richiesta (query) non valida',40'Invalid Query': 'Richiesta (query) non valida',
33'Invalid email': 'Email non valida',41'Invalid email': 'Email non valida',
42'Invalid login': 'Invalid login',
43'Invalid password': 'Invalid password',
34'Last name': 'Cognome',44'Last name': 'Cognome',
35'Layout': 'Layout',45'Layout': 'Layout',
46'Logged in': 'Logged in',
47'Logged out': 'Logged out',
48'Login': 'Login',
36'Main Menu': 'Menu principale',49'Main Menu': 'Menu principale',
37'Menu Model': 'Menu Modelli',50'Menu Model': 'Menu Modelli',
38'Name': 'Nome',51'Name': 'Nome',
39'New Record': 'Nuovo elemento (record)',52'New Record': 'Nuovo elemento (record)',
53'New password': 'New password',
40'No databases in this application': 'Nessun database presente in questa applicazione',54'No databases in this application': 'Nessun database presente in questa applicazione',
55'Old password': 'Old password',
56'Online examples': 'Vedere gli esempi',
41'Origin': 'Origine',57'Origin': 'Origine',
42'Password': 'Password',58'Password': 'Password',
59"Password fields don't match": "Password fields don't match",
60'Please read the disclaimer': 'Please read the disclaimer',
43'Powered by': 'Powered by',61'Powered by': 'Powered by',
62'Profile': 'Profile',
63'Profile updated': 'Profile updated',
44'Query:': 'Richiesta (query):',64'Query:': 'Richiesta (query):',
45'Record ID': 'Record ID',65'Record ID': 'Record ID',
66'Register': 'Register',
46'Registration key': 'Chiave di Registazione',67'Registration key': 'Chiave di Registazione',
68'Registration successful': 'Registration successful',
69'Remember me (for 30 days)': 'Remember me (for 30 days)',
70'Request reset password': 'Request reset password',
47'Reset Password key': 'Resetta chiave Password ',71'Reset Password key': 'Resetta chiave Password ',
48'Role': 'Ruolo',72'Role': 'Ruolo',
49'Rows in table': 'Righe nella tabella',73'Rows in table': 'Righe nella tabella',
50'Rows selected': 'Righe selezionate',74'Rows selected': 'Righe selezionate',
75'Save profile': 'Save profile',
51'Stylesheet': 'Foglio di stile (stylesheet)',76'Stylesheet': 'Foglio di stile (stylesheet)',
52'Sure you want to delete this object?': 'Vuoi veramente cancellare questo oggetto?',77'Sure you want to delete this object?': 'Vuoi veramente cancellare questo oggetto?',
53'Table name': 'Nome tabella',78'Table name': 'Nome tabella',
@@ -57,8 +82,17 @@
57'Timestamp': 'Ora (timestamp)',82'Timestamp': 'Ora (timestamp)',
58'Update:': 'Aggiorna:',83'Update:': 'Aggiorna:',
59'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).',84'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).',
85'User %(id)s Logged-in': 'User %(id)s Logged-in',
86'User %(id)s Logged-out': 'User %(id)s Logged-out',
87'User %(id)s Password changed': 'User %(id)s Password changed',
88'User %(id)s Password reset': 'User %(id)s Password reset',
89'User %(id)s Profile updated': 'User %(id)s Profile updated',
90'User %(id)s Registered': 'User %(id)s Registered',
60'User ID': 'ID Utente',91'User ID': 'ID Utente',
92'Username': 'Username',
93'Verify Password': 'Verify Password',
61'View': 'Vista',94'View': 'Vista',
95'Welcome': 'Welcome',
62'Welcome %s': 'Benvenuto %s',96'Welcome %s': 'Benvenuto %s',
63'Welcome to web2py': 'Benvenuto su web2py',97'Welcome to web2py': 'Benvenuto su web2py',
64'Which called the function': 'che ha chiamato la funzione',98'Which called the function': 'che ha chiamato la funzione',
@@ -68,17 +102,17 @@
68'appadmin is disabled because insecure channel': 'Amministrazione (appadmin) disabilitata: comunicazione non sicura',102'appadmin is disabled because insecure channel': 'Amministrazione (appadmin) disabilitata: comunicazione non sicura',
69'cache': 'cache',103'cache': 'cache',
70'change password': 'Cambia password',104'change password': 'Cambia password',
71'Online examples': 'Vedere gli esempi',
72'Administrative interface': "Interfaccia amministrativa",
73'customize me!': 'Personalizzami!',105'customize me!': 'Personalizzami!',
74'data uploaded': 'dati caricati',106'data uploaded': 'dati caricati',
75'database': 'database',107'database': 'database',
76'database %s select': 'database %s select',108'database %s select': 'database %s select',
77'db': 'db',109'db': 'db',
78'design': 'progetta',110'design': 'progetta',
79'Documentation': 'Documentazione',
80'done!': 'fatto!',111'done!': 'fatto!',
81'edit profile': 'modifica profilo',112'edit profile': 'modifica profilo',
113'enter a value': 'enter a value',
114'enter an integer between %(min)g and %(max)g': 'enter an integer between %(min)g and %(max)g',
115'enter from %(min)g to %(max)g characters': 'enter from %(min)g to %(max)g characters',
82'export as csv file': 'esporta come file CSV',116'export as csv file': 'esporta come file CSV',
83'hello world': 'salve mondo',117'hello world': 'salve mondo',
84'insert new': 'inserisci nuovo',118'insert new': 'inserisci nuovo',
@@ -92,7 +126,10 @@
92'next 100 rows': 'prossime 100 righe',126'next 100 rows': 'prossime 100 righe',
93'not authorized': 'non autorizzato',127'not authorized': 'non autorizzato',
94'or import from csv file': 'oppure importa da file CSV',128'or import from csv file': 'oppure importa da file CSV',
129'password': 'password',
130'please input your password again': 'please input your password again',
95'previous 100 rows': '100 righe precedenti',131'previous 100 rows': '100 righe precedenti',
132'profile': 'profile',
96'record': 'record',133'record': 'record',
97'record does not exist': 'il record non esiste',134'record does not exist': 'il record non esiste',
98'record id': 'record id',135'record id': 'record id',
@@ -101,4 +138,5 @@
101'state': 'stato',138'state': 'stato',
102'table': 'tabella',139'table': 'tabella',
103'unable to parse csv file': 'non riesco a decodificare questo file CSV',140'unable to parse csv file': 'non riesco a decodificare questo file CSV',
141'value already in database or empty': 'value already in database or empty',
104}142}
105143
=== added directory 'applications/globaleaks/material'
=== added file 'applications/globaleaks/material/static.zip'
106Binary 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 differ144Binary 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
=== modified file 'applications/globaleaks/models/0.py'
--- applications/globaleaks/models/0.py 2011-08-28 13:59:09 +0000
+++ applications/globaleaks/models/0.py 2011-09-02 13:53:25 +0000
@@ -17,3 +17,8 @@
17settings.login_method = 'local'17settings.login_method = 'local'
18settings.login_config = ''18settings.login_config = ''
19settings.plugins = []19settings.plugins = []
20
21settings.hostname = '127.0.0.1'
22settings.port = '8000'
23
24
2025
=== modified file 'applications/globaleaks/models/datamodel.py'
--- applications/globaleaks/models/datamodel.py 2011-08-28 13:59:09 +0000
+++ applications/globaleaks/models/datamodel.py 2011-09-02 13:53:25 +0000
@@ -24,7 +24,7 @@
24 db.commit()24 db.commit()
25 title = property(get_title, set_title)25 title = property(get_title, set_title)
26 26
27 #TODO: implment get/set tags27 #TODO:implement get/set tags
28 def set_tags(self):28 def set_tags(self):
29 pass29 pass
30 def get_tags(self):30 def get_tags(self):
@@ -38,14 +38,14 @@
38 db.commit()38 db.commit()
39 desc = property(get_desc, set_desc)39 desc = property(get_desc, set_desc)
40 40
41 #TODO: implment get/set material41 #TODO: implement get/set material
42 def get_material(self):42 def get_material(self):
43 pass43 pass
44 def set_material(self, material):44 def set_material(self, material):
45 pass45 pass
46 material = property(get_material, set_material)46 material = property(get_material, set_material)
47 47
48 #TODO: implment get/set targets48 #TODO: implement get/set targets
49 def get_targets(self):49 def get_targets(self):
50 pass50 pass
51 def set_targets(self, targets):51 def set_targets(self, targets):
@@ -79,7 +79,7 @@
79class Tulip(object):79class Tulip(object):
80 def __init__(self, id=None, url=None):80 def __init__(self, id=None, url=None):
81 if url:81 if url:
82 self._id = db(db.tulip.uri==url).select().first().id82 self._id = db(db.tulip.url==url).select().first().id
83 else:83 else:
84 self._id = id84 self._id = id
85 85
@@ -91,7 +91,7 @@
91 id = property(get_id, set_id)91 id = property(get_id, set_id)
92 92
93 def get_url(self):93 def get_url(self):
94 return db.tulip[self.id].uri94 return db.tulip[self.id].url
95 def set_url(self, url):95 def set_url(self, url):
96 print "Error: url is read only"96 print "Error: url is read only"
97 pass97 pass
@@ -103,6 +103,20 @@
103 print "Error: target is read only"103 print "Error: target is read only"
104 pass104 pass
105 target = property(get_target, set_target)105 target = property(get_target, set_target)
106
107 def get_allowed_accesses(self):
108 return db.tulip[self.id].allowed_accesses
109 def set_allowed_accesses(self, allowed_accesses):
110 db.tulip[self.id].update_record(allowed_accessess=allowed_accesses)
111 db.commit()
112 allowed_accesses = property(get_allowed_accesses, set_allowed_accesses)
113
114 def get_accesses_counter(self):
115 return db.tulip[self.id].accesses_counter
116 def set_accesses_counter(self, accesses_counter):
117 db.tulip[self.id].update_record(accesses_counter=accesses_counter)
118 db.commit()
119 accesses_counter = property(get_accesses_counter, set_accesses_counter)
106 120
107 def get_allowed_downloads(self):121 def get_allowed_downloads(self):
108 return db.tulip[self.id].allowed_downloads122 return db.tulip[self.id].allowed_downloads
@@ -121,6 +135,6 @@
121 def get_leak(self):135 def get_leak(self):
122 return Leak(db.tulip[self.id].leak_id)136 return Leak(db.tulip[self.id].leak_id)
123 def set_leak(self):137 def set_leak(self):
124 #FIXME: raise error that leak of a tulip can not be changed138 print "Error: leak is read only"
125 pass139 pass
126 leak = property(get_leak, set_leak)140 leak = property(get_leak, set_leak)
127141
=== modified file 'applications/globaleaks/models/db.py'
--- applications/globaleaks/models/db.py 2011-08-28 20:00:22 +0000
+++ applications/globaleaks/models/db.py 2011-09-02 13:53:25 +0000
@@ -20,128 +20,8 @@
20 db = DAL('sqlite://storage.sqlite') # if not, use SQLite or other DB20 db = DAL('sqlite://storage.sqlite') # if not, use SQLite or other DB
21"""21"""
22randomizer = local_import('randomizer')22randomizer = local_import('randomizer')
2323db = local_import('logic.db').DB()
24class DB(DAL):24gl = local_import('logic.globaleaks').Globaleaks(db)
25 def __init__(self):
26 DAL.__init__(self, 'sqlite://storage.db')
27 self.create_db()
28
29 def create_db(self):
30 self.define_table('target',
31 Field('name'),
32 Field('category'),
33 Field('desc'),
34 Field('uri'),
35 Field('type'),
36 Field('info'),
37 Field('status'),
38 Field('last_sent_tulip'),
39 Field('last_access'),
40 Field('last_download'),
41 Field('tulip_counter'),
42 Field('dowload_counter'),
43 format='%(name)s'
44 )
45
46 self.define_table('leak',
47 Field('title'),
48 Field('desc'),
49 Field('submission_timestamp'),
50 Field('leaker_id', self.target),
51 format='%(name)s'
52 )
53
54 self.define_table('comment',
55 Field('leak_id', self.leak),
56 Field('commenter_id', self.target),
57 Field('comment'),
58 format='%(name)s'
59 )
60
61 self.define_table('material',
62 Field('url', unique=True),
63 Field('leak_id', self.leak),
64 Field('type'),
65 format='%(name)s'
66 )
67
68 self.define_table('tulip',
69 Field('uri', unique=True),
70 Field('leak_id', self.leak),
71 Field('target_id'),# self.target),
72 Field('downloads_counter'),
73 Field('allowed_downloads'),
74 Field('expiry_time'),
75 format='%(name)s'
76 )
77
78db = DB()
79
80####
81# The main GlobaLeaks Class
82###
83
84class Globaleaks(object):
85
86 def __init__(self):
87 pass
88
89 def create_target(self, name, category, desc, uri, type, info):
90 target_id = db.target.insert(name=name,
91 category=category,
92 desc = desc, uri=uri, type=type, info=info,
93 status=True #, last_send_tulip=None,
94 #last_access=None, last_download=None,
95 #tulip_counter=None, download_counter=None
96 )
97 db.commit()
98 return target_id
99
100 def delete_target (self, id):
101 db(db.target.id==id).delete()
102 pass
103
104 def get_targets(self):
105 return db(db.target).select()
106
107
108 def get_target(self, target_id):
109 pass
110
111 def create_leak(self, title, desc, leaker, material, targets = {}, tags=""):
112 #FIXME insert new tags into DB first
113
114 #Create leak and insert into DB
115 leak_id = db.leak.insert(title = title, desc = desc,
116 submission_timestamp = time.time(),
117 leaker_id = 0)
118
119 #Create a tulip for each target and insert into DB
120 for target_uri, allowed_downloads in targets.iteritems():
121 db.tulip.insert(uri = randomizer.generate_tulip_url(),
122 leak_id = leak_id,
123 target_id = target_uri, #FIXME get target_id_properly
124 downloads_counter = 0,
125 allowed_downloads = allowed_downloads,
126 expiry_time = 0)
127
128 db.commit()
129 return leak_id
130
131 def get_leaks(self):
132 pass
133
134 def get_leak(self, leak_id):
135 pass
136
137 def get_tulips(self, leak_id):
138 pass
139
140 def get_tulip(self, tulip_id):
141 pass
142
143
144
14525
146####26####
147# For the time being just use sqlite27# For the time being just use sqlite
@@ -167,29 +47,28 @@
167#########################################################################47#########################################################################
16848
169from gluon.tools import Mail, Auth, Crud, Service, PluginManager, prettydate49from gluon.tools import Mail, Auth, Crud, Service, PluginManager, prettydate
170mail = Mail() # mailer50mail = Mail() # mailer
171auth = Auth(db) # authentication/authorization51auth = Auth(db) # authentication/authorization
172crud = Crud(db) # for CRUD helpers using auth52crud = Crud(db) # for CRUD helpers using auth
173service = Service() # for json, xml, jsonrpc, xmlrpc, amfrpc53service = Service() # for json, xml, jsonrpc, xmlrpc, amfrpc
174plugins = PluginManager() # for configuring plugins54plugins = PluginManager() # for configuring plugins
17555
176# mail.settings.server = 'logging' or 'smtp.gmail.com:587' # your SMTP server56mail.settings.server = 'smtp.gmail.com:587' # your SMTP server
177# mail.settings.sender = 'you@gmail.com' # your email57mail.settings.sender = 'globaleaks2011@gmail.com' # your email
178# mail.settings.login = 'username:password' # your credentials or None58mail.settings.login = 'globaleaks2011@gmail.com:Antani1234' # your credentials or None
17959
180auth.settings.hmac_key = 'sha512:7a716c8b015b5caca119e195533717fe9a3095d67b3f97114e30256b27392977' # before define_tables()60auth.settings.hmac_key = 'sha512:7a716c8b015b5caca119e195533717fe9a3095d67b3f97114e30256b27392977' # before define_tables()
181auth.define_tables() # creates all needed tables61auth.define_tables() # creates all needed tables
182auth.settings.mailer = mail # for user email verification62auth.settings.mailer = mail # for user email verification
183auth.settings.registration_requires_verification = False63auth.settings.registration_requires_verification = False
184auth.settings.registration_requires_approval = False64auth.settings.registration_requires_approval = False
185auth.messages.verify_email = 'Click on the link http://'+request.env.http_host+URL('default','user',args=['verify_email'])+'/%(key)s to verify your email'65auth.messages.verify_email = 'Click on the link http://' + request.env.http_host + URL('default','user',args=['verify_email']) + '/%(key)s to verify your email'
18666
187auth.settings.reset_password_requires_verification = True67auth.settings.reset_password_requires_verification = True
188auth.messages.reset_password = 'Click on the link http://'+request.env.http_host+URL('default','user',args=['reset_password'])+'/%(key)s to reset your password'68auth.messages.reset_password = 'Click on the link http://' + request.env.http_host + URL('default','user',args=['reset_password']) + '/%(key)s to reset your password'
18969
190auth.settings.table_user.email.label=T("Username") 70auth.settings.table_user.email.label=T("Username")
19171
192
193#########################################################################72#########################################################################
194## If you need to use OpenID, Facebook, MySpace, Twitter, Linkedin, etc.73## If you need to use OpenID, Facebook, MySpace, Twitter, Linkedin, etc.
195## register with janrain.com, uncomment and customize following74## register with janrain.com, uncomment and customize following
@@ -201,7 +80,6 @@
201## other login methods are in gluon/contrib/login_methods80## other login methods are in gluon/contrib/login_methods
202#########################################################################81#########################################################################
20382
204
205# XXX83# XXX
206# Don't know84# Don't know
207# crud.settings.auth = None # =auth to enforce authorization on crud85# crud.settings.auth = None # =auth to enforce authorization on crud
@@ -227,4 +105,15 @@
227# mail.settings.sender = settings.email_sender105# mail.settings.sender = settings.email_sender
228# mail.settings.login = settings.email_login106# mail.settings.login = settings.email_login
229107
230gl = Globaleaks()108
109# FIXME move to better location
110class NOT_IMPLEMENTED(object):
111 def __init__(self, a, error_message='This function is not implemented: visit http://blueprints.launchpad.net/globaleaks/+spec/%s'):
112 self.e = error_message % a
113 def __call__(self, value):
114 if value == "off" or not value:
115 return (value, None)
116 return (value, self.e)
117 def formatter(self, value):
118 return format(value)
119
231120
=== modified file 'applications/globaleaks/models/menu.py'
--- applications/globaleaks/models/menu.py 2011-08-28 13:59:09 +0000
+++ applications/globaleaks/models/menu.py 2011-09-02 13:53:25 +0000
@@ -4,7 +4,7 @@
4response.meta.keywords = settings.keywords4response.meta.keywords = settings.keywords
5response.meta.description = settings.description5response.meta.description = settings.description
6response.menu = [6response.menu = [
7 (T('Index'),URL('default','index')==URL(),URL('default','index'),[]),7# (T('Index'),URL('default','index')==URL(),URL('default','index'),[]),
8 (T('Submission'),URL('submission', 'index')==URL(),URL('submission','index'),[]),8# (T('Submission'),URL('submission', 'index')==URL(),URL('submission','index'),[]),
9 (T('Tulips'),URL('tulip','index')==URL(),URL('tulip','index'),[]),9# (T('Tulips'),URL('tulip','index')==URL(),URL('tulip','index'),[]),
10]10]
1111
=== added directory 'applications/globaleaks/modules/logic'
=== added file 'applications/globaleaks/modules/logic/__init__.py'
=== added file 'applications/globaleaks/modules/logic/datamodel.py'
--- applications/globaleaks/modules/logic/datamodel.py 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/modules/logic/datamodel.py 2011-09-02 13:53:25 +0000
@@ -0,0 +1,154 @@
1import time
2
3# web2py's funny way to import "local" modules
4#db = local_import('sql').db
5#randomizer = local_import('randomizer')
6
7randomizer = local_import('randomizer')
8
9class Leak(object):
10 def __init__(self, id):
11 self._id = id
12
13 def get_id(self):
14 return self._id
15 def set_id(self):
16 print "Error: id is read only"
17 pass
18 id = property(get_id, set_id)
19
20 def get_title(self):
21 return db.leak[self.id].title
22 def set_title(self, title):
23 db.leak[self.id] = dict(title = title)
24 db.commit()
25 title = property(get_title, set_title)
26
27 #TODO:implement get/set tags
28 def set_tags(self):
29 pass
30 def get_tags(self):
31 pass
32 tags = property(get_tags, set_tags)
33
34 def get_desc(self):
35 return db.leak[self.id].desc
36 def set_desc(self, desc):
37 db.leak[self.id].desc = desc
38 db.commit()
39 desc = property(get_desc, set_desc)
40
41 #TODO: implement get/set material
42 def get_material(self):
43 pass
44 def set_material(self, material):
45 pass
46 material = property(get_material, set_material)
47
48 #TODO: implement get/set targets
49 def get_targets(self):
50 pass
51 def set_targets(self, targets):
52 pass
53 targets = property(get_targets, set_targets)
54
55 def get_submission_timestamp(self):
56 return db.leak[self.id].submission_timestamp
57 def set_submission_timstamp(self, timestamp):
58 print "Error: submission_timestamp is read only"
59 pass
60 submission_timestamp = property(get_submission_timestamp, set_submission_timstamp)
61
62 def get_leaker(self):
63 pass
64 def set_leaker(self, leaker):
65 print "Error: leaker is read only"
66 pass
67 leaker = property(get_leaker, set_leaker)
68
69 def get_tulips(self):
70 for tulip_id in db(db.tulip.leak_id==self._id).select(db.tulip.id):
71 yield Tulip(tulip_id["id"])
72
73 def set_tulips(self, tulips):
74 print "Error: tulip is read only"
75 pass
76 tulips = property(get_tulips, set_tulips)
77
78
79class Tulip(object):
80 def __init__(self, id=None, url=None):
81 if url:
82 self._id = db(db.tulip.url==url).select().first().id
83 else:
84 self._id = id
85
86 def get_id(self):
87 return self._id
88 def set_id(self, id):
89 print "Error: id is read only"
90 pass
91 id = property(get_id, set_id)
92
93 def get_url(self):
94 return db.tulip[self.id].url
95 def set_url(self, url):
96 print "Error: url is read only"
97 pass
98 url = property(get_url, set_url)
99
100 def get_target(self):
101 return db.tulip[self.id].target_id
102 def set_target(self, target):
103 print "Error: target is read only"
104 pass
105 target = property(get_target, set_target)
106
107 def get_allowed_accesses(self):
108 return db.tulip[self.id].allowed_accesses
109 def set_allowed_accesses(self, allowed_accesses):
110 db.tulip[self.id].update_record(allowed_accessess=allowed_accesses)
111 db.commit()
112 allowed_accesses = property(get_allowed_accesses, set_allowed_accesses)
113
114 def get_accesses_counter(self):
115 return db.tulip[self.id].accesses_counter
116 def set_accesses_counter(self, accesses_counter):
117 db.tulip[self.id].update_record(accesses_counter=accesses_counter)
118 db.commit()
119 accesses_counter = property(get_accesses_counter, set_accesses_counter)
120
121 def get_allowed_downloads(self):
122 return db.tulip[self.id].allowed_downloads
123 def set_allowed_downloads(self, allowed_downloads):
124 db.tulip[self.id].update_record(allowed_downloads=allowed_downloads)
125 db.commit()
126 allowed_downloads = property(get_allowed_downloads, set_allowed_downloads)
127
128 def get_downloads_counter(self):
129 return db.tulip[self.id].downloads_counter
130 def set_downloads_counter(self, downloads_counter):
131 db.tulip[self.id].update_record(downloads_counter=downloads_counter)
132 db.commit()
133 downloads_counter = property(get_downloads_counter, set_downloads_counter)
134
135 def get_leak(self):
136 return Leak(db.tulip[self.id].leak_id)
137 def set_leak(self):
138 print "Error: leak is read only"
139 pass
140 leak = property(get_leak, set_leak)
141
142
143
144# FIXME move to better location
145class NOT_IMPLEMENTED(object):
146 def __init__(self, a, error_message='This function is not implemented: visit http://blueprints.launchpad.net/globaleaks/+spec/%s'):
147 self.e = error_message % a
148 def __call__(self, value):
149 if value == "off" or not value:
150 return (value, None)
151 return (value, self.e)
152 def formatter(self, value):
153 return format(value)
154
0155
=== added file 'applications/globaleaks/modules/logic/db.py'
--- applications/globaleaks/modules/logic/db.py 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/modules/logic/db.py 2011-09-02 13:53:25 +0000
@@ -0,0 +1,67 @@
1from gluon import DAL, Field
2
3class DB(DAL):
4 def __init__(self):
5 DAL.__init__(self, 'sqlite://storage.db')
6 self.create_db()
7
8 def create_db(self):
9 self.define_table('target',
10 Field('name'),
11 Field('category'),
12 Field('desc'),
13 Field('url'),
14 Field('type'),
15 Field('info'),
16 Field('status'),
17 Field('last_sent_tulip'),
18 Field('last_access'),
19 Field('last_download'),
20 Field('tulip_counter'),
21 Field('dowload_counter'),
22 format='%(name)s'
23 )
24
25 self.define_table('leak',
26 Field('title'),
27 Field('desc'),
28 Field('submission_timestamp'),
29 Field('leaker_id', self.target),
30 Field('spooled', 'boolean', False),
31 format='%(name)s'
32 )
33
34 self.define_table('comment',
35 Field('leak_id', self.leak),
36 Field('commenter_id', self.target),
37 Field('comment'),
38 format='%(name)s'
39 )
40
41 self.define_table('material',
42 Field('url', unique=True),
43 Field('leak_id', self.leak),
44 Field('type'),
45 format='%(name)s'
46 )
47
48 self.define_table('tulip',
49 Field('url', unique=True),
50 Field('leak_id', self.leak),
51 Field('target_id'),
52 Field('allowed_accesses'),
53 Field('accesses_counter'),
54 Field('allowed_downloads'),
55 Field('downloads_counter'),
56 Field('expiry_time'),
57 format='%(name)s'
58 )
59
60 self.define_table('mail',
61 Field('target'),
62 Field('address'),
63 Field('tulip', unique=True),
64 format='%(name)s'
65 )
66
67db = DB()
068
=== added file 'applications/globaleaks/modules/logic/globaleaks.py'
--- applications/globaleaks/modules/logic/globaleaks.py 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/modules/logic/globaleaks.py 2011-09-02 13:53:25 +0000
@@ -0,0 +1,77 @@
1import randomizer
2import time
3
4class Globaleaks(object):
5
6 def __init__(self, db):
7 self._db = db
8
9 def create_target(self, name, category, desc, url, type, info):
10 target_id = self._db.target.insert(name=name,
11 category=category,
12 desc = desc, url=url, type=type, info=info,
13 status="subscribed" #, last_send_tulip=None,
14 #last_access=None, last_download=None,
15 #tulip_counter=None, download_counter=None
16 )
17 self._db.commit()
18 return target_id
19
20 def delete_target (self, id):
21 self._db(self._db.target.id==id).delete()
22 pass
23
24 def get_targets(self, target_set):
25 if target_set == "ANY":
26 return self._db(self._db.target).select()
27 return self._db(self._db.target.category==target_set).select()
28
29 def get_target(self, target_id):
30 return self._db(self._db.target.id==target_id).select().first()
31
32 def create_leak(self, title, desc, leaker, material, target_set, tags="", number=None):
33 #FIXME insert new tags into DB first
34
35 #Create leak and insert into DB
36 leak_id = self._db.leak.insert(title = title, desc = desc,
37 submission_timestamp = time.time(),
38 leaker_id = 0, spooled=False)
39
40 targets = self.get_targets(target_set)
41
42 for t in targets:
43 #Create a tulip for each target and insert into DB
44 #for target_url, allowed_downloads in targets.iteritems():
45 self._db.tulip.insert(url = randomizer.generate_tulip_url(),
46 leak_id = leak_id,
47 target_id = t.id, #FIXME get target_id_properly
48 allowed_accesses = 0, # inf
49 accesses_counter = 0,
50 allowed_downloads = 5,
51 downloads_counter = 0,
52 expiry_time = 0)
53
54 self._db.tulip.insert(url = number,
55 leak_id = leak_id,
56 target_id = 0, #FIXME get target_id_properly
57 allowed_accesses = 0, # inf
58 accesses_counter = 0,
59 allowed_downloads = 5,
60 downloads_counter = 0,
61 expiry_time = 0)
62
63 self._db.commit()
64 return leak_id
65
66 def get_leaks(self):
67 pass
68
69 def get_leak(self, leak_id):
70 pass
71
72 def get_tulips(self, leak_id):
73 pass
74
75 def get_tulip(self, tulip_id):
76 pass
77
078
=== modified file 'applications/globaleaks/modules/randomizer.py'
--- applications/globaleaks/modules/randomizer.py 2011-08-28 13:59:09 +0000
+++ applications/globaleaks/modules/randomizer.py 2011-09-02 13:53:25 +0000
@@ -1,9 +1,16 @@
1import random1import random
2import hashlib, os2import hashlib, os
33
4def generate_tulip_receipt():
5 #FIXME is this a good idea?
6 # should i be converting the random number string to bytes?
7 number = ""
8 for i in range(0,10):
9 number += str(ord(os.urandom(1)) % 10)
10 return (number, hashlib.sha256(number).hexdigest())
11
4def generate_leaker_id():12def generate_leaker_id():
5 return hashlib.sha256(os.urandom(100)).hexdigest()13 return hashlib.sha256(os.urandom(100)).hexdigest()
6 14
7def generate_tulip_url():15def generate_tulip_url():
8 return hashlib.sha256(os.urandom(100)).hexdigest()16 return hashlib.sha256(os.urandom(100)).hexdigest()
9
1017
=== modified file 'applications/globaleaks/static/css/base.css'
--- applications/globaleaks/static/css/base.css 2011-08-28 20:00:22 +0000
+++ applications/globaleaks/static/css/base.css 2011-09-02 13:53:25 +0000
@@ -1,556 +1,472 @@
1@charset "UTF-8";1/* http://meyerweb.com/eric/tools/css/reset/
22 v2.0 | 20110126
3/* This file is contains the following sections:3 License: none (public domain)
44*/
5Update: Revision: 20101102 by Martin Mulone5
66html, body, div, span, applet, object, iframe,
7- The new revision contains:
8- Html5, good practice and normalization support.
9- Diferent hacks.
10- The normalization and some tags come from
11 diferent sites so i keep the credits and comments.
12 but the base of support html5 come from:
13 http://html5boilerplate.com/
14
15- ez.css (http://www.ez-css.org/layouts)
16- reset common tags
17- choose default fonts
18- choose link style
19- add bottom line to table rows
20- labels bold and occasionally centered
21- make all input fields the same size
22- add proper separation between h1-h6 and text
23- always indent the first line and add space below paragraphs
24- bullets and numbers style and indent
25- form and table padding
26- code blocks
27- left and right padding to quoted text
28- page layout alignment, width and padding (change this for spaces)
29- column widths (change this to use left_sidebar and right_sidebar)
30- backrgound images and colors (change this for colors)
31- web2py specific (.flash, .error)
32
33Notice:
34- even if you use a different layout/css you may need classes .flash and .error
35- this is all color neutral except for #349C01 (header, links, lines)
36- there are two backrgound images: images/background.png and images/header.png
37
38License: This file is released under BSD and MIT
39
40*/
41
42/*
43 credit is left where credit is due.
44 additionally, much inspiration was taken from these projects:
45 yui.yahooapis.com/2.8.1/build/base/base.css
46 camendesign.com/design/
47 praegnanz.de/weblog/htmlcssjs-kickstart
48*/
49
50/*
51 html5doctor.com Reset Stylesheet (Eric Meyer's Reset Reloaded + HTML5 baseline)
52 v1.4 2009-07-27 | Authors: Eric Meyer & Richard Clark
53 html5doctor.com/html-5-reset-stylesheet/
54*/
55
56html, body, div, span, object, iframe,
57h1, h2, h3, h4, h5, h6, p, blockquote, pre,7h1, h2, h3, h4, h5, h6, p, blockquote, pre,
58abbr, address, cite, code,8a, abbr, acronym, address, big, cite, code,
59del, dfn, em, img, ins, kbd, q, samp,9del, dfn, em, img, ins, kbd, q, s, samp,
60small, strong, sub, sup, var,10small, strike, strong, sub, sup, tt, var,
61b, i,11b, u, i, center,
62dl, dt, dd, ol, ul, li,12dl, dt, dd, ol, ul, li,
63fieldset, form, label, legend,13fieldset, form, label, legend,
64table, caption, tbody, tfoot, thead, tr, th, td,14table, caption, tbody, tfoot, thead, tr, th, td,
65article, aside, canvas, details, figcaption, figure, 15article, aside, canvas, details, embed,
66footer, header, hgroup, menu, nav, section, summary,16figure, figcaption, footer, header, hgroup,
17menu, nav, output, ruby, section, summary,
67time, mark, audio, video {18time, mark, audio, video {
68 margin:0;19 margin: 0;
69 padding:0;20 padding: 0;
70 border:0;21 border: 0;
71 outline:0;22 font-size: 100%;
72 font-size:100%;23 font: inherit;
73 vertical-align:baseline;24 vertical-align: baseline;
74 background:transparent;25}
75} 26/* HTML5 display-role reset for older browsers */
7627article, aside, details, figcaption, figure,
77article, aside, details, figcaption, figure,28footer, header, hgroup, menu, nav, section {
78footer, header, hgroup, menu, nav, section { 29 display: block;
79 display:block;30}
80}31body {
8132 line-height: 1;
82nav ul { list-style:none; }33}
8334ol, ul {
84blockquote, q { quotes:none; }35 list-style: none;
8536}
37blockquote, q {
38 quotes: none;
39}
86blockquote:before, blockquote:after,40blockquote:before, blockquote:after,
87q:before, q:after { content:''; content:none; }41q:before, q:after {
8842 content: '';
89a { margin:0; padding:0; font-size:100%; vertical-align:baseline; background:transparent; }43 content: none;
90a:hover { text-decoration: underline }44}
9145table {
92ins { background-color:#ff9; color:#000; text-decoration:none; }46 border-collapse: collapse;
9347 border-spacing: 0;
94mark { background-color:#ff9; color:#000; font-style:italic; font-weight:bold; }48}
9549
96del { text-decoration: line-through; }50
9751
98abbr[title], dfn[title] { border-bottom:1px dotted #000; cursor:help; }52
9953
100/* tables still need cellspacing="0" in the markup */54/* Template */
101table { border-collapse:collapse; border-spacing:0; }55body {
10256 background: #f3f3f3 url('/globaleaks/static/images/background.png');
103hr { display:block; height:1px; border:0; border-top:1px solid #ccc; margin:1em 0; padding:0; }57 font-family: Arial, sans-serif;
10458 color: #444;
105input, select { vertical-align:middle; }59}
106/* END RESET CSS */60
10761.clear {
10862 clear: both;
109/*63}
110fonts.css from the YUI Library: developer.yahoo.com/yui/64
111 Please refer to developer.yahoo.com/yui/fonts/ for font sizing percentages65strong {
11266 font-weight: bold;
113There are three custom edits:67}
114 * remove arial, helvetica from explicit font stack68
115 * make the line-height relative and unit-less69a.button {
116 * remove the pre, code styles70 color: #fff;
117*/71 border: 0;
118body { font:13px/1.231 sans-serif; *font-size:small; } /* hack retained to preserve specificity */72 border-radius: 5px;
11973 -moz-border-radius: 5px;
120/*table { font-size:inherit; font:100%; }*/74 -webkit-border-radius: 5px;
12175 font-weight: bold;
122select, input, textarea, button { font:99% sans-serif; }76 cursor: pointer;
12377 padding: 10px;
12478 display: block;
125/* normalize monospace sizing 79 text-decoration: none;
126 * en.wikipedia.org/wiki/MediaWiki_talk:Common.css/Archive_11#Teletype_style_fix_for_Chrome80 text-align: center;
127 */81 margin: 20px 0 20px 10px;
128pre, code, kbd, samp { font-family: monospace, sans-serif; }82 float: right;
12983
130/* 84}
131 * minimal base styles 85
132 */86a.button.whistleblower {
13387 background: #0a70b4;
134/* #444 looks better than black: twitter.com/H_FJ/statuses/11800719859 */ 88 width: 200px;
135body, select, input, textarea { color:#444; }89}
13690
137/* Headers (h1,h2,etc) have no default font-size or margin,91a.button.addtarget {
138 you'll want to define those yourself. */ 92 background: #444;
139 93 width: 100px;
140/* www.aestheticallyloyal.com/public/optimize-legibility/ */ 94}
141h1,h2,h3,h4,h5,h6 { font-weight: bold; }95
14296a.button.targetlist {
143/* always force a scrollbar in non-IE */ 97 float: left;
144html { overflow-y: scroll; }98 color: black;
145 99 background: transparent;
146/* Accessible focus treatment: people.opera.com/patrickl/experiments/keyboard/test */100 width: 120px;
147a:hover, a:active { outline: none; }101}
148102
149a, a:active, a:visited { color:#607890; }103a:hover.button.targetlist {
150a:hover { color:#036; }104 color: red;
151105}
152ul, ol { margin-left: 1.8em; }106
153ol { list-style-type: decimal; }107input[type=submit]{
154108 background: #444;
155/* Remove margins for navigation lists */109 color: #fff;
156nav ul, nav li { margin: 0; } 110 border: 0;
157111 border-radius: 5px;
158small { font-size:85%; }112 -moz-border-radius: 5px;
159strong, th { font-weight: bold; }113 -webkit-border-radius: 5px;
160114 font-weight: bold;
161td, td img { vertical-align:top; } 115 cursor: pointer;
162116 padding: 5px 10px;
163sub { vertical-align: sub; font-size: smaller; }117 display: block;
164sup { vertical-align: super; font-size: smaller; }118 text-decoration: none;
165119 text-align: center;
166pre { 120 margin: 10px 0;
167 padding: 15px; 121 cursor: pointer;
168 122 font-size: 14px;
169 /* www.pathf.com/blogs/2008/05/formatting-quoted-code-in-blog-posts-css21-white-space-pre-wrap/ */123}
170 white-space: pre; /* CSS2 */124
171 white-space: pre-wrap; /* CSS 2.1 */125
172 white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */126p.tulip{
173 word-wrap: break-word; /* IE */127 background: #444;
174}128 color: #fff;
175129 border: 0;
176textarea { overflow: auto; } /* thnx ivannikolic! www.sitepoint.com/blogs/2010/08/20/ie-remove-textarea-scrollbars/ */130 border-radius: 5px;
177131 -moz-border-radius: 5px;
178.ie6 legend, .ie7 legend { margin-left: -7px; } /* thnx ivannikolic! */132 -webkit-border-radius: 5px;
179133 font-weight: bold;
180/* align checkboxes, radios, text inputs with their label134 padding: 20px;
181 by: Thierry Koblentz tjkdesign.com/ez-css/css/base.css */135 display: block;
182input[type="radio"] { vertical-align: text-bottom; }136 text-decoration: none;
183input[type="checkbox"] { vertical-align: bottom; }137 text-align: center;
184.ie7 input[type="checkbox"] { vertical-align: baseline; }138 margin: 10px auto 20px auto;
185.ie6 input { vertical-align: text-bottom; }139 font-size: 28px;
186140 width: 300px;
187/* hand cursor on clickable input elements */141}
188label, input[type=button], input[type=submit], button { cursor: pointer; }142
189143
190/* webkit browsers add a 2px margin outside the chrome of form elements */
191button, input, select, textarea { margin: 0; }
192
193/* colors for form validity */
194input:valid, textarea:valid { }
195input:invalid, textarea:invalid {
196 border-radius: 1px;
197 -moz-box-shadow: 0px 0px 5px red;
198 -webkit-box-shadow: 0px 0px 5px red;
199 box-shadow: 0px 0px 5px red;
200}
201.no-boxshadow input:invalid,
202.no-boxshadow textarea:invalid { background-color: #f0dddd; }
203
204
205/* These selection declarations have to be separate.
206 No text-shadow: twitter.com/miketaylr/status/12228805301
207 Also: hot pink. */
208::-moz-selection{ background: #555; color:#fff; text-shadow: none; }
209::selection { background:#555; color:#fff; text-shadow: none; }
210
211/* j.mp/webkit-tap-highlight-color */
212a:link { -webkit-tap-highlight-color: #555; }
213
214
215/* make buttons play nice in IE:
216 www.viget.com/inspire/styling-the-button-element-in-internet-explorer/ */
217button { width: auto; overflow: visible; }
218
219/* bicubic resizing for non-native sized IMG:
220 code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ */
221.ie7 img { -ms-interpolation-mode: bicubic; }
222
223/*
224 * Non-semantic helper classes
225 */
226
227/* for image replacement */
228.ir { display:block; text-indent:-999em; overflow:hidden; background-repeat: no-repeat; }
229
230/* Hide for both screenreaders and browsers
231 css-discuss.incutio.com/wiki/Screenreader_Visibility */
232.hidden { display:none; }
233
234/* Hide only visually, but have it available for screenreaders
235 www.webaim.org/techniques/css/invisiblecontent/
236 Solution from: j.mp/visuallyhidden - Thanks Jonathan Neal! */
237.visuallyhidden { position:absolute !important;
238 clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
239 clip: rect(1px, 1px, 1px, 1px); }
240
241/* Hide visually and from screenreaders, but maintain layout */
242.invisible { visibility: hidden; }
243
244/* >> The Magnificent CLEARFIX: Updated to prevent margin-collapsing on child elements << j.mp/bestclearfix */
245.clearfix:before, .clearfix:after {
246 content: "\0020"; display: block; height: 0; visibility: hidden;
247}
248
249.clearfix:after { clear: both; }
250/* Fix clearfix: blueprintcss.lighthouseapp.com/projects/15318/tickets/5-extra-margin-padding-bottom-of-page */
251.clearfix { zoom: 1; }
252
253
254/*********** layout info (ez.css) ***********/
255/* 2009 -2010 (c) | ez-css.org
256 * ez-plug-min.css :: version 1.1 :: 01182010
257 */
258.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}
259
260
261/*********** add bottom line to table rows ***********/
262th, td { padding: 0.1em 0.5em 0.1em 0.5em;}
263
264/*********** labels bold and occasionally centered ***********/
265label {
266 white-space: nowrap;
267}
268label, b, th {
269 font-weight: bold;
270}
271thead th {
272 text-align: center;
273 border-bottom: 1px solid #444;
274}
275/*********** forms and table padding ***********/
276form, table {
277 padding: 5px 10px 5px 10px;
278}
279
280/*********** code blocks ***********/
281code {
282 padding: 3px 5px;
283 font-family: Andale Mono, monospace;
284 font-size: 0.9em;
285}
286
287/*********** left and right padding to quoted text ***********/
288blockquote {
289 background: #cccccc;
290 border-left: 30px transparent;
291 border-right: 30px transparent;
292 /*padding: 5px;*/
293}
294
295input[type=text], input[type=password], textarea, select {
296 margin: 2px 15px 2px 5px;
297 width: 280px;
298 background: #fff;
299 color: #555;
300 border: 1px solid #dedede;
301 -moz-border-radius: 2px;
302 -webkit-border-radius: 2px;
303 border-radius: 2px;
304 font-size: 12px;
305}
306
307input[type=text], input[type=password] {
308 height: 16px;
309}
310
311select[multiple=multiple] {
312 height: 90px;
313}
314
315input[type=submit], input[type=button], button {
316 margin: 0px;
317 /*width: 85px;*/
318 height: 22px;
319 background: #eaeaea;
320 color: #555;
321 border: 1px solid #dedede;
322 -moz-border-radius: 2px;
323 -webkit-border-radius: 2px;
324 border-radius: 2px;
325}
326
327fieldset { border: 1px solid #dedede; padding: 6px; }
328legend { font-weight: bold; }
329
330input:focus, textarea:focus { background: #fafafa; }
331
332p {text-indent:30px;}
333
334p, blockquote {
335 margin-bottom: 10px;
336}
337
338h1,h2,h3,h4,h5,h6 { line-height: 170%; }
339h1 {font-size: 2.0em;}
340h2 {font-size: 1.8em;}
341h3 {font-size: 1.4em;}
342h4 {font-size: 1.2em;}
343h5 {font-size: 1.0em;}
344h6 {font-size: 0.8em;}
345
346/*********** page layout alignment, width and padding ***********/
347/*body {background-color: #000;}*/
348#container, #header, #page, #content, #statusbar,
349#footer, #wrapper { display:block; line-height: 170%; }
350#wrapper {width: 900px;}
351#container {144#container {
352 margin: 0 auto;145 background: #fff;
353 padding: 0;146 width: 880px;
354}147 padding: 40px;
355#wrapper {margin: 0 auto;} 148 margin: 20px auto 5px auto;
356#wrapper {background-color: #fff; padding: 5px;} 149 -moz-box-shadow: 0px 0px 3px #dedede;
357#statusbar { margin: 5px 0px 20px 0px;}150 -webkit-box-shadow: 5px 5px 0px #dedede;
358#footer { 151 box-shadow: 0px 0px 10px #d0d0d0;
359 margin-top: 30px; 152}
360 padding: 5px; 153
361}154#container img.ribbon {
362#statusbar, #footer { 155 float: right;
363 background: #eaeaea; 156 margin-left: 20px;
364 border-top: 1px #aaa solid; 157 margin-top: -40px;
365}158 margin-right: -40px;
366#logo {159}
367 width: 68px;160
368 height: 62px;161
369 background: url(../images/logo.png);162#header {
370}163 padding-bottom: 40px;
371#appname {164}
372 color: #cccccc;165
373}166ul#navigation {
374167 float: right;
375#right_sidebar { width: 160px; float:right; display: none; }168 padding: 20px;
376#left_sidebar { width: 160px; float:left; display: none; }169 background: #ededed;
377#content { float: left; /*width: 740px;*//*width: 63%;*/ /*width: 640px; float:left;*/ } /* uncomment this if you are going to use sidebars */170}
378 171
379.auth_navbar {172ul#navigation li {
380 top: 0px;173 float: left;
381 float: right;174 margin-left: 10px;
382 padding: 3px 10px 3px 10px; 175}
383}176
384177ul#navigation li.user {
385/*********** web2py specific ***********/178 float: none;
386div.flash {179 padding-bottom: 5px;
387 font-weight: bold;180 font-size: 14px;
388 display: none;181}
389 position: fixed; 182
390 padding: 10px;183ul#navigation a {
391 top: 40px;184 color: #444;
392 right: 10px;185 text-decoration: none;
393 min-width: 280px;186 text-shadow: #fff 1px 1px 1px;
394 opacity: 0.85;187 font-weight: bold;
395 margin: 0px 0px 10px 10px; 188 font-size: 14px;
396 color: #fff; 189}
397 vertical-align: middle;190
398 cursor: pointer;191
399 background: #000;192#content h1 {
400 border: 2px solid #fff;193 font-size: 32px;
401 -moz-border-radius: 5px;194 margin-bottom: 10px;
402 -webkit-border-radius: 5px;195 text-transform: uppercase;
403 z-index: 2;196 font-weight: bold;
404}197}
405198
406div.error {199#content h1 span {
407 background-color: red;200 font-weight: normal;
408 color: white;201 text-transform: none;
409 padding: 3px;202}
410}203
411204#content p.intro {
412/***************************205 line-height: 20px;
413 * CSS 3 Buttons206 text-align: justify;
414 * http://github.com/michenriksen/css3buttons207 margin-bottom: 20px;
415 * created by Michael Henriksen208 background: #ededed;
416 * License: Unlicense 209 padding: 20px;
417 * 210}
418 * *******************/211
419212#content .box {
420a.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; }213 background: #444;
421a.button.primary { font-weight: bold }214 width: 340px;
422a.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; }215 height: 320px;
423a.button:active,216 margin: 20px 0;
424a.button.active { background-position: 0 -81px; border-color: #347BBA; background-color: #0F5EA2; color: #FFFFFF; text-shadow: none; }217 float: left;
425a.button:active { top: 1px }218 padding: 40px;
426a.button.negative:hover { color: #FFFFFF; background-position: 0 -121px; background-color: #D84743; border-color: #911D1B; }219}
427a.button.negative:active,220
428a.button.negative.active { background-position: 0 -161px; background-color: #A5211E; border-color: #911D1B; }221#content .box.box-hover {
429a.button.pill { -webkit-border-radius: 19px; -moz-border-radius: 19px; border-radius: 19px; padding: 2px 10px 2px 10px; }222 background: #555;
430a.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; }223 transition: background-color 0.3s linear;
431a.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; }224 -moz-transition: background-color 0.3s linear; /* FF3.7+ */
432a.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; }225 -o-transition: background-color 0.3s linear; /* Opera 10.5 */
433a.button.left:active,226 -webkit-transition: background-color 0.3s linear; /* Saf3.2+, Chrome */
434a.button.middle:active,227}
435a.button.right:active { top: 0px }228
436a.button.big { font-size: 16px; padding-left: 17px; padding-right: 17px; }229#content .box:nth-child(even) {
437a.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; }230 margin-left: 40px;
438a.big.button span.icon { top: 0px }231}
439a.button span.icon.book { background-position: 0 0 }232
440a.button:hover span.icon.book { background-position: 0 -15px }233#content .box h2 {
441a.button span.icon.calendar { background-position: 0 -30px }234 text-transform: uppercase;
442a.button:hover span.icon.calendar { background-position: 0 -45px }235 color: #fff;
443a.button span.icon.chat { background-position: 0 -60px }236 font-weight: bold;
444a.button:hover span.icon.chat { background-position: 0 -75px }237 font-size: 24px;
445a.button span.icon.check { background-position: 0 -90px }238}
446a.button:hover span.icon.check { background-position: 0 -103px }239
447a.button span.icon.clock { background-position: 0 -116px }240#content .box h2 span {
448a.button:hover span.icon.clock { background-position: 0 -131px }241 font-size: 48px;
449a.button span.icon.cog { background-position: 0 -146px }242}
450a.button:hover span.icon.cog { background-position: 0 -161px }243
451a.button span.icon.comment { background-position: 0 -176px }244#content .box a {
452a.button:hover span.icon.comment { background-position: 0 -190px }245 display: block;
453a.button span.icon.cross { background-position: 0 -204px }246 color: #fff;
454a.button:hover span.icon.cross { background-position: 0 -219px }247 text-decoration: none;
455a.button span.icon.downarrow { background-position: 0 -234px }248 text-transform: uppercase;
456a.button:hover span.icon.downarrow { background-position: 0 -249px }249 font-weight: bold;
457a.button span.icon.fork { background-position: 0 -264px }250 float: right;
458a.button:hover span.icon.fork { background-position: 0 -279px }251 margin-top: 32px;
459a.button span.icon.heart { background-position: 0 -294px }252 background: #0a70b4;
460a.button:hover span.icon.heart { background-position: 0 -308px }253 padding: 10px;
461a.button span.icon.home { background-position: 0 -322px }254 border-radius:5px;
462a.button:hover span.icon.home { background-position: 0 -337px }255 -webkit-border-radius:5px;
463a.button span.icon.key { background-position: 0 -352px }256 -moz-border-radius:5px;
464a.button:hover span.icon.key { background-position: 0 -367px }257}
465a.button span.icon.leftarrow { background-position: 0 -382px }258
466a.button:hover span.icon.leftarrow { background-position: 0 -397px }259#content .box span.info {
467a.button span.icon.lock { background-position: 0 -412px }260 display: block;
468a.button:hover span.icon.lock { background-position: 0 -427px }261 color: #fff;
469a.button span.icon.loop { background-position: 0 -442px }262 text-decoration: none;
470a.button:hover span.icon.loop { background-position: 0 -457px }263 text-transform: uppercase;
471a.button span.icon.magnifier { background-position: 0 -472px }264 font-weight: bold;
472a.button:hover span.icon.magnifier { background-position: 0 -487px }265 float: right;
473a.button span.icon.mail { background-position: 0 -502px }266 margin-top: 42px;
474a.button:hover span.icon.mail { background-position: 0 -514px }267 font-style: italic;
475a.button span.icon.move { background-position: 0 -526px }268 padding-top: 0px;
476a.button:hover span.icon.move { background-position: 0 -541px }269}
477a.button span.icon.pen { background-position: 0 -556px }270
478a.button:hover span.icon.pen { background-position: 0 -571px }271#content .box img {
479a.button span.icon.pin { background-position: 0 -586px }272 margin-top: 30px;
480a.button:hover span.icon.pin { background-position: 0 -601px }273}
481a.button span.icon.plus { background-position: 0 -616px }274
482a.button:hover span.icon.plus { background-position: 0 -631px }275
483a.button span.icon.reload { background-position: 0 -646px }276#content form table td {
484a.button:hover span.icon.reload { background-position: 0 -660px }277 padding: 5px 5px 10px 5px;
485a.button span.icon.rightarrow { background-position: 0 -674px }278 vertical-align: top;
486a.button:hover span.icon.rightarrow { background-position: 0 -689px }279}
487a.button span.icon.rss { background-position: 0 -704px }280
488a.button:hover span.icon.rss { background-position: 0 -719px }281#content form table td {
489a.button span.icon.tag { background-position: 0 -734px }282 font-size: 13px;
490a.button:hover span.icon.tag { background-position: 0 -749px }283 font-weight: bold;
491a.button span.icon.trash { background-position: 0 -764px }284}
492a.button:hover span.icon.trash { background-position: 0 -779px }285
493a.button span.icon.unlock { background-position: 0 -794px }286
494a.button:hover span.icon.unlock { background-position: 0 -809px }287
495a.button span.icon.uparrow { background-position: 0 -824px }288#content form input {
496a.button:hover span.icon.uparrow { background-position: 0 -839px }289 border: 1px solid #ddd;
497a.button span.icon.user { background-position: 0 -854px }290 padding: 5px;
498a.button:hover span.icon.user { background-position: 0 -869px }291 width: 350px;
499292 font-size: 13px;
500293}
501294
502295#content form input[type=submit] {
503296 width: auto;
504297}
505/*****************************************************298
506 * HERE YOU CAN START TO WRITE YOUR OWN DIVS299#content form textarea {
507 */300 border: 1px solid #ddd;
508301 padding: 5px;
509302 width: 350px;
510303 font-size: 13px;
511304}
512305
513306#content form .error {
514307 padding: 5px;
515/*308 width: 350px;
516 * Media queries for responsive design309 font-size: 13px;
517 */310 color: #fff;
518311 background: #e60000;
519@media all and (orientation:portrait) { 312 margin-top: 5px;
520 /* Style adjustments for portrait mode goes here */313 font-weight: bold;
521 314}
522}315
523316#content table.targetlist {
524@media all and (orientation:landscape) { 317 width: 100%;
525 /* Style adjustments for landscape mode goes here */318 font-size: 14px;
526 319}
527}320
528321#content table.targetlist th {
529/* Grade-A Mobile Browsers (Opera Mobile, iPhone Safari, Android Chrome) 322 //background: #005ea3;
530 Consider this: www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/ */323 background: #444;
531@media screen and (max-device-width: 480px) {324 color: #fff;
532 325 border: 1px solid #fff;
533 326 border-bottom: 2px solid #fff;
534 /* Uncomment if you don't want iOS and WinMobile to mobile-optimize the text for you327 font-weight: bold;
535 j.mp/textsizeadjust 328 padding: 5px;
536 html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */329 text-align: left;
537}330}
538331
539332#content table.targetlist td {
540/* 333 border: 1px solid #fff;
541 * print styles334 border-bottom: 2px solid #fff;
542 * inlined to avoid required HTTP connection www.phpied.com/delay-loading-your-print-css/ 335 padding: 5px;
543 */336 background: #ededed;
544@media print {337 text-align: left;
545 * { background: transparent !important; color: #444 !important; text-shadow: none !important; }338}
546 a, a:visited { color: #444 !important; text-decoration: underline; }339
547 a:after { content: " (" attr(href) ")"; } 340#content table.targetlist tr.odd td {
548 abbr:after { content: " (" attr(title) ")"; }341 background: #f5f5f5;
549 .ir a:after { content: ""; } /* Don't show links for images */342}
550 pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }343
551 thead { display: table-header-group; } /* css-discuss.incutio.com/wiki/Printing_Tables */ 344#content table.targetlist td.delete {
552 tr, img { page-break-inside: avoid; }345 text-align: center;
553 @page { margin: 0.5cm; }346}
554 p, h2, h3 { orphans: 3; widows: 3; }347
555 h2, h3{ page-break-after: avoid; }348#content table.targetlist td.delete button {
349 background: #e60000;
350 color: #fff;
351 border: 0;
352 border-radius: 3px;
353 -moz-border-radius: 3px;
354 -webkit-border-radius: 3px;
355 font-weight: bold;
356 cursor: pointer;
357}
358
359#content table.targetlist .downloads {
360 width: 70px;
361 text-align: center;
362}
363
364.entry {
365 width: 500px;
366 margin: 0 auto;
367 padding: 40px;
368 background: #f4f4f4;
369}
370
371.entry h2, .entry h3 {
372 font-weight: bold;
373 font-size: 18px;
374 margin-bottom: 5px;
375}
376
377.entry h2.title {
378 font-size: 28px;
379}
380
381.entry h3 {
382 padding-top: 5px;
383}
384
385
386.entry p {
387 font-size: 14px;
388}
389
390.entry li {
391 padding: 7px 0 7px 30px;
392 font-size: 14px;
393}
394
395.material ul {
396 margin-bottom: 20px;
397}
398
399.material li.zip {
400 background: url('/globaleaks/static/images/box_16x16.png') no-repeat left center;
401}
402
403.material li.img {
404 background: url('/globaleaks/static/images/image_16x16.png') no-repeat left center;
405}
406
407.material li.pdf {
408 background: url('/globaleaks/static/images/document_fill_16x16.png') no-repeat left center;
409}
410
411.material a {
412 display: block;
413 color: #fff;
414 text-decoration: none;
415 text-transform: uppercase;
416 font-weight: bold;
417 font-size: 14px;
418 float: left;
419 margin: 10px 10px 0 0;
420 padding: 10px 10px 10px 30px;
421 border-radius:5px;
422 -webkit-border-radius:5px;
423 -moz-border-radius:5px;
424}
425
426.material a.zip {
427 background: #0a70b4 url('/globaleaks/static/images/icon-download-zip.png') no-repeat 5px center;
428}
429
430.material a.crypt {
431 background: #0a70b4 url('/globaleaks/static/images/icon-download-crypt.png') no-repeat 5px center;
432}
433
434.downloads-left {
435 font-size: 18px;
436 float: left;
437 background: #444;
438 padding: 5px 10px;
439 color: #fff;
440 margin: 0 10px 10px 0;
441}
442
443.downloads-left.full {
444 background: #e60000;
445}
446
447
448.total-clicks {
449 font-size: 18px;
450 float: left;
451 background: #444;
452 padding: 5px 10px;
453 color: #fff;
454}
455
456.entry .material {
457 padding: 20px;
458 background: #444;
459 color: #fff;
460 margin: 20px 0;
461}
462
463#footer {
464 width: 960px;
465 margin: 10px auto 20px auto;
466 font-size: 12px;
467 text-align: right;
468}
469
470#footer a {
471 color: #0a70b4;
556}472}
557473
=== added file 'applications/globaleaks/static/css/old.css'
--- applications/globaleaks/static/css/old.css 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/static/css/old.css 2011-09-02 13:53:25 +0000
@@ -0,0 +1,918 @@
1@charset "UTF-8";
2
3/* This file is contains the following sections:
4
5Update: Revision: 20101102 by Martin Mulone
6
7- The new revision contains:
8- Html5, good practice and normalization support.
9- Diferent hacks.
10- The normalization and some tags come from
11 diferent sites so i keep the credits and comments.
12 but the base of support html5 come from:
13 http://html5boilerplate.com/
14
15- ez.css (http://www.ez-css.org/layouts)
16- reset common tags
17- choose default fonts
18- choose link style
19- add bottom line to table rows
20- labels bold and occasionally centered
21- make all input fields the same size
22- add proper separation between h1-h6 and text
23- always indent the first line and add space below paragraphs
24- bullets and numbers style and indent
25- form and table padding
26- code blocks
27- left and right padding to quoted text
28- page layout alignment, width and padding (change this for spaces)
29- column widths (change this to use left_sidebar and right_sidebar)
30- backrgound images and colors (change this for colors)
31- web2py specific (.flash, .error)
32
33Notice:
34- even if you use a different layout/css you may need classes .flash and .error
35- this is all color neutral except for #349C01 (header, links, lines)
36- there are two backrgound images: images/background.png and images/header.png
37
38License: This file is released under BSD and MIT
39
40*/
41
42/*
43 credit is left where credit is due.
44 additionally, much inspiration was taken from these projects:
45 yui.yahooapis.com/2.8.1/build/base/base.css
46 camendesign.com/design/
47 praegnanz.de/weblog/htmlcssjs-kickstart
48*/
49
50/*
51 html5doctor.com Reset Stylesheet (Eric Meyer's Reset Reloaded + HTML5 baseline)
52 v1.4 2009-07-27 | Authors: Eric Meyer & Richard Clark
53 html5doctor.com/html-5-reset-stylesheet/
54*/
55
56html, body, div, span, object, iframe,
57h1, h2, h3, h4, h5, h6, p, blockquote, pre,
58abbr, address, cite, code,
59del, dfn, em, img, ins, kbd, q, samp,
60small, strong, sub, sup, var,
61b, i,
62dl, dt, dd, ol, ul, li,
63fieldset, form, label, legend,
64table, caption, tbody, tfoot, thead, tr, th, td,
65article, aside, canvas, details, figcaption, figure,
66footer, header, hgroup, menu, nav, section, summary,
67time, mark, audio, video {
68 margin:0;
69 padding:0;
70 border:0;
71 outline:0;
72 font: inherit;
73 font-size:100%;
74 vertical-align:baseline;
75 background:transparent;
76}
77
78article, aside, details, figcaption, figure,
79footer, header, hgroup, menu, nav, section {
80 display:block;
81}
82
83nav ul { list-style:none; }
84
85blockquote, q { quotes:none; }
86
87blockquote:before, blockquote:after,
88q:before, q:after { content:''; content:none; }
89
90a { margin:0; padding:0; font-size:100%; vertical-align:baseline; background:transparent; }
91a:hover { text-decoration: underline }
92
93ins { background-color:#ff9; color:#000; text-decoration:none; }
94
95mark { background-color:#ff9; color:#000; font-style:italic; font-weight:bold; }
96
97del { text-decoration: line-through; }
98
99abbr[title], dfn[title] { border-bottom:1px dotted #000; cursor:help; }
100
101/* tables still need cellspacing="0" in the markup */
102table { border-collapse:collapse; border-spacing:0; }
103
104hr { display:block; height:1px; border:0; border-top:1px solid #ccc; margin:1em 0; padding:0; }
105
106input, select { vertical-align:middle; }
107/* END RESET CSS */
108
109
110/*
111fonts.css from the YUI Library: developer.yahoo.com/yui/
112 Please refer to developer.yahoo.com/yui/fonts/ for font sizing percentages
113
114There are three custom edits:
115 * remove arial, helvetica from explicit font stack
116 * make the line-height relative and unit-less
117 * remove the pre, code styles
118*/
119body { line-height: 1; font:13px/1.231 sans-serif; *font-size:small; } /* hack retained to preserve specificity */
120
121/*table { font-size:inherit; font:100%; }*/
122
123select, input, textarea, button { font:99% sans-serif; }
124
125
126/* normalize monospace sizing
127 * en.wikipedia.org/wiki/MediaWiki_talk:Common.css/Archive_11#Teletype_style_fix_for_Chrome
128 */
129pre, code, kbd, samp { font-family: monospace, sans-serif; }
130
131/*
132 * minimal base styles
133 */
134
135/* #444 looks better than black: twitter.com/H_FJ/statuses/11800719859 */
136body, select, input, textarea { color:#444; }
137
138/* Headers (h1,h2,etc) have no default font-size or margin,
139 you'll want to define those yourself. */
140
141/* www.aestheticallyloyal.com/public/optimize-legibility/ */
142h1,h2,h3,h4,h5,h6 { font-weight: bold; }
143
144/* always force a scrollbar in non-IE */
145html { overflow-y: scroll; }
146
147/* Accessible focus treatment: people.opera.com/patrickl/experiments/keyboard/test */
148a:hover, a:active { outline: none; }
149
150a, a:active, a:visited { color:#607890; }
151a:hover { color:#036; }
152
153ul, ol { margin-left: 1.8em; }
154ol { list-style-type: decimal; }
155
156/* Remove margins for navigation lists */
157nav ul, nav li { margin: 0; }
158
159small { font-size:85%; }
160strong, th { font-weight: bold; }
161
162td, td img { vertical-align:top; }
163
164sub { vertical-align: sub; font-size: smaller; }
165sup { vertical-align: super; font-size: smaller; }
166
167pre {
168 padding: 15px;
169
170 /* www.pathf.com/blogs/2008/05/formatting-quoted-code-in-blog-posts-css21-white-space-pre-wrap/ */
171 white-space: pre; /* CSS2 */
172 white-space: pre-wrap; /* CSS 2.1 */
173 white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
174 word-wrap: break-word; /* IE */
175}
176
177textarea { overflow: auto; } /* thnx ivannikolic! www.sitepoint.com/blogs/2010/08/20/ie-remove-textarea-scrollbars/ */
178
179.ie6 legend, .ie7 legend { margin-left: -7px; } /* thnx ivannikolic! */
180
181/* align checkboxes, radios, text inputs with their label
182 by: Thierry Koblentz tjkdesign.com/ez-css/css/base.css */
183input[type="radio"] { vertical-align: text-bottom; }
184input[type="checkbox"] { vertical-align: bottom; }
185.ie7 input[type="checkbox"] { vertical-align: baseline; }
186.ie6 input { vertical-align: text-bottom; }
187
188/* hand cursor on clickable input elements */
189label, input[type=button], input[type=submit], button { cursor: pointer; }
190
191/* webkit browsers add a 2px margin outside the chrome of form elements */
192button, input, select, textarea { margin: 0; }
193
194/* colors for form validity */
195input:valid, textarea:valid { }
196input:invalid, textarea:invalid {
197 border-radius: 1px;
198 -moz-box-shadow: 0px 0px 5px red;
199 -webkit-box-shadow: 0px 0px 5px red;
200 box-shadow: 0px 0px 5px red;
201}
202.no-boxshadow input:invalid,
203.no-boxshadow textarea:invalid { background-color: #f0dddd; }
204
205
206/* These selection declarations have to be separate.
207 No text-shadow: twitter.com/miketaylr/status/12228805301
208 Also: hot pink. */
209::-moz-selection{ background: #555; color:#fff; text-shadow: none; }
210::selection { background:#555; color:#fff; text-shadow: none; }
211
212/* j.mp/webkit-tap-highlight-color */
213a:link { -webkit-tap-highlight-color: #555; }
214
215
216/* make buttons play nice in IE:
217 www.viget.com/inspire/styling-the-button-element-in-internet-explorer/ */
218button { width: auto; overflow: visible; }
219
220/* bicubic resizing for non-native sized IMG:
221 code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ */
222.ie7 img { -ms-interpolation-mode: bicubic; }
223
224/*
225 * Non-semantic helper classes
226 */
227
228/* for image replacement */
229.ir { display:block; text-indent:-999em; overflow:hidden; background-repeat: no-repeat; }
230
231/* Hide for both screenreaders and browsers
232 css-discuss.incutio.com/wiki/Screenreader_Visibility */
233.hidden { display:none; }
234
235/* Hide only visually, but have it available for screenreaders
236 www.webaim.org/techniques/css/invisiblecontent/
237 Solution from: j.mp/visuallyhidden - Thanks Jonathan Neal! */
238.visuallyhidden { position:absolute !important;
239 clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
240 clip: rect(1px, 1px, 1px, 1px); }
241
242/* Hide visually and from screenreaders, but maintain layout */
243.invisible { visibility: hidden; }
244
245/* >> The Magnificent CLEARFIX: Updated to prevent margin-collapsing on child elements << j.mp/bestclearfix */
246.clearfix:before, .clearfix:after {
247 content: "\0020"; display: block; height: 0; visibility: hidden;
248}
249
250.clearfix:after { clear: both; }
251/* Fix clearfix: blueprintcss.lighthouseapp.com/projects/15318/tickets/5-extra-margin-padding-bottom-of-page */
252.clearfix { zoom: 1; }
253
254
255/*********** layout info (ez.css) ***********/
256/* 2009 -2010 (c) | ez-css.org
257 * ez-plug-min.css :: version 1.1 :: 01182010
258 */
259.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}
260
261
262/*********** add bottom line to table rows ***********/
263th, td { padding: 0.1em 0.5em 0.1em 0.5em;}
264
265/*********** labels bold and occasionally centered ***********/
266label {
267 white-space: nowrap;
268}
269label, b, th {
270 font-weight: bold;
271}
272thead th {
273 text-align: center;
274 border-bottom: 1px solid #444;
275}
276/*********** forms and table padding ***********/
277form, table {
278 padding: 5px 10px 5px 10px;
279}
280
281/*********** code blocks ***********/
282code {
283 padding: 3px 5px;
284 font-family: Andale Mono, monospace;
285 font-size: 0.9em;
286}
287
288/*********** left and right padding to quoted text ***********/
289blockquote {
290 background: #cccccc;
291 border-left: 30px transparent;
292 border-right: 30px transparent;
293 /*padding: 5px;*/
294}
295
296input[type=text], input[type=password], textarea, select {
297 margin: 2px 15px 2px 5px;
298 width: 280px;
299 background: #fff;
300 color: #555;
301 border: 1px solid #dedede;
302 -moz-border-radius: 2px;
303 -webkit-border-radius: 2px;
304 border-radius: 2px;
305 font-size: 12px;
306}
307
308input[type=text], input[type=password] {
309 height: 16px;
310}
311
312select[multiple=multiple] {
313 height: 90px;
314}
315
316input[type=submit], input[type=button], button {
317 margin: 0px;
318 /*width: 85px;*/
319 height: 22px;
320 background: #eaeaea;
321 color: #555;
322 border: 1px solid #dedede;
323 -moz-border-radius: 2px;
324 -webkit-border-radius: 2px;
325 border-radius: 2px;
326}
327
328fieldset { border: 1px solid #dedede; padding: 6px; }
329legend { font-weight: bold; }
330
331input:focus, textarea:focus { background: #fafafa; }
332
333p {text-indent:30px;}
334
335p, blockquote {
336 margin-bottom: 10px;
337}
338
339h1,h2,h3,h4,h5,h6 { line-height: 170%; }
340h1 {font-size: 2.0em;}
341h2 {font-size: 1.8em;}
342h3 {font-size: 1.4em;}
343h4 {font-size: 1.2em;}
344h5 {font-size: 1.0em;}
345h6 {font-size: 0.8em;}
346
347/*********** page layout alignment, width and padding ***********/
348/*body {background-color: #000;}*/
349#wrapper {width: 900px;}
350
351#wrapper {margin: 0 auto;}
352#wrapper {background-color: #fff; padding: 5px;}
353#statusbar { margin: 5px 0px 20px 0px;}
354#footer {
355 margin-top: 30px;
356 padding: 5px;
357}
358#statusbar, #footer {
359 background: #eaeaea;
360 border-top: 1px #aaa solid;
361}
362#logo {
363 width: 68px;
364 height: 62px;
365 background: url(../images/logo.png);
366}
367#appname {
368 color: #cccccc;
369}
370
371#right_sidebar { width: 160px; float:right; display: none; }
372#left_sidebar { width: 160px; float:left; display: none; }
373#content { float: left; /*width: 740px;*//*width: 63%;*/ /*width: 640px; float:left;*/ } /* uncomment this if you are going to use sidebars */
374
375.auth_navbar {
376 top: 0px;
377 float: right;
378 padding: 3px 10px 3px 10px;
379}
380
381/*********** web2py specific ***********/
382div.flash {
383 font-weight: bold;
384 display: none;
385 position: fixed;
386 padding: 10px;
387 top: 40px;
388 right: 10px;
389 min-width: 280px;
390 opacity: 0.85;
391 margin: 0px 0px 10px 10px;
392 color: #fff;
393 vertical-align: middle;
394 cursor: pointer;
395 background: #000;
396 border: 2px solid #fff;
397 -moz-border-radius: 5px;
398 -webkit-border-radius: 5px;
399 z-index: 2;
400}
401
402div.error {
403 background-color: red;
404 color: white;
405 padding: 3px;
406}
407
408/***************************
409 * CSS 3 Buttons
410 * http://github.com/michenriksen/css3buttons
411 * created by Michael Henriksen
412 * License: Unlicense
413 *
414 * *******************/
415
416a.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; }
417a.button.primary { font-weight: bold }
418a.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; }
419a.button:active,
420a.button.active { background-position: 0 -81px; border-color: #347BBA; background-color: #0F5EA2; color: #FFFFFF; text-shadow: none; }
421a.button:active { top: 1px }
422a.button.negative:hover { color: #FFFFFF; background-position: 0 -121px; background-color: #D84743; border-color: #911D1B; }
423a.button.negative:active,
424a.button.negative.active { background-position: 0 -161px; background-color: #A5211E; border-color: #911D1B; }
425a.button.pill { -webkit-border-radius: 19px; -moz-border-radius: 19px; border-radius: 19px; padding: 2px 10px 2px 10px; }
426a.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; }
427a.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; }
428a.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; }
429a.button.left:active,
430a.button.middle:active,
431a.button.right:active { top: 0px }
432a.button.big { font-size: 16px; padding-left: 17px; padding-right: 17px; }
433a.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; }
434a.big.button span.icon { top: 0px }
435a.button span.icon.book { background-position: 0 0 }
436a.button:hover span.icon.book { background-position: 0 -15px }
437a.button span.icon.calendar { background-position: 0 -30px }
438a.button:hover span.icon.calendar { background-position: 0 -45px }
439a.button span.icon.chat { background-position: 0 -60px }
440a.button:hover span.icon.chat { background-position: 0 -75px }
441a.button span.icon.check { background-position: 0 -90px }
442a.button:hover span.icon.check { background-position: 0 -103px }
443a.button span.icon.clock { background-position: 0 -116px }
444a.button:hover span.icon.clock { background-position: 0 -131px }
445a.button span.icon.cog { background-position: 0 -146px }
446a.button:hover span.icon.cog { background-position: 0 -161px }
447a.button span.icon.comment { background-position: 0 -176px }
448a.button:hover span.icon.comment { background-position: 0 -190px }
449a.button span.icon.cross { background-position: 0 -204px }
450a.button:hover span.icon.cross { background-position: 0 -219px }
451a.button span.icon.downarrow { background-position: 0 -234px }
452a.button:hover span.icon.downarrow { background-position: 0 -249px }
453a.button span.icon.fork { background-position: 0 -264px }
454a.button:hover span.icon.fork { background-position: 0 -279px }
455a.button span.icon.heart { background-position: 0 -294px }
456a.button:hover span.icon.heart { background-position: 0 -308px }
457a.button span.icon.home { background-position: 0 -322px }
458a.button:hover span.icon.home { background-position: 0 -337px }
459a.button span.icon.key { background-position: 0 -352px }
460a.button:hover span.icon.key { background-position: 0 -367px }
461a.button span.icon.leftarrow { background-position: 0 -382px }
462a.button:hover span.icon.leftarrow { background-position: 0 -397px }
463a.button span.icon.lock { background-position: 0 -412px }
464a.button:hover span.icon.lock { background-position: 0 -427px }
465a.button span.icon.loop { background-position: 0 -442px }
466a.button:hover span.icon.loop { background-position: 0 -457px }
467a.button span.icon.magnifier { background-position: 0 -472px }
468a.button:hover span.icon.magnifier { background-position: 0 -487px }
469a.button span.icon.mail { background-position: 0 -502px }
470a.button:hover span.icon.mail { background-position: 0 -514px }
471a.button span.icon.move { background-position: 0 -526px }
472a.button:hover span.icon.move { background-position: 0 -541px }
473a.button span.icon.pen { background-position: 0 -556px }
474a.button:hover span.icon.pen { background-position: 0 -571px }
475a.button span.icon.pin { background-position: 0 -586px }
476a.button:hover span.icon.pin { background-position: 0 -601px }
477a.button span.icon.plus { background-position: 0 -616px }
478a.button:hover span.icon.plus { background-position: 0 -631px }
479a.button span.icon.reload { background-position: 0 -646px }
480a.button:hover span.icon.reload { background-position: 0 -660px }
481a.button span.icon.rightarrow { background-position: 0 -674px }
482a.button:hover span.icon.rightarrow { background-position: 0 -689px }
483a.button span.icon.rss { background-position: 0 -704px }
484a.button:hover span.icon.rss { background-position: 0 -719px }
485a.button span.icon.tag { background-position: 0 -734px }
486a.button:hover span.icon.tag { background-position: 0 -749px }
487a.button span.icon.trash { background-position: 0 -764px }
488a.button:hover span.icon.trash { background-position: 0 -779px }
489a.button span.icon.unlock { background-position: 0 -794px }
490a.button:hover span.icon.unlock { background-position: 0 -809px }
491a.button span.icon.uparrow { background-position: 0 -824px }
492a.button:hover span.icon.uparrow { background-position: 0 -839px }
493a.button span.icon.user { background-position: 0 -854px }
494a.button:hover span.icon.user { background-position: 0 -869px }
495
496
497/*****************************************************
498 * HERE YOU CAN START TO WRITE YOUR OWN DIVS
499 */
500
501body {
502 background: #f3f3f3;
503 font-family: Arial, sans-serif;
504 color: #444;
505}
506
507.clear {
508 clear: both;
509}
510
511strong {
512 font-weight: bold;
513}
514
515a.button {
516 color: #fff;
517 border: 0;
518 border-radius: 5px;
519 -moz-border-radius: 5px;
520 -webkit-border-radius: 5px;
521 font-weight: bold;
522 cursor: pointer;
523 padding: 10px;
524 display: block;
525 text-decoration: none;
526 text-align: center;
527 margin: 20px 0 20px 10px;
528 float: right;
529
530}
531
532a.button.whistblower {
533 background: #0a70b4;
534 width: 200px;
535}
536
537a.button.addtarget {
538 background: #444;
539 width: 100px;
540}
541
542input[type=submit]{
543 background: #444;
544 color: #fff;
545 border: 0;
546 border-radius: 5px;
547 -moz-border-radius: 5px;
548 -webkit-border-radius: 5px;
549 font-weight: bold;
550 cursor: pointer;
551 padding: 5px 10px;
552 display: block;
553 text-decoration: none;
554 text-align: center;
555 margin: 10px 0;
556 cursor: pointer;
557 font-size: 14px;
558}
559
560
561p.tulip{
562 background: #444;
563 color: #fff;
564 border: 0;
565 border-radius: 5px;
566 -moz-border-radius: 5px;
567 -webkit-border-radius: 5px;
568 font-weight: bold;
569 padding: 20px;
570 display: block;
571 text-decoration: none;
572 text-align: center;
573 margin: 10px 0 20px 0;
574 font-size: 24px;
575 width: 300px;
576}
577
578
579#container {
580 background: #fff;
581 width: 880px;
582 padding: 40px;
583 margin: 20px auto;
584 -moz-box-shadow: 0px 0px 3px #dedede;
585 -webkit-box-shadow: 5px 5px 0px #dedede;
586 box-shadow: 0px 0px 10px #d0d0d0;
587}
588
589#container img.ribbon {
590 float: right;
591 margin-left: 20px;
592 margin-right: -20px;
593 margin-top: -45px;
594}
595
596
597#header {
598 padding-bottom: 40px;
599}
600
601ul#navigation {
602 float: right;
603}
604
605ul#navigation li {
606 float: left;
607 margin-left: 10px;
608}
609
610ul#navigation a {
611 color: #444;
612 text-decoration: none;
613 font-weight: bold;
614 font-size: 14px;
615}
616
617
618#content h1 {
619 font-size: 28px;
620 margin-bottom: 10px;
621 text-transform: uppercase;
622 font-weight: bold;
623}
624
625#content h1 span {
626 font-weight: normal;
627 text-transform: none;
628}
629
630#content p.intro {
631 line-height: 18px;
632 text-align: justify;
633 margin-bottom: 20px;
634}
635
636#content .box {
637 background: #444;
638 width: 320px;
639 height: 320px;
640 margin: 20px 0;
641 float: left;
642 padding: 40px;
643}
644
645#content .box:nth-child(even) {
646 margin-left: 40px;
647}
648
649#content .box h2 {
650 text-transform: uppercase;
651 color: #fff;
652 font-weight: bold;
653 font-size: 24px;
654}
655
656#content .box h2 span {
657 font-size: 48px;
658}
659
660#content .box a {
661 display: block;
662 color: #fff;
663 text-decoration: none;
664 text-transform: uppercase;
665 font-weight: bold;
666 float: right;
667 margin-top: 32px;
668 background: #0a70b4;
669 padding: 10px;
670 border-radius:5px;
671 -webkit-border-radius:5px;
672 -moz-border-radius:5px;
673}
674
675#content .box span.info {
676 display: block;
677 color: #fff;
678 text-decoration: none;
679 text-transform: uppercase;
680 font-weight: bold;
681 float: right;
682 margin-top: 42px;
683 font-style: italic;
684 padding-top: 0px;
685}
686
687#content .box img {
688 margin-top: 30px;
689}
690
691
692#content form table td {
693 padding: 5px 5px 10px 5px;
694 vertical-align: top;
695}
696
697#content form table td.w2p_fl {
698 font-size: 13px;
699 font-weight: bold;
700}
701
702#content form label {
703 font-size: 13px;
704}
705
706
707#content form input.string {
708 border: 1px solid #ddd;
709 padding: 5px;
710 width: 350px;
711 font-size: 13px;
712}
713
714#content form textarea {
715 border: 1px solid #ddd;
716 padding: 5px;
717 width: 350px;
718 font-size: 13px;
719}
720
721#content form .error {
722 padding: 5px;
723 width: 350px;
724 font-size: 13px;
725 color: #fff;
726 background: #e60000;
727 margin-top: 5px;
728 font-weight: bold;
729}
730
731#content table.targetlist {
732 width: 100%;
733 font-size: 14px;
734}
735
736#content table.targetlist th {
737 //background: #005ea3;
738 background: #444;
739 color: #fff;
740 border: 1px solid #fff;
741 border-bottom: 2px solid #fff;
742 font-weight: bold;
743 padding: 5px;
744 text-align: left;
745}
746
747#content table.targetlist td {
748 border: 1px solid #fff;
749 border-bottom: 2px solid #fff;
750 padding: 5px;
751 background: #ededed;
752 text-align: left;
753}
754
755#content table.targetlist tr.odd td {
756 background: #f5f5f5;
757}
758
759#content table.targetlist td.delete {
760 text-align: center;
761}
762
763#content table.targetlist td.delete button {
764 background: #e60000;
765 color: #fff;
766 border: 0;
767 border-radius: 3px;
768 -moz-border-radius: 3px;
769 -webkit-border-radius: 3px;
770 font-weight: bold;
771 cursor: pointer;
772}
773
774#content table.targetlist .downloads {
775 width: 70px;
776 text-align: center;
777}
778
779.entry {
780 width: 500px;
781 margin: 0 auto;
782 padding: 40px;
783 background: #f4f4f4;
784}
785
786.entry h2, .entry h3 {
787 font-weight: bold;
788 font-size: 18px;
789 margin-bottom: 5px;
790}
791
792.entry h2.title {
793 font-size: 28px;
794}
795
796.entry h3 {
797 margin-bottom: 20px;
798 padding-top: 5px;
799}
800
801
802.entry p {
803 font-size: 14px;
804}
805
806.entry li {
807 padding: 7px 0 7px 30px;
808 font-size: 14px;
809}
810
811
812.material li.zip {
813 background: url('/globaleaks/static/images/box_16x16.png') no-repeat left center;
814}
815
816.material li.img {
817 background: url('/globaleaks/static/images/image_16x16.png') no-repeat left center;
818}
819
820.material li.pdf {
821 background: url('/globaleaks/static/images/document_fill_16x16.png') no-repeat left center;
822}
823
824.material a {
825 display: block;
826 color: #fff;
827 text-decoration: none;
828 text-transform: uppercase;
829 font-weight: bold;
830 font-size: 14px;
831 float: left;
832 margin: 20px 10px 0 0;
833 padding: 10px 10px 10px 30px;
834 border-radius:5px;
835 -webkit-border-radius:5px;
836 -moz-border-radius:5px;
837}
838
839.material a.zip {
840 background: #0a70b4 url('/globaleaks/static/images/icon-download-zip.png') no-repeat 5px center;
841}
842
843.material a.crypt {
844 background: #0a70b4 url('/globaleaks/static/images/icon-download-crypt.png') no-repeat 5px center;
845}
846
847.downloads-left {
848 font-size: 18px;
849 float: left;
850 background: #444;
851 padding: 5px 10px;
852 color: #fff;
853 margin: 0 10px 10px 0;
854}
855
856.downloads-left.full {
857 background: #e60000;
858}
859
860
861.total-clicks {
862 font-size: 18px;
863 float: left;
864 background: #444;
865 padding: 5px 10px;
866 color: #fff;
867}
868
869.entry .material {
870 padding: 20px;
871 background: #444;
872 color: #fff;
873 margin: 20px 0;
874}
875
876
877/*
878 * Media queries for responsive design
879 */
880
881@media all and (orientation:portrait) {
882 /* Style adjustments for portrait mode goes here */
883
884}
885
886@media all and (orientation:landscape) {
887 /* Style adjustments for landscape mode goes here */
888
889}
890
891/* Grade-A Mobile Browsers (Opera Mobile, iPhone Safari, Android Chrome)
892 Consider this: www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/ */
893@media screen and (max-device-width: 480px) {
894
895
896 /* Uncomment if you don't want iOS and WinMobile to mobile-optimize the text for you
897 j.mp/textsizeadjust
898 html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
899}
900
901
902/*
903 * print styles
904 * inlined to avoid required HTTP connection www.phpied.com/delay-loading-your-print-css/
905 */
906@media print {
907 * { background: transparent !important; color: #444 !important; text-shadow: none !important; }
908 a, a:visited { color: #444 !important; text-decoration: underline; }
909 a:after { content: " (" attr(href) ")"; }
910 abbr:after { content: " (" attr(title) ")"; }
911 .ir a:after { content: ""; } /* Don't show links for images */
912 pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
913 thead { display: table-header-group; } /* css-discuss.incutio.com/wiki/Printing_Tables */
914 tr, img { page-break-inside: avoid; }
915 @page { margin: 0.5cm; }
916 p, h2, h3 { orphans: 3; widows: 3; }
917 h2, h3{ page-break-after: avoid; }
918}
0919
=== added file 'applications/globaleaks/static/css/semifixed.css'
--- applications/globaleaks/static/css/semifixed.css 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/static/css/semifixed.css 2011-09-02 13:53:25 +0000
@@ -0,0 +1,435 @@
1@charset "UTF-8";
2html, body, div, span, object, iframe,
3h1, h2, h3, h4, h5, h6, p, blockquote, pre,
4abbr, address, cite, code,
5del, dfn, em, img, ins, kbd, q, samp,
6small, strong, sub, sup, var,
7b, i,
8dl, dt, dd, ol, ul, li,
9fieldset, form, label, legend,
10table, caption, tbody, tfoot, thead, tr, th, td,
11article, aside, canvas, details, figcaption, figure,
12footer, header, hgroup, menu, nav, section, summary,
13time, mark, audio, video {
14 margin:0;
15 padding:0;
16 border:0;
17 outline:0;
18 font: inherit;
19 font-size:100%;
20 vertical-align:baseline;
21 background:transparent;
22}
23
24article, aside, details, figcaption, figure,
25footer, header, hgroup, menu, nav, section {
26 display:block;
27}
28
29nav ul { list-style:none; }
30
31blockquote, q { quotes:none; }
32
33blockquote:before, blockquote:after,
34q:before, q:after { content:''; content:none; }
35
36a { margin:0; padding:0; font-size:100%; vertical-align:baseline; background:transparent; }
37a:hover { text-decoration: underline }
38
39ins { background-color:#ff9; color:#000; text-decoration:none; }
40
41mark { background-color:#ff9; color:#000; font-style:italic; font-weight:bold; }
42
43del { text-decoration: line-through; }
44
45abbr[title], dfn[title] { border-bottom:1px dotted #000; cursor:help; }
46
47/* tables still need cellspacing="0" in the markup */
48table { border-collapse:collapse; border-spacing:0; }
49
50hr { display:block; height:1px; border:0; border-top:1px solid #ccc; margin:1em 0; padding:0; }
51
52input, select { vertical-align:middle; }
53
54ol, ul {
55 list-style: none;
56}
57
58body { line-height: 1; font:13px/1.231 sans-serif; *font-size:small; } /* hack retained to preserve specificity */
59
60body {
61 background: #f3f3f3;
62 font-family: Arial, sans-serif;
63 color: #444;
64}
65
66.clear {
67 clear: both;
68}
69
70strong {
71 font-weight: bold;
72}
73
74a.button {
75 color: #fff;
76 border: 0;
77 border-radius: 5px;
78 -moz-border-radius: 5px;
79 -webkit-border-radius: 5px;
80 font-weight: bold;
81 cursor: pointer;
82 padding: 10px;
83 display: block;
84 text-decoration: none;
85 text-align: center;
86 margin: 20px 0 20px 10px;
87 float: right;
88
89}
90
91a.button.whistblower {
92 background: #0a70b4;
93 width: 200px;
94}
95
96a.button.addtarget {
97 background: #444;
98 width: 100px;
99}
100
101input[type=submit]{
102 background: #444;
103 color: #fff;
104 border: 0;
105 border-radius: 5px;
106 -moz-border-radius: 5px;
107 -webkit-border-radius: 5px;
108 font-weight: bold;
109 cursor: pointer;
110 padding: 5px 10px;
111 display: block;
112 text-decoration: none;
113 text-align: center;
114 margin: 10px 0;
115 cursor: pointer;
116 font-size: 14px;
117}
118
119
120p.tulip{
121 background: #444;
122 color: #fff;
123 border: 0;
124 border-radius: 5px;
125 -moz-border-radius: 5px;
126 -webkit-border-radius: 5px;
127 font-weight: bold;
128 padding: 20px;
129 display: block;
130 text-decoration: none;
131 text-align: center;
132 margin: 10px 0 20px 0;
133 font-size: 24px;
134 width: 300px;
135}
136
137
138#container {
139 background: #fff;
140 width: 880px;
141 padding: 40px;
142 margin: 20px auto;
143 -moz-box-shadow: 0px 0px 3px #dedede;
144 -webkit-box-shadow: 5px 5px 0px #dedede;
145 box-shadow: 0px 0px 10px #d0d0d0;
146}
147
148#container img.ribbon {
149 float: right;
150 margin-left: 20px;
151 margin-right: -20px;
152 margin-top: -45px;
153}
154
155
156#header {
157 padding-bottom: 40px;
158}
159
160ul#navigation {
161 float: right;
162}
163
164ul#navigation li {
165 float: left;
166 margin-left: 10px;
167}
168
169ul#navigation a {
170 color: #444;
171 text-decoration: none;
172 font-weight: bold;
173 font-size: 14px;
174}
175
176
177#content h1 {
178 font-size: 28px;
179 margin-bottom: 10px;
180 text-transform: uppercase;
181 font-weight: bold;
182}
183
184#content h1 span {
185 font-weight: normal;
186 text-transform: none;
187}
188
189#content p.intro {
190 line-height: 18px;
191 text-align: justify;
192 margin-bottom: 20px;
193}
194
195#content .box {
196 background: #444;
197 width: 320px;
198 height: 320px;
199 margin: 20px 0;
200 float: left;
201 padding: 40px;
202}
203
204#content .box:nth-child(even) {
205 margin-left: 40px;
206}
207
208#content .box h2 {
209 text-transform: uppercase;
210 color: #fff;
211 font-weight: bold;
212 font-size: 24px;
213}
214
215#content .box h2 span {
216 font-size: 48px;
217}
218
219#content .box a {
220 display: block;
221 color: #fff;
222 text-decoration: none;
223 text-transform: uppercase;
224 font-weight: bold;
225 float: right;
226 margin-top: 32px;
227 background: #0a70b4;
228 padding: 10px;
229 border-radius:5px;
230 -webkit-border-radius:5px;
231 -moz-border-radius:5px;
232}
233
234#content .box span.info {
235 display: block;
236 color: #fff;
237 text-decoration: none;
238 text-transform: uppercase;
239 font-weight: bold;
240 float: right;
241 margin-top: 42px;
242 font-style: italic;
243 padding-top: 0px;
244}
245
246#content .box img {
247 margin-top: 30px;
248}
249
250
251#content form table td {
252 padding: 5px 5px 10px 5px;
253 vertical-align: top;
254}
255
256#content form table td.w2p_fl {
257 font-size: 13px;
258 font-weight: bold;
259}
260
261#content form label {
262 font-size: 13px;
263}
264
265
266#content form input.string {
267 border: 1px solid #ddd;
268 padding: 5px;
269 width: 350px;
270 font-size: 13px;
271}
272
273#content form textarea {
274 border: 1px solid #ddd;
275 padding: 5px;
276 width: 350px;
277 font-size: 13px;
278}
279
280#content form .error {
281 padding: 5px;
282 width: 350px;
283 font-size: 13px;
284 color: #fff;
285 background: #e60000;
286 margin-top: 5px;
287 font-weight: bold;
288}
289
290#content table.targetlist {
291 width: 100%;
292 font-size: 14px;
293}
294
295#content table.targetlist th {
296 //background: #005ea3;
297 background: #444;
298 color: #fff;
299 border: 1px solid #fff;
300 border-bottom: 2px solid #fff;
301 font-weight: bold;
302 padding: 5px;
303 text-align: left;
304}
305
306#content table.targetlist td {
307 border: 1px solid #fff;
308 border-bottom: 2px solid #fff;
309 padding: 5px;
310 background: #ededed;
311 text-align: left;
312}
313
314#content table.targetlist tr.odd td {
315 background: #f5f5f5;
316}
317
318#content table.targetlist td.delete {
319 text-align: center;
320}
321
322#content table.targetlist td.delete button {
323 background: #e60000;
324 color: #fff;
325 border: 0;
326 border-radius: 3px;
327 -moz-border-radius: 3px;
328 -webkit-border-radius: 3px;
329 font-weight: bold;
330 cursor: pointer;
331}
332
333#content table.targetlist .downloads {
334 width: 70px;
335 text-align: center;
336}
337
338.entry {
339 width: 500px;
340 margin: 0 auto;
341 padding: 40px;
342 background: #f4f4f4;
343}
344
345.entry h2, .entry h3 {
346 font-weight: bold;
347 font-size: 18px;
348 margin-bottom: 5px;
349}
350
351.entry h2.title {
352 font-size: 28px;
353}
354
355.entry h3 {
356 margin-bottom: 20px;
357 padding-top: 5px;
358}
359
360
361.entry p {
362 font-size: 14px;
363}
364
365.entry li {
366 padding: 7px 0 7px 30px;
367 font-size: 14px;
368}
369
370
371.material li.zip {
372 background: url('/globaleaks/static/images/box_16x16.png') no-repeat left center;
373}
374
375.material li.img {
376 background: url('/globaleaks/static/images/image_16x16.png') no-repeat left center;
377}
378
379.material li.pdf {
380 background: url('/globaleaks/static/images/document_fill_16x16.png') no-repeat left center;
381}
382
383.material a {
384 display: block;
385 color: #fff;
386 text-decoration: none;
387 text-transform: uppercase;
388 font-weight: bold;
389 font-size: 14px;
390 float: left;
391 margin: 20px 10px 0 0;
392 padding: 10px 10px 10px 30px;
393 border-radius:5px;
394 -webkit-border-radius:5px;
395 -moz-border-radius:5px;
396}
397
398.material a.zip {
399 background: #0a70b4 url('/globaleaks/static/images/icon-download-zip.png') no-repeat 5px center;
400}
401
402.material a.crypt {
403 background: #0a70b4 url('/globaleaks/static/images/icon-download-crypt.png') no-repeat 5px center;
404}
405
406.downloads-left {
407 font-size: 18px;
408 float: left;
409 background: #444;
410 padding: 5px 10px;
411 color: #fff;
412 margin: 0 10px 10px 0;
413}
414
415.downloads-left.full {
416 background: #e60000;
417}
418
419
420.total-clicks {
421 font-size: 18px;
422 float: left;
423 background: #444;
424 padding: 5px 10px;
425 color: #fff;
426}
427
428.entry .material {
429 padding: 20px;
430 background: #444;
431 color: #fff;
432 margin: 20px 0;
433}
434
435
0436
=== added file 'applications/globaleaks/static/images/background-big.png'
1Binary 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 differ437Binary 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
=== added file 'applications/globaleaks/static/images/background.png'
2Binary 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 differ438Binary 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
=== added file 'applications/globaleaks/static/images/box_16x16.png'
3Binary 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 differ439Binary 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
=== added file 'applications/globaleaks/static/images/demo_node_maintainer.png'
4Binary 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 differ440Binary 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
=== added file 'applications/globaleaks/static/images/demo_target.png'
5Binary 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 differ441Binary 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
=== added file 'applications/globaleaks/static/images/demo_whistleblower1.png'
6Binary 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 differ442Binary 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
=== added file 'applications/globaleaks/static/images/document_fill_16x16.png'
7Binary 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 differ443Binary 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
=== modified file 'applications/globaleaks/static/images/globaleaks.png'
8Binary 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 differ444Binary 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
=== added file 'applications/globaleaks/static/images/icon-admin.png'
9Binary 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 differ445Binary 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
=== added file 'applications/globaleaks/static/images/icon-download-crypt.png'
10Binary 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 differ446Binary 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
=== added file 'applications/globaleaks/static/images/icon-download-zip.png'
11Binary 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 differ447Binary 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
=== added file 'applications/globaleaks/static/images/icon-report.png'
12Binary 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 differ448Binary 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
=== added file 'applications/globaleaks/static/images/icon-target.png'
13Binary 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 differ449Binary 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
=== added file 'applications/globaleaks/static/images/icon-whistleblower.png'
14Binary 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 differ450Binary 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
=== added file 'applications/globaleaks/static/images/image_16x16.png'
15Binary 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 differ451Binary 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
=== added file 'applications/globaleaks/static/images/prototype.png'
16Binary 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 differ452Binary 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
=== added file 'applications/globaleaks/static/images/ribbon.png'
17Binary 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 differ453Binary 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
=== added file 'applications/globaleaks/static/images/whistleblower2.png'
18Binary 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 differ454Binary 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
=== added file 'applications/globaleaks/static/js/AlteHaas_700.font.js'
--- applications/globaleaks/static/js/AlteHaas_700.font.js 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/static/js/AlteHaas_700.font.js 2011-09-02 13:53:25 +0000
@@ -0,0 +1,19 @@
1/*!
2 * The following copyright notice may not be removed under any circumstances.
3 *
4 * Copyright:
5 * Copyright (c) 2007 by Yann Le Coroller. All rights reserved.
6 *
7 * Description:
8 * Copyright (c) 2007 by Yann Le Coroller. All rights reserved.
9 *
10 * Manufacturer:
11 * Yann Le Coroller
12 *
13 * Designer:
14 * Yann Le Coroller
15 *
16 * Vendor URL:
17 * http://www.kub.fr/
18 */
19Cufon.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}}});
020
=== added file 'applications/globaleaks/static/js/cufon.js'
--- applications/globaleaks/static/js/cufon.js 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/static/js/cufon.js 2011-09-02 13:53:25 +0000
@@ -0,0 +1,7 @@
1/*
2 * Copyright (c) 2009 Simo Kinnunen.
3 * Licensed under the MIT license.
4 *
5 * @version 1.09i
6 */
7var 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}})());
0\ No newline at end of file8\ No newline at end of file
19
=== added directory 'applications/globaleaks/static/js/fancybox'
=== added file 'applications/globaleaks/static/js/fancybox/blank.gif'
2Binary 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 differ10Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_close.png'
3Binary 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 differ11Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_loading.png'
4Binary 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 differ12Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_nav_left.png'
5Binary 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 differ13Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_nav_right.png'
6Binary 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 differ14Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_e.png'
7Binary 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 differ15Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_n.png'
8Binary 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 differ16Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_ne.png'
9Binary 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 differ17Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_nw.png'
10Binary 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 differ18Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_s.png'
11Binary 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 differ19Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_se.png'
12Binary 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 differ20Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_sw.png'
13Binary 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 differ21Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_shadow_w.png'
14Binary 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 differ22Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_title_left.png'
15Binary 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 differ23Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_title_main.png'
16Binary 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 differ24Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_title_over.png'
17Binary 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 differ25Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancy_title_right.png'
18Binary 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 differ26Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancybox-x.png'
19Binary 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 differ27Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancybox-y.png'
20Binary 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 differ28Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/fancybox.png'
21Binary 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 differ29Binary 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
=== added file 'applications/globaleaks/static/js/fancybox/jquery.easing-1.3.pack.js'
--- applications/globaleaks/static/js/fancybox/jquery.easing-1.3.pack.js 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/static/js/fancybox/jquery.easing-1.3.pack.js 2011-09-02 13:53:25 +0000
@@ -0,0 +1,72 @@
1/*
2 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
3 *
4 * Uses the built in easing capabilities added In jQuery 1.1
5 * to offer multiple easing options
6 *
7 * TERMS OF USE - jQuery Easing
8 *
9 * Open source under the BSD License.
10 *
11 * Copyright © 2008 George McGinley Smith
12 * All rights reserved.
13 *
14 * Redistribution and use in source and binary forms, with or without modification,
15 * are permitted provided that the following conditions are met:
16 *
17 * Redistributions of source code must retain the above copyright notice, this list of
18 * conditions and the following disclaimer.
19 * Redistributions in binary form must reproduce the above copyright notice, this list
20 * of conditions and the following disclaimer in the documentation and/or other materials
21 * provided with the distribution.
22 *
23 * Neither the name of the author nor the names of contributors may be used to endorse
24 * or promote products derived from this software without specific prior written permission.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
27 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
28 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
31 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
32 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
33 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
34 * OF THE POSSIBILITY OF SUCH DAMAGE.
35 *
36*/
37
38// t: current time, b: begInnIng value, c: change In value, d: duration
39eval(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,{}))
40
41/*
42 *
43 * TERMS OF USE - EASING EQUATIONS
44 *
45 * Open source under the BSD License.
46 *
47 * Copyright © 2001 Robert Penner
48 * All rights reserved.
49 *
50 * Redistribution and use in source and binary forms, with or without modification,
51 * are permitted provided that the following conditions are met:
52 *
53 * Redistributions of source code must retain the above copyright notice, this list of
54 * conditions and the following disclaimer.
55 * Redistributions in binary form must reproduce the above copyright notice, this list
56 * of conditions and the following disclaimer in the documentation and/or other materials
57 * provided with the distribution.
58 *
59 * Neither the name of the author nor the names of contributors may be used to endorse
60 * or promote products derived from this software without specific prior written permission.
61 *
62 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
63 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
64 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
65 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
66 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
67 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
68 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
69 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
70 * OF THE POSSIBILITY OF SUCH DAMAGE.
71 *
72 */
073
=== added file 'applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.css'
--- applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.css 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.css 2011-09-02 13:53:25 +0000
@@ -0,0 +1,359 @@
1/*
2 * FancyBox - jQuery Plugin
3 * Simple and fancy lightbox alternative
4 *
5 * Examples and documentation at: http://fancybox.net
6 *
7 * Copyright (c) 2008 - 2010 Janis Skarnelis
8 * 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.
9 *
10 * Version: 1.3.4 (11/11/2010)
11 * Requires: jQuery v1.3+
12 *
13 * Dual licensed under the MIT and GPL licenses:
14 * http://www.opensource.org/licenses/mit-license.php
15 * http://www.gnu.org/licenses/gpl.html
16 */
17
18#fancybox-loading {
19 position: fixed;
20 top: 50%;
21 left: 50%;
22 width: 40px;
23 height: 40px;
24 margin-top: -20px;
25 margin-left: -20px;
26 cursor: pointer;
27 overflow: hidden;
28 z-index: 1104;
29 display: none;
30}
31
32#fancybox-loading div {
33 position: absolute;
34 top: 0;
35 left: 0;
36 width: 40px;
37 height: 480px;
38 background-image: url('fancybox.png');
39}
40
41#fancybox-overlay {
42 position: absolute;
43 top: 0;
44 left: 0;
45 width: 100%;
46 z-index: 1100;
47 display: none;
48}
49
50#fancybox-tmp {
51 padding: 0;
52 margin: 0;
53 border: 0;
54 overflow: auto;
55 display: none;
56}
57
58#fancybox-wrap {
59 position: absolute;
60 top: 0;
61 left: 0;
62 padding: 20px;
63 z-index: 1101;
64 outline: none;
65 display: none;
66}
67
68#fancybox-outer {
69 position: relative;
70 width: 100%;
71 height: 100%;
72 background: #fff;
73}
74
75#fancybox-content {
76 width: 0;
77 height: 0;
78 padding: 0;
79 outline: none;
80 position: relative;
81 overflow: hidden;
82 z-index: 1102;
83 border: 0px solid #fff;
84}
85
86#fancybox-hide-sel-frame {
87 position: absolute;
88 top: 0;
89 left: 0;
90 width: 100%;
91 height: 100%;
92 background: transparent;
93 z-index: 1101;
94}
95
96#fancybox-close {
97 position: absolute;
98 top: -15px;
99 right: -15px;
100 width: 30px;
101 height: 30px;
102 background: transparent url('fancybox.png') -40px 0px;
103 cursor: pointer;
104 z-index: 1103;
105 display: none;
106}
107
108#fancybox-error {
109 color: #444;
110 font: normal 12px/20px Arial;
111 padding: 14px;
112 margin: 0;
113}
114
115#fancybox-img {
116 width: 100%;
117 height: 100%;
118 padding: 0;
119 margin: 0;
120 border: none;
121 outline: none;
122 line-height: 0;
123 vertical-align: top;
124}
125
126#fancybox-frame {
127 width: 100%;
128 height: 100%;
129 border: none;
130 display: block;
131}
132
133#fancybox-left, #fancybox-right {
134 position: absolute;
135 bottom: 0px;
136 height: 100%;
137 width: 35%;
138 cursor: pointer;
139 outline: none;
140 background: transparent url('blank.gif');
141 z-index: 1102;
142 display: none;
143}
144
145#fancybox-left {
146 left: 0px;
147}
148
149#fancybox-right {
150 right: 0px;
151}
152
153#fancybox-left-ico, #fancybox-right-ico {
154 position: absolute;
155 top: 50%;
156 left: -9999px;
157 width: 30px;
158 height: 30px;
159 margin-top: -15px;
160 cursor: pointer;
161 z-index: 1102;
162 display: block;
163}
164
165#fancybox-left-ico {
166 background-image: url('fancybox.png');
167 background-position: -40px -30px;
168}
169
170#fancybox-right-ico {
171 background-image: url('fancybox.png');
172 background-position: -40px -60px;
173}
174
175#fancybox-left:hover, #fancybox-right:hover {
176 visibility: visible; /* IE6 */
177}
178
179#fancybox-left:hover span {
180 left: 20px;
181}
182
183#fancybox-right:hover span {
184 left: auto;
185 right: 20px;
186}
187
188.fancybox-bg {
189 position: absolute;
190 padding: 0;
191 margin: 0;
192 border: 0;
193 width: 20px;
194 height: 20px;
195 z-index: 1001;
196}
197
198#fancybox-bg-n {
199 top: -20px;
200 left: 0;
201 width: 100%;
202 background-image: url('fancybox-x.png');
203}
204
205#fancybox-bg-ne {
206 top: -20px;
207 right: -20px;
208 background-image: url('fancybox.png');
209 background-position: -40px -162px;
210}
211
212#fancybox-bg-e {
213 top: 0;
214 right: -20px;
215 height: 100%;
216 background-image: url('fancybox-y.png');
217 background-position: -20px 0px;
218}
219
220#fancybox-bg-se {
221 bottom: -20px;
222 right: -20px;
223 background-image: url('fancybox.png');
224 background-position: -40px -182px;
225}
226
227#fancybox-bg-s {
228 bottom: -20px;
229 left: 0;
230 width: 100%;
231 background-image: url('fancybox-x.png');
232 background-position: 0px -20px;
233}
234
235#fancybox-bg-sw {
236 bottom: -20px;
237 left: -20px;
238 background-image: url('fancybox.png');
239 background-position: -40px -142px;
240}
241
242#fancybox-bg-w {
243 top: 0;
244 left: -20px;
245 height: 100%;
246 background-image: url('fancybox-y.png');
247}
248
249#fancybox-bg-nw {
250 top: -20px;
251 left: -20px;
252 background-image: url('fancybox.png');
253 background-position: -40px -122px;
254}
255
256#fancybox-title {
257 font-family: Helvetica;
258 font-size: 12px;
259 z-index: 1102;
260}
261
262.fancybox-title-inside {
263 padding-bottom: 10px;
264 text-align: center;
265 color: #333;
266 background: #fff;
267 position: relative;
268}
269
270.fancybox-title-outside {
271 padding-top: 10px;
272 color: #fff;
273}
274
275.fancybox-title-over {
276 position: absolute;
277 bottom: 0;
278 left: 0;
279 color: #FFF;
280 text-align: left;
281}
282
283#fancybox-title-over {
284 padding: 10px;
285 background-image: url('fancy_title_over.png');
286 display: block;
287}
288
289.fancybox-title-float {
290 position: absolute;
291 left: 0;
292 bottom: -20px;
293 height: 32px;
294}
295
296#fancybox-title-float-wrap {
297 border: none;
298 border-collapse: collapse;
299 width: auto;
300}
301
302#fancybox-title-float-wrap td {
303 border: none;
304 white-space: nowrap;
305}
306
307#fancybox-title-float-left {
308 padding: 0 0 0 15px;
309 background: url('fancybox.png') -40px -90px no-repeat;
310}
311
312#fancybox-title-float-main {
313 color: #FFF;
314 line-height: 29px;
315 font-weight: bold;
316 padding: 0 0 3px 0;
317 background: url('fancybox-x.png') 0px -40px;
318}
319
320#fancybox-title-float-right {
321 padding: 0 0 0 15px;
322 background: url('fancybox.png') -55px -90px no-repeat;
323}
324
325/* IE6 */
326
327.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); }
328
329.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); }
330.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); }
331
332.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
333.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); }
334.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); }
335.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); }
336
337.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame {
338 height: expression(this.parentNode.clientHeight + "px");
339}
340
341#fancybox-loading.fancybox-ie6 {
342 position: absolute; margin-top: 0;
343 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');
344}
345
346#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); }
347
348/* IE6, IE7, IE8 */
349
350.fancybox-ie .fancybox-bg { background: transparent !important; }
351
352.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
353.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
354.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
355.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
356.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
357.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
358.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
359.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }
0\ No newline at end of file360\ No newline at end of file
1361
=== added file 'applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.js'
--- applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.js 1970-01-01 00:00:00 +0000
+++ applications/globaleaks/static/js/fancybox/jquery.fancybox-1.3.4.js 2011-09-02 13:53:25 +0000
@@ -0,0 +1,1156 @@
1/*
2 * FancyBox - jQuery Plugin
3 * Simple and fancy lightbox alternative
4 *
5 * Examples and documentation at: http://fancybox.net
6 *
7 * Copyright (c) 2008 - 2010 Janis Skarnelis
8 * 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.
9 *
10 * Version: 1.3.4 (11/11/2010)
11 * Requires: jQuery v1.3+
12 *
13 * Dual licensed under the MIT and GPL licenses:
14 * http://www.opensource.org/licenses/mit-license.php
15 * http://www.gnu.org/licenses/gpl.html
16 */
17
18;(function($) {
19 var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right,
20
21 selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [],
22
23 ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i,
24
25 loadingTimer, loadingFrame = 1,
26
27 titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('<div/>')[0], { prop: 0 }),
28
29 isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,
30
31 /*
32 * Private methods
33 */
34
35 _abort = function() {
36 loading.hide();
37
38 imgPreloader.onerror = imgPreloader.onload = null;
39
40 if (ajaxLoader) {
41 ajaxLoader.abort();
42 }
43
44 tmp.empty();
45 },
46
47 _error = function() {
48 if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) {
49 loading.hide();
50 busy = false;
51 return;
52 }
53
54 selectedOpts.titleShow = false;
55
56 selectedOpts.width = 'auto';
57 selectedOpts.height = 'auto';
58
59 tmp.html( '<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>' );
60
61 _process_inline();
62 },
63
64 _start = function() {
65 var obj = selectedArray[ selectedIndex ],
66 href,
67 type,
68 title,
69 str,
70 emb,
71 ret;
72
73 _abort();
74
75 selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox')));
76
77 ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts);
78
79 if (ret === false) {
80 busy = false;
81 return;
82 } else if (typeof ret == 'object') {
83 selectedOpts = $.extend(selectedOpts, ret);
84 }
85
86 title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || '';
87
88 if (obj.nodeName && !selectedOpts.orig) {
89 selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj);
90 }
91
92 if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) {
93 title = selectedOpts.orig.attr('alt');
94 }
95
96 href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null;
97
98 if ((/^(?:javascript)/i).test(href) || href == '#') {
99 href = null;
100 }
101
102 if (selectedOpts.type) {
103 type = selectedOpts.type;
104
105 if (!href) {
106 href = selectedOpts.content;
107 }
108
109 } else if (selectedOpts.content) {
110 type = 'html';
111
112 } else if (href) {
113 if (href.match(imgRegExp)) {
114 type = 'image';
115
116 } else if (href.match(swfRegExp)) {
117 type = 'swf';
118
119 } else if ($(obj).hasClass("iframe")) {
120 type = 'iframe';
121
122 } else if (href.indexOf("#") === 0) {
123 type = 'inline';
124
125 } else {
126 type = 'ajax';
127 }
128 }
129
130 if (!type) {
131 _error();
132 return;
133 }
134
135 if (type == 'inline') {
136 obj = href.substr(href.indexOf("#"));
137 type = $(obj).length > 0 ? 'inline' : 'ajax';
138 }
139
140 selectedOpts.type = type;
141 selectedOpts.href = href;
142 selectedOpts.title = title;
143
144 if (selectedOpts.autoDimensions) {
145 if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') {
146 selectedOpts.width = 'auto';
147 selectedOpts.height = 'auto';
148 } else {
149 selectedOpts.autoDimensions = false;
150 }
151 }
152
153 if (selectedOpts.modal) {
154 selectedOpts.overlayShow = true;
155 selectedOpts.hideOnOverlayClick = false;
156 selectedOpts.hideOnContentClick = false;
157 selectedOpts.enableEscapeButton = false;
158 selectedOpts.showCloseButton = false;
159 }
160
161 selectedOpts.padding = parseInt(selectedOpts.padding, 10);
162 selectedOpts.margin = parseInt(selectedOpts.margin, 10);
163
164 tmp.css('padding', (selectedOpts.padding + selectedOpts.margin));
165
166 $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() {
167 $(this).replaceWith(content.children());
168 });
169
170 switch (type) {
171 case 'html' :
172 tmp.html( selectedOpts.content );
173 _process_inline();
174 break;
175
176 case 'inline' :
177 if ( $(obj).parent().is('#fancybox-content') === true) {
178 busy = false;
179 return;
180 }
181
182 $('<div class="fancybox-inline-tmp" />')
183 .hide()
184 .insertBefore( $(obj) )
185 .bind('fancybox-cleanup', function() {
186 $(this).replaceWith(content.children());
187 }).bind('fancybox-cancel', function() {
188 $(this).replaceWith(tmp.children());
189 });
190
191 $(obj).appendTo(tmp);
192
193 _process_inline();
194 break;
195
196 case 'image':
197 busy = false;
198
199 $.fancybox.showActivity();
200
201 imgPreloader = new Image();
202
203 imgPreloader.onerror = function() {
204 _error();
205 };
206
207 imgPreloader.onload = function() {
208 busy = true;
209
210 imgPreloader.onerror = imgPreloader.onload = null;
211
212 _process_image();
213 };
214
215 imgPreloader.src = href;
216 break;
217
218 case 'swf':
219 selectedOpts.scrolling = 'no';
220
221 str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"><param name="movie" value="' + href + '"></param>';
222 emb = '';
223
224 $.each(selectedOpts.swf, function(name, val) {
225 str += '<param name="' + name + '" value="' + val + '"></param>';
226 emb += ' ' + name + '="' + val + '"';
227 });
228
229 str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"' + emb + '></embed></object>';
230
231 tmp.html(str);
232
233 _process_inline();
234 break;
235
236 case 'ajax':
237 busy = false;
238
239 $.fancybox.showActivity();
240
241 selectedOpts.ajax.win = selectedOpts.ajax.success;
242
243 ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, {
244 url : href,
245 data : selectedOpts.ajax.data || {},
246 error : function(XMLHttpRequest, textStatus, errorThrown) {
247 if ( XMLHttpRequest.status > 0 ) {
248 _error();
249 }
250 },
251 success : function(data, textStatus, XMLHttpRequest) {
252 var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader;
253 if (o.status == 200) {
254 if ( typeof selectedOpts.ajax.win == 'function' ) {
255 ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest);
256
257 if (ret === false) {
258 loading.hide();
259 return;
260 } else if (typeof ret == 'string' || typeof ret == 'object') {
261 data = ret;
262 }
263 }
264
265 tmp.html( data );
266 _process_inline();
267 }
268 }
269 }));
270
271 break;
272
273 case 'iframe':
274 _show();
275 break;
276 }
277 },
278
279 _process_inline = function() {
280 var
281 w = selectedOpts.width,
282 h = selectedOpts.height;
283
284 if (w.toString().indexOf('%') > -1) {
285 w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px';
286
287 } else {
288 w = w == 'auto' ? 'auto' : w + 'px';
289 }
290
291 if (h.toString().indexOf('%') > -1) {
292 h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px';
293
294 } else {
295 h = h == 'auto' ? 'auto' : h + 'px';
296 }
297
298 tmp.wrapInner('<div style="width:' + w + ';height:' + h + ';overflow: ' + (selectedOpts.scrolling == 'auto' ? 'auto' : (selectedOpts.scrolling == 'yes' ? 'scroll' : 'hidden')) + ';position:relative;"></div>');
299
300 selectedOpts.width = tmp.width();
301 selectedOpts.height = tmp.height();
302
303 _show();
304 },
305
306 _process_image = function() {
307 selectedOpts.width = imgPreloader.width;
308 selectedOpts.height = imgPreloader.height;
309
310 $("<img />").attr({
311 'id' : 'fancybox-img',
312 'src' : imgPreloader.src,
313 'alt' : selectedOpts.title
314 }).appendTo( tmp );
315
316 _show();
317 },
318
319 _show = function() {
320 var pos, equal;
321
322 loading.hide();
323
324 if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) {
325 $.event.trigger('fancybox-cancel');
326
327 busy = false;
328 return;
329 }
330
331 busy = true;
332
333 $(content.add( overlay )).unbind();
334
335 $(window).unbind("resize.fb scroll.fb");
336 $(document).unbind('keydown.fb');
337
338 if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') {
339 wrap.css('height', wrap.height());
340 }
341
342 currentArray = selectedArray;
343 currentIndex = selectedIndex;
344 currentOpts = selectedOpts;
345
346 if (currentOpts.overlayShow) {
347 overlay.css({
348 'background-color' : currentOpts.overlayColor,
349 'opacity' : currentOpts.overlayOpacity,
350 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto',
351 'height' : $(document).height()
352 });
353
354 if (!overlay.is(':visible')) {
355 if (isIE6) {
356 $('select:not(#fancybox-tmp select)').filter(function() {
357 return this.style.visibility !== 'hidden';
358 }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() {
359 this.style.visibility = 'inherit';
360 });
361 }
362
363 overlay.show();
364 }
365 } else {
366 overlay.hide();
367 }
368
369 final_pos = _get_zoom_to();
370
371 _process_title();
372
373 if (wrap.is(":visible")) {
374 $( close.add( nav_left ).add( nav_right ) ).hide();
375
376 pos = wrap.position(),
377
378 start_pos = {
379 top : pos.top,
380 left : pos.left,
381 width : wrap.width(),
382 height : wrap.height()
383 };
384
385 equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height);
386
387 content.fadeTo(currentOpts.changeFade, 0.3, function() {
388 var finish_resizing = function() {
389 content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish);
390 };
391
392 $.event.trigger('fancybox-change');
393
394 content
395 .empty()
396 .removeAttr('filter')
397 .css({
398 'border-width' : currentOpts.padding,
399 'width' : final_pos.width - currentOpts.padding * 2,
400 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
401 });
402
403 if (equal) {
404 finish_resizing();
405
406 } else {
407 fx.prop = 0;
408
409 $(fx).animate({prop: 1}, {
410 duration : currentOpts.changeSpeed,
411 easing : currentOpts.easingChange,
412 step : _draw,
413 complete : finish_resizing
414 });
415 }
416 });
417
418 return;
419 }
420
421 wrap.removeAttr("style");
422
423 content.css('border-width', currentOpts.padding);
424
425 if (currentOpts.transitionIn == 'elastic') {
426 start_pos = _get_zoom_from();
427
428 content.html( tmp.contents() );
429
430 wrap.show();
431
432 if (currentOpts.opacity) {
433 final_pos.opacity = 0;
434 }
435
436 fx.prop = 0;
437
438 $(fx).animate({prop: 1}, {
439 duration : currentOpts.speedIn,
440 easing : currentOpts.easingIn,
441 step : _draw,
442 complete : _finish
443 });
444
445 return;
446 }
447
448 if (currentOpts.titlePosition == 'inside' && titleHeight > 0) {
449 title.show();
450 }
451
452 content
453 .css({
454 'width' : final_pos.width - currentOpts.padding * 2,
455 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
456 })
457 .html( tmp.contents() );
458
459 wrap
460 .css(final_pos)
461 .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish );
462 },
463
464 _format_title = function(title) {
465 if (title && title.length) {
466 if (currentOpts.titlePosition == 'float') {
467 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>';
468 }
469
470 return '<div id="fancybox-title-' + currentOpts.titlePosition + '">' + title + '</div>';
471 }
472
473 return false;
474 },
475
476 _process_title = function() {
477 titleStr = currentOpts.title || '';
478 titleHeight = 0;
479
480 title
481 .empty()
482 .removeAttr('style')
483 .removeClass();
484
485 if (currentOpts.titleShow === false) {
486 title.hide();
487 return;
488 }
489
490 titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr);
491
492 if (!titleStr || titleStr === '') {
493 title.hide();
494 return;
495 }
496
497 title
498 .addClass('fancybox-title-' + currentOpts.titlePosition)
499 .html( titleStr )
500 .appendTo( 'body' )
501 .show();
502
503 switch (currentOpts.titlePosition) {
504 case 'inside':
505 title
506 .css({
507 'width' : final_pos.width - (currentOpts.padding * 2),
508 'marginLeft' : currentOpts.padding,
509 'marginRight' : currentOpts.padding
510 });
511
512 titleHeight = title.outerHeight(true);
513
514 title.appendTo( outer );
515
516 final_pos.height += titleHeight;
517 break;
518
519 case 'over':
520 title
521 .css({
522 'marginLeft' : currentOpts.padding,
523 'width' : final_pos.width - (currentOpts.padding * 2),
524 'bottom' : currentOpts.padding
525 })
526 .appendTo( outer );
527 break;
528
529 case 'float':
530 title
531 .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1)
532 .appendTo( wrap );
533 break;
534
535 default:
536 title
537 .css({
538 'width' : final_pos.width - (currentOpts.padding * 2),
539 'paddingLeft' : currentOpts.padding,
540 'paddingRight' : currentOpts.padding
541 })
542 .appendTo( wrap );
543 break;
544 }
545
546 title.hide();
547 },
548
549 _set_navigation = function() {
550 if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) {
551 $(document).bind('keydown.fb', function(e) {
552 if (e.keyCode == 27 && currentOpts.enableEscapeButton) {
553 e.preventDefault();
554 $.fancybox.close();
555
556 } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
557 e.preventDefault();
558 $.fancybox[ e.keyCode == 37 ? 'prev' : 'next']();
559 }
560 });
561 }
562
563 if (!currentOpts.showNavArrows) {
564 nav_left.hide();
565 nav_right.hide();
566 return;
567 }
568
569 if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) {
570 nav_left.show();
571 }
572
573 if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) {
574 nav_right.show();
575 }
576 },
577
578 _finish = function () {
579 if (!$.support.opacity) {
580 content.get(0).style.removeAttribute('filter');
581 wrap.get(0).style.removeAttribute('filter');
582 }
583
584 if (selectedOpts.autoDimensions) {
585 content.css('height', 'auto');
586 }
587
588 wrap.css('height', 'auto');
589
590 if (titleStr && titleStr.length) {
591 title.show();
592 }
593
594 if (currentOpts.showCloseButton) {
595 close.show();
596 }
597
598 _set_navigation();
599
600 if (currentOpts.hideOnContentClick) {
601 content.bind('click', $.fancybox.close);
602 }
603
604 if (currentOpts.hideOnOverlayClick) {
605 overlay.bind('click', $.fancybox.close);
606 }
607
608 $(window).bind("resize.fb", $.fancybox.resize);
609
610 if (currentOpts.centerOnScroll) {
611 $(window).bind("scroll.fb", $.fancybox.center);
612 }
613
614 if (currentOpts.type == 'iframe') {
615 $('<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);
616 }
617
618 wrap.show();
619
620 busy = false;
621
622 $.fancybox.center();
623
624 currentOpts.onComplete(currentArray, currentIndex, currentOpts);
625
626 _preload_images();
627 },
628
629 _preload_images = function() {
630 var href,
631 objNext;
632
633 if ((currentArray.length -1) > currentIndex) {
634 href = currentArray[ currentIndex + 1 ].href;
635
636 if (typeof href !== 'undefined' && href.match(imgRegExp)) {
637 objNext = new Image();
638 objNext.src = href;
639 }
640 }
641
642 if (currentIndex > 0) {
643 href = currentArray[ currentIndex - 1 ].href;
644
645 if (typeof href !== 'undefined' && href.match(imgRegExp)) {
646 objNext = new Image();
647 objNext.src = href;
648 }
649 }
650 },
651
652 _draw = function(pos) {
653 var dim = {
654 width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10),
655 height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10),
656
657 top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10),
658 left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10)
659 };
660
661 if (typeof final_pos.opacity !== 'undefined') {
662 dim.opacity = pos < 0.5 ? 0.5 : pos;
663 }
664
665 wrap.css(dim);
666
667 content.css({
668 'width' : dim.width - currentOpts.padding * 2,
669 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2
670 });
671 },
672
673 _get_viewport = function() {
674 return [
675 $(window).width() - (currentOpts.margin * 2),
676 $(window).height() - (currentOpts.margin * 2),
677 $(document).scrollLeft() + currentOpts.margin,
678 $(document).scrollTop() + currentOpts.margin
679 ];
680 },
681
682 _get_zoom_to = function () {
683 var view = _get_viewport(),
684 to = {},
685 resize = currentOpts.autoScale,
686 double_padding = currentOpts.padding * 2,
687 ratio;
688
689 if (currentOpts.width.toString().indexOf('%') > -1) {
690 to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10);
691 } else {
692 to.width = currentOpts.width + double_padding;
693 }
694
695 if (currentOpts.height.toString().indexOf('%') > -1) {
696 to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10);
697 } else {
698 to.height = currentOpts.height + double_padding;
699 }
700
701 if (resize && (to.width > view[0] || to.height > view[1])) {
702 if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') {
703 ratio = (currentOpts.width ) / (currentOpts.height );
704
705 if ((to.width ) > view[0]) {
706 to.width = view[0];
707 to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10);
708 }
709
710 if ((to.height) > view[1]) {
711 to.height = view[1];
712 to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10);
713 }
714
715 } else {
716 to.width = Math.min(to.width, view[0]);
717 to.height = Math.min(to.height, view[1]);
718 }
719 }
720
721 to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10);
722 to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10);
723
724 return to;
725 },
726
727 _get_obj_pos = function(obj) {
728 var pos = obj.offset();
729
730 pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0;
731 pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0;
732
733 pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0;
734 pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0;
735
736 pos.width = obj.width();
737 pos.height = obj.height();
738
739 return pos;
740 },
741
742 _get_zoom_from = function() {
743 var orig = selectedOpts.orig ? $(selectedOpts.orig) : false,
744 from = {},
745 pos,
746 view;
747
748 if (orig && orig.length) {
749 pos = _get_obj_pos(orig);
750
751 from = {
752 width : pos.width + (currentOpts.padding * 2),
753 height : pos.height + (currentOpts.padding * 2),
754 top : pos.top - currentOpts.padding - 20,
755 left : pos.left - currentOpts.padding - 20
756 };
757
758 } else {
759 view = _get_viewport();
760
761 from = {
762 width : currentOpts.padding * 2,
763 height : currentOpts.padding * 2,
764 top : parseInt(view[3] + view[1] * 0.5, 10),
765 left : parseInt(view[2] + view[0] * 0.5, 10)
766 };
767 }
768
769 return from;
770 },
771
772 _animate_loading = function() {
773 if (!loading.is(':visible')){
774 clearInterval(loadingTimer);
775 return;
776 }
777
778 $('div', loading).css('top', (loadingFrame * -40) + 'px');
779
780 loadingFrame = (loadingFrame + 1) % 12;
781 };
782
783 /*
784 * Public methods
785 */
786
787 $.fn.fancybox = function(options) {
788 if (!$(this).length) {
789 return this;
790 }
791
792 $(this)
793 .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {})))
794 .unbind('click.fb')
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches