-
Notifications
You must be signed in to change notification settings - Fork 1
/
skin.py
118 lines (100 loc) · 4.35 KB
/
skin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# -*- coding: UTF-8 -*-
# Copyright (C) 2010 Hervé Cauwelier <herve@itaapy.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Import from itools
from itools.core import merge_dicts
from itools.web import get_context
# Import from ikaaro
from ikaaro.access import is_admin
from ikaaro.skins import Skin as BaseSkin
# Import from iscrib
from form import Form
from utils import is_print
class Skin(BaseSkin):
def get_template(self):
if is_print(get_context()):
return self.get_resource('/ui/iscrib/print.xhtml')
return super(Skin, self).get_template()
def get_styles(self, context):
styles = super(Skin, self).get_styles(context)
# Restore Aruni
if '/ui/aruni/style.css' not in styles:
styles.insert(1, '/ui/aruni/style.css')
styles.insert(-2,
'/ui/iscrib/fancybox/jquery.fancybox-1.3.1.css')
site_root = context.resource.get_site_root()
# Add specific style on root
if site_root is context.root:
wg_style = '%s/root/style.css' % self.get_canonical_path()
styles.insert(-1, wg_style)
# Replace root style by website style
if styles[-1] == '/theme/style/;download':
if site_root != context.root:
style = site_root.get_resource('theme/style')
ac = style.get_access_control()
if ac.is_allowed_to_view(context.user, style):
del styles[-1]
styles.append('{0}/;download'.format(
context.get_link(style)))
if isinstance(context.resource, Form) and context.view_name == 'print':
# Disable custom CSS on print view
if styles[-1].endswith('/style/;download'):
del styles[-1]
return styles
def get_scripts(self, context):
scripts = super(Skin, self).get_scripts(context)
scripts.append('/ui/iscrib/zeroclipboard/ZeroClipboard.js')
scripts.append(
'/ui/iscrib/fancybox/jquery.fancybox-1.3.1.pack.js')
return scripts
def build_namespace(self, context):
resource = context.resource
site_root = resource.get_site_root()
website_title = site_root.get_title()
website_href = context.get_link(site_root)
user = context.user
theme = site_root.get_resource('theme')
logo_href = None
logo_path = theme.get_property('logo')
if logo_path:
logo = theme.get_resource(logo_path, soft=True)
if logo:
ac = logo.get_access_control()
if ac.is_allowed_to_view(user, logo):
# XXX restore max height behaviour
logo_href = '{0}/;thumb?width=475&height=70'.format(
context.get_link(logo))
new_resource_allowed = is_admin(user, resource)
namespace = merge_dicts(BaseSkin.build_namespace(self, context),
website_title=website_title, website_href=website_href,
logo_href=logo_href,
new_resource_allowed=new_resource_allowed)
# Hide as much as possible to form user
if user is not None:
role = site_root.get_user_role(user.name)
if role == 'guests':
#namespace['location'] = None
namespace['languages'] = None
#namespace['menu']['items'] = None
# Home page ?
page_css = None
if type(context.resource) == type(context.root):
if context.view_name in (None, 'view'):
page_css = 'home-page'
namespace['page_css'] = page_css
# Is Admin
namespace['is_admin'] = is_admin(user, resource)
return namespace