[Checkins] SVN: hurry.yui/trunk/src/hurry/yui/ Make hurry.yui work with the latest hurry.resource. Things start to look

Martijn Faassen faassen at infrae.com
Tue Sep 30 14:27:49 EDT 2008


Log message for revision 91640:
  Make hurry.yui work with the latest hurry.resource. Things start to look
  plausible now.
  

Changed:
  U   hurry.yui/trunk/src/hurry/yui/README.txt
  U   hurry.yui/trunk/src/hurry/yui/__init__.py
  U   hurry.yui/trunk/src/hurry/yui/yui.py
  U   hurry.yui/trunk/src/hurry/yui/yuidepend.py

-=-
Modified: hurry.yui/trunk/src/hurry/yui/README.txt
===================================================================
--- hurry.yui/trunk/src/hurry/yui/README.txt	2008-09-30 17:30:09 UTC (rev 91639)
+++ hurry.yui/trunk/src/hurry/yui/README.txt	2008-09-30 18:27:48 UTC (rev 91640)
@@ -8,7 +8,47 @@
 dependency structure and different modes (normal, minified and debug)
 and consolidations.
 
-Let's check the YUI structure::
+Let's set up a way to render URLs; typically the framework has already
+done this::
 
-  >>> from hurry.yui import yui
- 
\ No newline at end of file
+  >>> def get_inclusion_url(inclusion):
+  ...    return 'http://localhost/static/%s/%s' % (
+  ...      inclusion.library.name, inclusion.relpath)
+  >>> from hurry.resource.interfaces import IInclusionUrl
+  >>> from zope import component
+  >>> component.provideUtility(get_inclusion_url, 
+  ...     IInclusionUrl)
+
+
+Let's check the YUI structure by picking out a resource in it::
+
+  >>> from hurry import yui
+  >>> from hurry.resource import NeededInclusions
+  >>> needed = NeededInclusions()
+  >>> needed.need(yui.fonts)
+  >>> print needed.render()
+  <link rel="stylesheet" type="text/css" href="http://localhost/static/yui/fonts/fonts.css" />
+
+Let's try a resource that has a dependency on fonts, namely
+``grids``::
+
+  >>> needed = NeededInclusions()
+  >>> needed.need(yui.grids)
+  >>> print needed.render()
+  <link rel="stylesheet" type="text/css" href="http://localhost/static/yui/fonts/fonts.css" />
+  <link rel="stylesheet" type="text/css" href="http://localhost/static/yui/grids/grids.css" />
+
+Now let's try to see consolidation: we include grids and reset at the
+same time, and we expect a consolidation to ``reset-fonts-grids``::
+
+  >>> needed = NeededInclusions()
+  >>> needed.need(yui.grids)
+  >>> needed.need(yui.reset)
+  >>> print needed.render()
+  <link rel="stylesheet" type="text/css" href="http://localhost/static/yui/reset-fonts-grids/reset-fonts-grids.css" />
+
+Let's get the same, minified::
+
+  >>> print needed.render(mode="minified")
+  <link rel="stylesheet" type="text/css" href="http://localhost/static/yui/reset-fonts-grids/reset-fonts-grids-min.css" />
+

Modified: hurry.yui/trunk/src/hurry/yui/__init__.py
===================================================================
--- hurry.yui/trunk/src/hurry/yui/__init__.py	2008-09-30 17:30:09 UTC (rev 91639)
+++ hurry.yui/trunk/src/hurry/yui/__init__.py	2008-09-30 18:27:48 UTC (rev 91640)
@@ -1 +1 @@
-#
+from hurry.yui.yui import *

