示例#1
0
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
    )
示例#2
0
    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'
                }
            })
示例#3
0
    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)
示例#4
0
    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'}}
            )
示例#5
0
    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)
示例#6
0
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
示例#7
0
    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)
示例#8
0
 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)
示例#9
0
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,
    )
示例#10
0
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 []
        )
示例#11
0
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
示例#12
0
 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