source: products/qtheme.template/trunk/qthemetemplate/localcommands/subtemplates.py @ 804

Last change on this file since 804 was 366, checked in by chervol, 18 years ago

added version file

  • Property svn:eol-style set to native
File size: 10.0 KB
Line 
1"""
2Local templates for the qplone3_theme
3"""
4import os, sys, re, datetime
5from ConfigParser import SafeConfigParser
6from paste.script import pluginlib
7
8from zopeskel.base import var
9from zopeskel.localcommands import ZopeSkelLocalTemplate
10from qthemetemplate.localcommands import QThemeSubTemplate
11
12RESP = re.compile("\s+")
13
14
15class SkinLayerSubTemplate(QThemeSubTemplate):
16    """
17    A Plone Skin layer skeleton
18    """
19    _template_dir = 'templates/skinlayer'
20    summary = "A Plone 3 Skin Layer"
21
22    compo_template_markers = [
23        ('layer4Skin',   'extra layer stuff goes here'),
24    ]
25
26    vars = [
27      var('layer_name', 'Skin Layer name (should not contain spaces)',
28           default="skin_layer"),
29      var('insert_type', 'Where insert the layer ("after" or "before")', default="after"),
30      var('insert_control_layer',
31          'Layer after or before which your layer will be inserted, "*" accepted, which mean all',
32          default='custom'),
33           ]
34
35
36class CSSSubTemplate(QThemeSubTemplate):
37    """
38    A Plone CSS resource skeleton
39    """
40    _template_dir = 'templates/cssresource'
41    summary = "A Plone 3 CSS resource template"
42   
43
44    vars = [
45      var('css_resource_name', 'Name of CSS resource',
46           default="main.css"),
47      var('css_file_path', 'Path to CSS file. If no path-empty file will be created.',
48           default=''),
49      var('cssreg_media', 'Optional.Possible values:screen,print,projection,handheld',
50           default="screen", ),
51      var('cssreg_rel', 'Optional', default="stylesheet"),
52      var('cssreg_rendering', 'Optional.Possible values:import,link,inline', default="inline"),
53      var('cssreg_cacheable', '', default="True"),
54      var('cssreg_compression', 'Compression type', default="safe"),
55      var('cssreg_cookable', 'Boolean, aka merging allowed', default="True"),
56      var('cssreg_enables', 'Optional.Boolean', default="1"),
57      var('cssreg_expression', 'Optional.A tal condition.', default=""),
58           ]
59
60    def pre(self, command, output_dir, vars):
61        """ Set 'css_resource_content' value from css_file_path
62        """
63        super(CSSSubTemplate, self).pre(command, output_dir, vars)
64
65        vars['css_resource_content'] = ''
66        if os.path.isfile(vars['css_file_path']):
67            vars['css_resource_content'] = file(vars['css_file_path'],'rb').read()
68
69
70class JSSubTemplate(QThemeSubTemplate):
71    """
72    A Plone JS resource skeleton
73    """
74    _template_dir = 'templates/jsresource'
75    summary = "A Plone 3 JS resource template"
76   
77
78    vars = [
79      var('js_resource_name', 'Name of JS resource', default="foo.js"),
80      var('js_file_path', 'Path to JS file. If no path - empty file will be created',
81          default=''),
82      var('jsreg_inline', 'Optional.Boolean', default="False"),
83      var('jsreg_cacheable', '', default="True"),
84      var('jsreg_compression', 'Compression type.Possible:none,safe,full,safe-encode,full-encode',
85          default="safe"),
86      var('jsreg_cookable', 'Boolean, aka merging allowed', default="True"),
87      var('jsreg_enables', 'Optional.Boolean', default="1"),
88      var('jsreg_expression', 'Optional.A tal condition.', default=""),
89           ]
90
91    def pre(self, command, output_dir, vars):
92        """ Set 'js_resource_content' value from js_file_path
93        """
94        super(JSSubTemplate, self).pre(command, output_dir, vars)
95       
96        vars['js_resource_content'] = ''
97        if os.path.isfile(vars['js_file_path']):
98            vars['js_resource_content'] = file(vars['js_file_path'],'rb').read()
99
100
101class ViewletOrderSubTemplate(QThemeSubTemplate):
102    """
103    A Plone Order Viewlet skeleton
104    """
105    _template_dir = 'templates/viewlet'
106    summary = "A Plone 3 Order Viewlet template"
107   
108    # list of 2 item tuple -
109    # (compotemplate_name, compo marker), for ex.:
110    compo_template_markers = []
111
112    shared_vars = ['viewlet_profile_marker',]
113
114    vars = [
115      var('viewlet_name', "Viewlet name", default='example'),
116      var('viewlet_manager_interface', "Viewlet manager interface",
117          default="plone.app.layout.viewlets.interfaces.IPortalHeader"),
118      var('viewlet_manager_name', "Viewlet manager name", default='plone.portalheader'),
119      var('viewlet_permission', "Viewlet permission", default="zope2.View"),
120
121
122      var('insert_type', 'Where insert the viewlet ("after" or "before")', default="after"),
123      var('insert_control_viewlet', 'Viewlet after or before which your viewlet will be inserted, ' \
124          '"*" accepted, which mean all', default='*'),
125
126      var('layer_interface', "Layer interface for registry this viewlet on", default=""),
127      var('layer_name', "Layer name for registry this viewlet on", default=""),
128      #var('skinname', "Skin name, for bind viewlet to, '*' - mean for all", default=""),
129      #var('skinbase', "Base skin, for get viewlets from", default=""),
130           ]
131
132    def pre(self, command, output_dir, vars):
133        """ Set 'css_resource_content' value from css_file_path
134        """
135        super(ViewletOrderSubTemplate, self).pre(command, output_dir, vars)
136
137        vn_lower_nospc = RESP.sub('',vars['viewlet_name']).lower()
138        vn_lower_under = RESP.sub('_',vars['viewlet_name']).lower()
139        VnCamel = ''.join([i.capitalize() for i in vars['viewlet_name'].split()])
140        vars['viewlet_class_name'] = VnCamel
141        vars['viewlet_interface_name'] = "I"+VnCamel
142        vars['viewlet_template_name'] = vn_lower_nospc+'_viewlet.pt'
143
144        viewlet_profile_marker = "[order_%s] viewlet stuff goes here" % \
145            '.'.join([vars['viewlet_manager_name'], vars['qplone3_theme_skinname'], 
146                      vars['qplone3_theme_skinbase']])
147       
148        vars['add_order_tag'] = self.add_order_tag(output_dir, vars, viewlet_profile_marker)
149        vars['viewlet_profile_marker'] = viewlet_profile_marker
150        self.compo_template_markers.append(
151            ('viewlet_profiles',viewlet_profile_marker))
152
153
154    def add_order_tag(self, output_dir, vars, pmarker):
155        need_update = True
156        egg_info = pluginlib.find_egg_info_dir(output_dir)
157        theme_vars_fp = os.path.join(egg_info, 'theme_vars.txt')
158
159        if egg_info and os.path.exists(theme_vars_fp):
160            config = SafeConfigParser()
161            config.read(theme_vars_fp)
162
163            sec, opt = 'qplone3_theme', 'used_subtemplates'
164            used_subtemplates = filter(None,[st.strip() \
165                         for st in config.get(sec,opt).split(',')])
166           
167            if self.name in used_subtemplates:
168                sections = [self.name,]
169                if config.has_section('multiple_templates') and \
170                  config.has_option('multiple_templates',self.name):
171                    ms_sections = config.get('multiple_templates',self.name)
172                    sections = [s.strip() for s in ms_sections.split(',')]
173
174                pmarkers = [config.get(sec, 'viewlet_profile_marker') \
175                            for sec in sections]
176                if pmarker in pmarkers:
177                    need_update = False
178
179        return need_update
180
181
182class ViewletHiddenSubTemplate(QThemeSubTemplate):
183    """
184    A Plone Hidden Viewlet skeleton
185    """
186    _template_dir = 'templates/viewlet_hidden'
187    summary = "A Plone 3 Hidden Viewlet template"
188
189    shared_vars = ['viewlet_profile_marker',]
190
191    compo_template_markers = []
192   
193    vars = [
194      var('viewlet_name', "Viewlet name", default='plone.global_sections'),
195      var('viewlet_manager_name', "Viewlet manager name", default='plone.portalheader'),
196      #var('skinname', "Skin name, for bind viewlet to, may be '*'", default=""),
197           ]
198
199    def pre(self, command, output_dir, vars):
200        """ Set 'css_resource_content' value from css_file_path
201        """
202        super(ViewletHiddenSubTemplate, self).pre(command, output_dir, vars)
203         
204        viewlet_profile_marker = "[hidden_%s] viewlet stuff goes here" % \
205            '.'.join([vars['viewlet_manager_name'], vars['qplone3_theme_skinname']])
206
207        vars['add_hidden_tag'] = self.add_hidden_tag(output_dir, vars, viewlet_profile_marker)
208        vars['viewlet_profile_marker'] = viewlet_profile_marker
209        self.compo_template_markers.append(
210            ('viewlet_hidden_profiles',viewlet_profile_marker))
211
212
213    def add_hidden_tag(self, output_dir, vars, pmarker):
214        add_hidden = True
215        egg_info = pluginlib.find_egg_info_dir(output_dir)
216        theme_vars_fp = os.path.join(egg_info, 'theme_vars.txt')
217
218        if egg_info and os.path.exists(theme_vars_fp):
219            config = SafeConfigParser()
220            config.read(theme_vars_fp)
221
222            sec, opt = 'qplone3_theme', 'used_subtemplates'
223            used_subtemplates = filter(None,[st.strip() \
224                         for st in config.get(sec,opt).split(',')])
225           
226            if self.name in used_subtemplates:
227                sections = [self.name,]
228                if config.has_section('multiple_templates') and \
229                  config.has_option('multiple_templates',self.name):
230                    ms_sections = config.get('multiple_templates',self.name)
231                    sections = [s.strip() for s in ms_sections.split(',')]
232
233                pmarkers = [config.get(sec, 'viewlet_profile_marker') \
234                            for sec in sections]
235                if pmarker in pmarkers:
236                    add_hidden = False
237        return add_hidden
238
239class ImportSubTemplate(QThemeSubTemplate):
240    """
241    A skeleton for importing zexp objects into portal on theme installation
242    """
243    _template_dir = 'templates/importing'
244    summary = "A template for importing zexp-objects into portal on installation"
245   
246    def pre(self, command, output_dir, vars):
247        """ Set timestamp var for generate import_steps profile id
248        """
249        super(ImportSubTemplate, self).pre(command, output_dir, vars)
250
251        vars['timestamp'] = datetime.date.today().strftime("%Y%m%d")
252        vars['already_used'] = self.already_used(vars)
253
254    def already_used(self, vars):
255        used = vars.get('qplone3_theme_used_subtemplates','').split(',')
256        return self.name in filter(None,[st.strip() for st in used])
Note: See TracBrowser for help on using the repository browser.