Modified: hurry.yui/trunk/src/hurry/yui/yui.py
===================================================================
--- hurry.yui/trunk/src/hurry/yui/yui.py	2008-09-30 17:30:09 UTC (rev 91639)
+++ hurry.yui/trunk/src/hurry/yui/yui.py	2008-09-30 18:27:48 UTC (rev 91640)
@@ -1 +1,50 @@
-#
+from hurry.resource import Library, ResourceInclusion
+
+yui = Library('yui')
+
+fonts = ResourceInclusion(yui, 'fonts/fonts.css', minified='fonts/fonts-min.css')
+grids = ResourceInclusion(yui, 'grids/grids.css', depends=[fonts], minified='grids/grids-min.css')
+reset = ResourceInclusion(yui, 'reset/reset.css', minified='reset/reset-min.css')
+reset_fonts = ResourceInclusion(yui, 'reset-fonts/reset-fonts.css', supersedes=[reset, fonts], minified='reset-fonts/reset-fonts-min.css')
+reset_fonts_grids = ResourceInclusion(yui, 'reset-fonts-grids/reset-fonts-grids.css', supersedes=[reset, fonts, grids], minified='reset-fonts-grids/reset-fonts-grids-min.css')
+base = ResourceInclusion(yui, 'base/base.css', minified='base/base-min.css')
+yahoo = ResourceInclusion(yui, 'yahoo/yahoo.js', debug='yahoo/yahoo-debug.js', minified='yahoo/yahoo-min.js')
+dom = ResourceInclusion(yui, 'dom/dom.js', depends=[yahoo], debug='dom/dom-debug.js', minified='dom/dom-min.js')
+event = ResourceInclusion(yui, 'event/event.js', depends=[yahoo], debug='event/event-debug.js', minified='event/event-min.js')
+containercore = ResourceInclusion(yui, 'container/container_core.js', depends=[dom, event], debug='container/container_core-debug.js', minified='container/container_core-min.js')
+calendar = ResourceInclusion(yui, 'calendar/calendar.js', depends=[event, dom], debug='calendar/calendar-debug.js', minified='calendar/calendar-min.js')
+profiler = ResourceInclusion(yui, 'profiler/profiler-beta.js', depends=[yahoo], debug='profiler/profiler-beta-debug.js', minified='profiler/profiler-beta-min.js')
+container = ResourceInclusion(yui, 'container/container.js', depends=[dom, event], supersedes=[containercore], debug='container/container-debug.js', minified='container/container-min.js')
+element = ResourceInclusion(yui, 'element/element-beta.js', depends=[dom, event], debug='element/element-beta-debug.js', minified='element/element-beta-min.js')
+simpleeditor = ResourceInclusion(yui, 'editor/simpleeditor-beta.js', depends=[element], debug='editor/simpleeditor-beta-debug.js', minified='editor/simpleeditor-beta-min.js')
+menu = ResourceInclusion(yui, 'menu/menu.js', depends=[containercore], debug='menu/menu-debug.js', minified='menu/menu-min.js')
+json = ResourceInclusion(yui, 'json/json.js', depends=[yahoo], debug='json/json-debug.js', minified='json/json-min.js')
+datasource = ResourceInclusion(yui, 'datasource/datasource-beta.js', depends=[event], debug='datasource/datasource-beta-debug.js', minified='datasource/datasource-beta-min.js')
+charts = ResourceInclusion(yui, 'charts/charts-experimental.js', depends=[element, json, datasource], debug='charts/charts-experimental-debug.js', minified='charts/charts-experimental-min.js')
+button = ResourceInclusion(yui, 'button/button.js', depends=[element], debug='button/button-debug.js', minified='button/button-min.js')
+editor = ResourceInclusion(yui, 'editor/editor-beta.js', depends=[menu, element, button], supersedes=[simpleeditor], debug='editor/editor-beta-debug.js', minified='editor/editor-beta-min.js')
+get = ResourceInclusion(yui, 'get/get.js', depends=[yahoo], debug='get/get-debug.js', minified='get/get-min.js')
+yuiloader_dom_event = ResourceInclusion(yui, 'yuiloader-dom-event/yuiloader-dom-event.js', supersedes=[yahoo, dom, event, get], debug='yuiloader-dom-event/yuiloader-dom-event-debug.js', minified='yuiloader-dom-event/yuiloader-dom-event-min.js')
+animation = ResourceInclusion(yui, 'animation/animation.js', depends=[dom, event], debug='animation/animation-debug.js', minified='animation/animation-min.js')
+dragdrop = ResourceInclusion(yui, 'dragdrop/dragdrop.js', depends=[dom, event], debug='dragdrop/dragdrop-debug.js', minified='dragdrop/dragdrop-min.js')
+resize = ResourceInclusion(yui, 'resize/resize-beta.js', depends=[dom, event, dragdrop, element], debug='resize/resize-beta-debug.js', minified='resize/resize-beta-min.js')
+imagecropper = ResourceInclusion(yui, 'imagecropper/imagecropper-beta.js', depends=[dom, event, dragdrop, element, resize], debug='imagecropper/imagecropper-beta-debug.js', minified='imagecropper/imagecropper-beta-min.js')
+yuiloader = ResourceInclusion(yui, 'yuiloader/yuiloader-beta.js', supersedes=[yahoo, get], debug='yuiloader/yuiloader-beta-debug.js', minified='yuiloader/yuiloader-beta-min.js')
+logger = ResourceInclusion(yui, 'logger/logger.js', depends=[event, dom], debug='logger/logger-debug.js', minified='logger/logger-min.js')
+slider = ResourceInclusion(yui, 'slider/slider.js', depends=[dragdrop], debug='slider/slider-debug.js', minified='slider/slider-min.js')
+colorpicker = ResourceInclusion(yui, 'colorpicker/colorpicker.js', depends=[slider, element], debug='colorpicker/colorpicker-debug.js', minified='colorpicker/colorpicker-min.js')
+yuitest = ResourceInclusion(yui, 'yuitest/yuitest.js', depends=[logger], debug='yuitest/yuitest-debug.js', minified='yuitest/yuitest-min.js')
+connection = ResourceInclusion(yui, 'connection/connection.js', depends=[event], debug='connection/connection-debug.js', minified='connection/connection-min.js')
+utilities = ResourceInclusion(yui, 'utilities/utilities.js', supersedes=[yahoo, event, dragdrop, animation, dom, connection, element, get], debug='utilities/utilities-debug.js', minified='utilities/utilities-min.js')
+cookie = ResourceInclusion(yui, 'cookie/cookie-beta.js', depends=[yahoo], debug='cookie/cookie-beta-debug.js', minified='cookie/cookie-beta-min.js')
+uploader = ResourceInclusion(yui, 'uploader/uploader-experimental.js', depends=[element], debug='uploader/uploader-experimental-debug.js', minified='uploader/uploader-experimental-min.js')
+layout = ResourceInclusion(yui, 'layout/layout-beta.js', depends=[dom, event, element], debug='layout/layout-beta-debug.js', minified='layout/layout-beta-min.js')
+profilerviewer = ResourceInclusion(yui, 'profilerviewer/profilerviewer-beta.js', depends=[profiler, yuiloader, element], debug='profilerviewer/profilerviewer-beta-debug.js', minified='profilerviewer/profilerviewer-beta-min.js')
+datatable = ResourceInclusion(yui, 'datatable/datatable-beta.js', depends=[element, datasource], debug='datatable/datatable-beta-debug.js', minified='datatable/datatable-beta-min.js')
+selector = ResourceInclusion(yui, 'selector/selector-beta.js', depends=[yahoo, dom], debug='selector/selector-beta-debug.js', minified='selector/selector-beta-min.js')
+yahoo_dom_event = ResourceInclusion(yui, 'yahoo-dom-event/yahoo-dom-event.js', supersedes=[yahoo, event, dom], debug='yahoo-dom-event/yahoo-dom-event-debug.js', minified='yahoo-dom-event/yahoo-dom-event-min.js')
+tabview = ResourceInclusion(yui, 'tabview/tabview.js', depends=[element], debug='tabview/tabview-debug.js', minified='tabview/tabview-min.js')
+autocomplete = ResourceInclusion(yui, 'autocomplete/autocomplete.js', depends=[dom, event], debug='autocomplete/autocomplete-debug.js', minified='autocomplete/autocomplete-min.js')
+imageloader = ResourceInclusion(yui, 'imageloader/imageloader.js', depends=[event, dom], debug='imageloader/imageloader-debug.js', minified='imageloader/imageloader-min.js')
+treeview = ResourceInclusion(yui, 'treeview/treeview.js', depends=[event], debug='treeview/treeview-debug.js', minified='treeview/treeview-min.js')
+history = ResourceInclusion(yui, 'history/history.js', depends=[event], debug='history/history-debug.js', minified='history/history-min.js')

