Source code for kotti.fanstatic

# -*- coding: utf-8 -*-

from __future__ import absolute_import

from fanstatic import Group
from fanstatic import Library
from fanstatic import Resource
from js.angular import angular
from js.bootstrap import bootstrap_js
from js.bootstrap import bootstrap_css
from js.html5shiv import html5shiv
from js.fineuploader import fineuploader
from js.jquery import jquery
from js.jquery_form import jquery_form
from js.jquery_tablednd import jquery_tablednd
from js.jqueryui import bootstrap as jqueryui_bootstrap_theme
from js.jqueryui_tagit import tagit as ui_tagit


# This is needed until ``kotti.views.form.deferred_tag_it_widget`` is converted
# to a class with a ``requirements`` attribute (that would be auto_needed by
# ``js.deform[_bootstrap]``).
tagit = Group([ui_tagit, jqueryui_bootstrap_theme])

# Kotti's resources
lib_kotti = Library("kotti", "static")
contents_view_js = Resource(
    lib_kotti,
    "contents.js",
    depends=[jquery_tablednd, ],
    minified="contents.min.js",
    bottom=True)
base_css = Resource(
    lib_kotti,
    "base.css",
    depends=[bootstrap_css],
    minified="base.min.css",
    dont_bundle=True)
edit_css = Resource(
    lib_kotti,
    "edit.css",
    depends=[base_css],
    minified="edit.min.css")
view_css = Resource(
    lib_kotti,
    "view.css",
    depends=[base_css],
    minified="view.min.css")

# Resources for content upload views
upload_js = Resource(
    lib_kotti,
    "upload.js",
    depends=[angular, fineuploader],
    # minified="upload.min.js", needs special minifying
    bottom=True)
upload_css = Resource(
    lib_kotti,
    "upload.css",
    depends=[base_css],
    minified="upload.min.css")
upload = Group([upload_js, upload_css])


[docs]class NeededGroup(object): """A collection of fanstatic resources that supports dynamic appending of resources after initialization""" def __init__(self, resources=None): if resources is None: resources = [] if not isinstance(resources, list): raise ValueError( "resources must be a list of fanstatic.Resource " "and/or fanstatic.Group objects") self.resources = [] for resource in resources: self.add(resource)
[docs] def add(self, resource): """resource may be a: - :class:`fanstatic.Resource` object or - :class:`fanstatic.Group` object""" if isinstance(resource, self.__class__): self.resources = self.resources + resource.resources elif isinstance(resource, (Resource, Group)): self.resources.append(resource) else: raise ValueError( "resource must be a NeededGroup," "fanstatic.Resource or fanstatic.Group object")
def need(self): # pragma: no cover # this is tested in fanstatic itself; we should add browser tests # for `view_needed` and `edit_needed` (see below) Group(self.resources).need()
view_needed_css = NeededGroup([ view_css, ]) view_needed_js = NeededGroup([ jquery, bootstrap_js, html5shiv, ]) view_needed = NeededGroup([ view_needed_css, view_needed_js, ]) edit_needed_css = NeededGroup([ edit_css, jqueryui_bootstrap_theme, ]) edit_needed_js = NeededGroup([ jquery, bootstrap_js, html5shiv, jquery_form, ]) edit_needed = NeededGroup([ edit_needed_css, edit_needed_js, ])