Changeset 277


Ignore:
Timestamp:
06/10/09 11:49:40 (5 years ago)
Author:
david
Message:

added support to download site css and javascipts

Location:
enpraxis.staticsite/trunk/enpraxis/staticsite
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • enpraxis.staticsite/trunk/enpraxis/staticsite/browser/controlpanel.py

    r268 r277  
    22from zope.interface import Interface, implements 
    33from zope.component import adapts, getUtility 
    4 from zope.schema import TextLine 
     4from zope.schema import TextLine, List, Tuple 
     5from zope.schema.vocabulary import SimpleVocabulary 
    56from Products.CMFDefault.formlib.schema import SchemaAdapterBase 
    67from Products.CMFPlone.interfaces import IPloneSiteRoot 
    78from Products.CMFCore.interfaces import IPropertiesTool 
     9from Products.CMFPlone.utils import getToolByName 
    810from plone.app.controlpanel.form import ControlPanelForm 
    911from zope.formlib.form import FormFields 
     
    3032                          required=True) 
    3133 
     34    extra_views = List(title=_(u'Additional Views'), 
     35                 description=_(u'A list of additional views that need to be downloaded'), 
     36                 required=True, 
     37                 value_type=TextLine(),) 
     38 
     39    base_files = List(title=_(u'Base Files'), 
     40                       description=_(u'A list of basic site files and resources to download'), 
     41                       required=True, 
     42                       value_type=TextLine(),) 
     43 
     44    css_images = List(title=_(u'CSS Images'), 
     45                      description=_(u'A list of CSS images related to a custom theme'), 
     46                      required=True, 
     47                      value_type=TextLine(),) 
    3248 
    3349class StaticSiteControlPanelAdapter(SchemaAdapterBase): 
     
    6682        self.ssprops.manage_changeProperties(google_file=gf) 
    6783 
     84    def get_extra_views(self): 
     85        return self.ssprops.extra_views 
     86 
     87    def set_extra_views(self, extraviews): 
     88        self.ssprops.extra_views = extraviews 
     89         
     90    def get_base_files(self): 
     91        return self.ssprops.base_files 
     92 
     93    def set_base_files(self, basefiles): 
     94        self.ssprops.base_files = basefiles 
     95 
     96    def get_css_images(self): 
     97        return self.ssprops.css_images 
     98 
     99    def set_css_images(self, cssimages): 
     100        self.ssprops.css_images = cssimages 
     101 
     102 
    68103    deployment_path = property(get_deployment_path, set_deployment_path) 
    69104    domain = property(get_domain, set_domain) 
    70105    plone_sitemap = property(get_plone_sitemap, set_plone_sitemap) 
    71106    google_file = property(get_google_file, set_google_file) 
    72      
     107    extra_views = property(get_extra_views, set_extra_views)         
     108    base_files = property(get_base_files, set_base_files)         
     109    css_images = property(get_css_images, set_css_images)             
     110         
    73111 
    74112class StaticSiteControlPanel(ControlPanelForm): 
     
    76114    form_fields = FormFields(IStaticSiteSchema) 
    77115 
     116 
    78117    label = _(u'Static Site Settings') 
    79118    description = _(u'Settings which control static site deployment.') 
  • enpraxis.staticsite/trunk/enpraxis/staticsite/profiles/default/propertiestool.xml

    r268 r277  
    77    <property name="google_file" type="string">googleFoo.html</property> 
    88    <property name="domain" type="string">localhost:8080/static</property> 
     9    <property name="base_files" type="lines"> 
     10                  <element value="application.png" /> 
     11                  <element value="bullet.gif" /> 
     12                  <element value="document_icon.gif" /> 
     13                  <element value="favicon.ico" /> 
     14                  <element value="folder_icon.gif" /> 
     15                  <element value="IEFixes.css" /> 
     16                  <element value="image_icon.gif" /> 
     17                  <element value="input_background.gif" /> 
     18                  <element value="link_icon.gif" /> 
     19                  <element value="logo.gif" /> 
     20                  <element value="lock_icon.gif" /> 
     21                  <element value="mail_icon.gif" /> 
     22                  <element value="print_icon.gif" /> 
     23                  <element value="rss_icon.gif" /> 
     24                  <element value="py.png" /> 
     25                  <element value="robots.txt" /> 
     26                  <element value="search_icon.gif" /> 
     27                  <element value="s5_icon.jpg" /> 
     28                  <element value="s5_slides.css" /> 
     29                  <element value="s5_outline.css" /> 
     30                  <element value="s5_print.css" /> 
     31                  <element value="s5_opera.css" /> 
     32                  <element value="s5_slides.js" /> 
     33                  <element value="spinner.gif" /> 
     34                  <element value="txt.png" /> 
     35                  <element value="xls.png" />    
     36                  <element value="eduCommonsDivision.gif" /> 
     37                  <element value="bookmarklets.gif" /> 
     38          </property> 
     39         
     40    <property name="extra_views" type="lines"> 
     41                          <element value="accessibility-info" /> 
     42                          <element value="sitemap" /> 
     43                          <element value="@@rss_feeds" /> 
     44                          <element value="rss" /> 
     45        <element value="rdf" /> 
     46                                <element value="presentation_view" /> 
     47                                <element value="skinless_view" /> 
     48          </property> 
     49                 
     50          <property name="css_images" type="lines"> 
     51                  <element value="columnOneBackground.png" /> 
     52                  <element value="headerBackground.png" /> 
     53                  <element value="topNavBackground.png" /> 
     54          </property> 
    955  </object> 
    1056</object> 
  • enpraxis.staticsite/trunk/enpraxis/staticsite/utilities/staticsiteutility.py

    r275 r277  
     1import re 
     2from BeautifulSoup import BeautifulSoup 
    13from Globals import BobobaseName 
    24from os import makedirs as os_makedirs 
     
    68from os.path import split as os_split 
    79 
    8  
    910from urllib2 import urlopen 
     11from urllib2 import HTTPError 
    1012 
    1113from OFS.SimpleItem import SimpleItem 
     
    2527        domain = ssprops.getProperty('domain') 
    2628        dpath = self._getDeploymentPath(ssprops.getProperty('deployment_path')) 
     29        self._deploySiteStructure(context, ssprops, domain, dpath) 
     30 
    2731        allowed = context.portal_types.getTypeInfo('Plone Site').allowed_content_types 
    2832        brains = context.portal_catalog.searchResults( 
     
    7680        """ Filter content """ 
    7781        return data.replace(portal_url, domain) 
     82 
     83    def _deploySiteStructure(self, context, ssprops, domain, dpath): 
     84        """ Get the base framework and resources needed to build the chrome locally  """ 
     85        base_files = ssprops.base_files 
     86        css_images = ssprops.css_images 
     87        extra_views = ssprops.extra_views 
    7888         
     89        portal_url = context.portal_url() 
     90         
     91        for x in base_files: 
     92            #Download files/images that are used sitewide in the chrome 
     93            url = '%s/%s' % (portal_url, x) 
     94            path = self._getObjPath(url, portal_url, dpath) 
     95            raw = self._httpget(url) 
     96            self._writeFile(path, raw) 
     97             
     98        for x in extra_views: 
     99            #Download zope3 views and/or additional views that are not included in the site catalog search 
     100            url = '%s/%s' % (portal_url, x) 
     101            path = self._getObjPath(url, portal_url, dpath) 
     102            path += '.html' 
     103            raw = self._httpget(url) 
     104            self._writeFile(path, raw) 
     105 
     106        #get soup of front page 
     107        fp = self._httpget(portal_url) 
     108        soup = BeautifulSoup(fp) 
     109        types = ['css', 'js'] 
     110             
     111        for x in types: 
     112            if x == 'css': 
     113                for tag in soup.head.findAll('style'): 
     114                    #analyze content and extract url to CSS 
     115                    contents = tag.contents[0] 
     116                    url = re.match(r"""[^(]*\((.*)\)[^)]*$""", contents, re.X) 
     117                    url = url.group(1) 
     118                    path = self._deployCompressedResources(url, portal_url, dpath) 
     119                    css_path = os_split(path)[0] 
     120                for img in css_images: 
     121                    #download css_images 
     122                    url = '%s/%s' % (portal_url, img) 
     123                    path = '%s/%s' % (css_path, img) 
     124                    try: 
     125                        raw = self._httpget(url) 
     126                    except HTTPError: 
     127                        continue 
     128                    self._writeFile(path, raw)                     
     129                     
     130            elif x == 'js': 
     131                for tag in soup.head.findAll('script'): 
     132                    if tag.has_key('src'): 
     133                        url = tag['src'] 
     134                        self._deployCompressedResources(url, portal_url, dpath) 
     135 
     136 
     137 
     138 
     139         
     140    def _deployCompressedResources(self, url, portal_url, dpath): 
     141        """ extracts resources from soup and writes to static path location """ 
     142        path = self._getObjPath(url, portal_url, dpath) 
     143        path = path.replace('%20','_') 
     144        raw = self._httpget(url) 
     145        self._writeFile(path, raw) 
     146        return path 
     147                     
    79148    def _getDeploymentPath(self, sp): 
    80149        """ Get the default static path location. """ 
Note: See TracChangeset for help on using the changeset viewer.