Modified: hurry.yui/trunk/src/hurry/yui/yuidepend.py
===================================================================
--- hurry.yui/trunk/src/hurry/yui/yuidepend.py	2008-09-30 17:30:09 UTC (rev 91639)
+++ hurry.yui/trunk/src/hurry/yui/yuidepend.py	2008-09-30 18:27:48 UTC (rev 91640)
@@ -24,29 +24,30 @@
         name = normalize_name(name)
         inclusion_map[name] = ResourceInclusion(yui,
                                                 deminize(value['path']))
-
-    # fix up dependency structure, rollups
+                
+    # fix up dependency structure
+    # XXX note that this doesn't establish proper rollup backreferences
+    # but this doesn't matter as we're just going to generate the
+    # code that does...
     for name, value in d.items():
         name = normalize_name(name)
         inclusion = inclusion_map[name]
-        require_inclusions = []
+
         for require in value.get('requires', []):
             require = normalize_name(require)
-            require_inclusions.append(inclusion_map[require])
-        inclusion.depends = require_inclusions
-        rollup_inclusions = []
-        for rollup_name in value.get('supersedes', []):
-            rollup_name = normalize_name(rollup_name)
-            r = inclusion_map[rollup_name]
-            rollup_inclusion = ResourceInclusion(
-                yui, r.relpath)
-            rollup_inclusions.append(rollup_inclusion)
-        inclusion.rollups = rollup_inclusions
-        mode_inclusions = {}
-        for mode_name, path in get_modes(inclusion.relpath).items():
-            mode_inclusions[mode_name] = ResourceInclusion(
-                yui, path) # XXX rollups
-        inclusion.modes = mode_inclusions
+            inclusion.depends.append(inclusion_map[require])
+
+        for supersede_name in value.get('supersedes', []):
+            orig_supersede_name = supersede_name
+            supersede_name = normalize_name(supersede_name)
+            r = inclusion_map[supersede_name]
+            # only supersede things that don't supersede themselves
+            if not d[orig_supersede_name].get('supersedes'):
+                inclusion.supersedes.append(r)
+
+        for mode_name in get_modes(inclusion):
+            inclusion.modes[mode_name] = mode_inclusion = convert_to_mode(
+                inclusion, mode_name)
         
     # now generate code
     print generate_code(**inclusion_map)
@@ -60,15 +61,27 @@
         rest = rest[:-len('-min')]
     return rest + ext
 
-def get_modes(path):
-    rest, ext = os.path.splitext(path)
+def convert_to_mode(inclusion, mode):
+    rest, ext = os.path.splitext(inclusion.relpath)
+    if mode == 'minified':
+        result = ResourceInclusion(inclusion.library,
+                                   rest + '-min' + ext)
+    elif mode == 'debug':
+        result = ResourceInclusion(inclusion.library,
+                                   rest + '-debug' + ext)
+    else:
+        result = inclusion
+        
+    return result
+
+def get_modes(inclusion):
+    ext = inclusion.ext()
     if ext == '.css':
-        return {'minified': rest + '-min' + ext}
+        return ['minified']
     elif ext == '.js':
-        return {'minified': rest + '-min' + ext,
-                'debug': rest + '-debug' + ext}
+        return ['minified', 'debug']
     else:
-        return {}
+        return []
     
 def sorted_dependencies(d):
     """Given dictionary created sorted list of items.



More information about the Checkins mailing list