def getTheme(name, manifest=None, resources=None): if manifest is None: if resources is None: resources = getAllResources( MANIFEST_FORMAT, filter=isValidThemeDirectory ) if name not in resources: return None manifest = resources[name] or {} title = manifest.get('title', None) if title is None: title = name.capitalize().replace('-', ' ').replace('.', ' ') description = manifest.get('description', None) rules = manifest.get('rules', None) if rules is None: rules = u"/++{0:s}++{1:s}/{2:s}".format( THEME_RESOURCE_NAME, name, RULE_FILENAME, ) prefix = manifest.get('prefix', None) if prefix is None: prefix = u"/++{0:s}++{1:s}".format(THEME_RESOURCE_NAME, name) params = manifest.get('parameters', None) or {} doctype = manifest.get('doctype', None) or "" preview = manifest.get('preview', None) enabled_bundles = manifest.get('enabled-bundles', None) or '' enabled_bundles = enabled_bundles.split(',') if enabled_bundles else [] disabled_bundles = manifest.get('disabled-bundles', None) or '' disabled_bundles = disabled_bundles.split(',') if disabled_bundles else [] development_css = manifest.get('development-css', None) or '' development_js = manifest.get('development-js', None) or '' production_css = manifest.get('production-css', None) or '' production_js = manifest.get('production-js', None) or '' tinymce_content_css = manifest.get('tinymce-content-css', None) or '' tinymce_styles_css = manifest.get('tinymce-styles-css', None) or '' if isinstance(rules, str): rules = rules.decode('utf-8') if isinstance(prefix, str): prefix = prefix.decode('utf-8') return Theme( name, rules, title=title, description=description, absolutePrefix=prefix, parameterExpressions=params, doctype=doctype, preview=preview, enabled_bundles=enabled_bundles, disabled_bundles=disabled_bundles, development_css=development_css, development_js=development_js, production_css=production_css, production_js=production_js, tinymce_content_css=tinymce_content_css, tinymce_styles_css=tinymce_styles_css )
def test_get_all_resources_filter(self): app = self.layer['app'] foo = FilesystemResourceDirectory( os.path.join(test_dir_path, 'demo', 'foo')) provideUtility(foo, provides=IResourceDirectory, name=u'++demo++foo') manifestTest = FilesystemResourceDirectory( os.path.join(test_dir_path, 'demo', 'manifest-test')) provideUtility(manifestTest, provides=IResourceDirectory, name=u'++demo++manifest-test') root = BTreeFolder2('portal_resources') app._setOb('portal_resources', root) root._setOb('demo', BTreeFolder2('demo')) root['demo']._setOb('bar', BTreeFolder2('bar')) persistentDir = PersistentResourceDirectory(root) provideUtility(persistentDir, provides=IResourceDirectory, name=u'persistent') resources = getAllResources(TEST_FORMAT, filter=lambda dir: dir.__name__ != 'foo') self.assertEqual( resources, { 'bar': None, 'manifest-test': { 'bar': 'baz', 'description': None, 'title': 'Manifest test' } })
def __call__(self, context): items = {} # dictionary is used here to avoid duplicate tokens resources = getAllResources(self.format) for name, manifest in resources.items(): title = name.capitalize().replace('-', ' ').replace('.', ' ') filename = self.defaultFilename if manifest is not None: title = manifest['title'] or title filename = manifest['file'] or filename variants = manifest.get('variants') or [] else: variants = [] path = "/++%s++%s/%s" % (self.format.resourceType, name, filename) items[name] = SimpleTerm(path, name, title) for key, value in dict(variants).items(): key_ = title_ = key.capitalize().replace('_', ' ') name_ = '{0:s}-{1:s}'.format(name, key) if manifest is not None and manifest['title']: title_ = u'{0:s} ({1:s})'.format(title, key_) path = "/++%s++%s/%s" % (self.format.resourceType, name, value) items[name_] = SimpleTerm(path, name_, title_) items = sorted(items.values(), key=lambda term: term.title) return SimpleVocabulary(items)
def test_get_all_resources_filter(self): app = self.layer['app'] foo = FilesystemResourceDirectory(os.path.join(test_dir_path, 'demo', 'foo')) provideUtility(foo, provides=IResourceDirectory, name=u'++demo++foo') manifestTest = FilesystemResourceDirectory(os.path.join(test_dir_path, 'demo', 'manifest-test')) provideUtility(manifestTest, provides=IResourceDirectory, name=u'++demo++manifest-test') root = BTreeFolder2('portal_resources') app._setOb('portal_resources', root) root._setOb('demo', BTreeFolder2('demo')) root['demo']._setOb('bar', BTreeFolder2('bar')) persistentDir = PersistentResourceDirectory(root) provideUtility(persistentDir, provides=IResourceDirectory, name=u'persistent') resources = getAllResources(TEST_FORMAT, filter=lambda dir: dir.__name__ != 'foo') self.assertEqual( resources, {'bar': None, 'manifest-test': {'bar': 'baz', 'description': None, 'title': 'Manifest test'}} )
def getAvailableThemes(): """Get a list of all ITheme's available in resource directories. """ resources = getAllResources(MANIFEST_FORMAT, filter=isValidThemeDirectory) themes = [] for name, manifest in resources.items(): themes.append(getTheme(name, manifest)) themes.sort(key=lambda x: safe_unicode(x.title)) return themes
def __call__(self, context): items = [] resources = getAllResources(self.format) for name, manifest in resources.items(): title = name.capitalize().replace('-', ' ').replace('.', ' ') filename = self.defaultFilename if manifest is not None: title = manifest['title'] or title filename = manifest['file'] or filename path = "/++%s++%s/%s" % (self.format.resourceType, name, filename) items.append(SimpleTerm(path, name, title)) return SimpleVocabulary(items)
def getTheme(name, manifest=None, resources=None): if manifest is None: if resources is None: resources = getAllResources(MANIFEST_FORMAT, filter=isValidThemeDirectory) if name not in resources: return None manifest = resources[name] title = name.capitalize().replace('-', ' ').replace('.', ' ') description = None rules = u"/++%s++%s/%s" % ( THEME_RESOURCE_NAME, name, RULE_FILENAME, ) prefix = u"/++%s++%s" % ( THEME_RESOURCE_NAME, name, ) params = {} doctype = "" preview = None if manifest is not None: title = manifest['title'] or title description = manifest['description'] or description rules = manifest['rules'] or rules prefix = manifest['prefix'] or prefix params = manifest['parameters'] or params doctype = manifest['doctype'] or doctype preview = manifest['preview'] or preview if isinstance(rules, str): rules = rules.decode('utf-8') if isinstance(prefix, str): prefix = prefix.decode('utf-8') return Theme( name, rules, title=title, description=description, absolutePrefix=prefix, parameterExpressions=params, doctype=doctype, preview=preview, )
def getTheme(name, manifest=None, resources=None): if manifest is None: if resources is None: resources = getAllResources( MANIFEST_FORMAT, filter=isValidThemeDirectory) if name not in resources: return None manifest = resources[name] title = name.capitalize().replace('-', ' ').replace('.', ' ') description = None rules = u"/++%s++%s/%s" % (THEME_RESOURCE_NAME, name, RULE_FILENAME,) prefix = u"/++%s++%s" % (THEME_RESOURCE_NAME, name,) params = {} doctype = "" preview = None enabled_bundles = '' disabled_bundles = '' if manifest is not None: title = manifest['title'] or title description = manifest['description'] or description rules = manifest['rules'] or rules prefix = manifest['prefix'] or prefix params = manifest['parameters'] or params doctype = manifest['doctype'] or doctype preview = manifest['preview'] or preview enabled_bundles = manifest['enabled-bundles'] or '' disabled_bundles = manifest['disabled-bundles'] or '' if isinstance(rules, str): rules = rules.decode('utf-8') if isinstance(prefix, str): prefix = prefix.decode('utf-8') return Theme(name, rules, title=title, description=description, absolutePrefix=prefix, parameterExpressions=params, doctype=doctype, preview=preview, enabled_bundles=enabled_bundles.split(',') if enabled_bundles else [], disabled_bundles=disabled_bundles.split(',') if disabled_bundles else [] )
def getAvailableThemes(): """Get a list of all ITheme's available in resource directories. """ resources = getAllResources(MANIFEST_FORMAT, filter=isValidThemeDirectory) themes = [] for name, manifest in resources.items(): title = name.capitalize().replace("-", " ").replace(".", " ") description = None rules = u"/++%s++%s/%s" % (THEME_RESOURCE_NAME, name, RULE_FILENAME) prefix = u"/++%s++%s" % (THEME_RESOURCE_NAME, name) params = {} doctype = "" if manifest is not None: title = manifest["title"] or title description = manifest["description"] or description rules = manifest["rules"] or rules prefix = manifest["prefix"] or prefix params = manifest["parameters"] or params doctype = manifest["doctype"] or doctype if isinstance(rules, str): rules = rules.decode("utf-8") if isinstance(prefix, str): prefix = prefix.decode("utf-8") themes.append( Theme( name, rules, title=title, description=description, absolutePrefix=prefix, parameterExpressions=params, doctype=doctype, ) ) themes.sort(key=lambda x: x.title) return themes
def pageLayouts(self): layouts = [] for name, info in getAllResources(PAGE_LAYOUT_MANIFEST_FORMAT).items(): if info is None: info = {} directory = queryResourceDirectory(PAGE_LAYOUT_RESOURCE_NAME, name) editable = IWritableResourceDirectory.providedBy(directory) layouts.append({ 'name': name, 'title': info.get('title', name.capitalize().replace('-', ' ').replace('.', ' ')), 'description': info.get('description', None), 'url': "%s/++%s++%s" % ( self.context.absolute_url(), PAGE_LAYOUT_RESOURCE_NAME, name, ), 'editable': editable, }) return layouts