Author: jmorliaguet
Date: Tue May  9 09:52:32 2006
New Revision: 3080

Added:
   cpsskins/branches/paris-sprint-2006/doc/utils.txt   (contents, props changed)
   cpsskins/branches/paris-sprint-2006/tests/test_utils.py   (contents, props 
changed)
Modified:
   cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py
   cpsskins/branches/paris-sprint-2006/utils.py

Log:

- moved insertCSSClass to cpsskins.utils



Added: cpsskins/branches/paris-sprint-2006/doc/utils.txt
==============================================================================
--- (empty file)
+++ cpsskins/branches/paris-sprint-2006/doc/utils.txt   Tue May  9 09:52:32 2006
@@ -0,0 +1,43 @@
+
+$Id$
+
+==============
+MISC UTILITIES
+==============
+
+    >>> from cpsskins.utils import insertCSSClass, camelize
+
+insertCSSClass
+--------------
+
+cpsskins.utils.insertCSSClass inserts a CSS class in the first tag of an
+HTML string.
+
+    >>> print insertCSSClass(u'<div></div>', u'someClass')
+    <div class="someClass"></div>
+
+    >>> print insertCSSClass(u'<div><span></span></div>', u'someClass')
+    <div class="someClass"><span></span></div>
+
+    >>> print insertCSSClass(u'<div>abc</div>', u'someClass')
+    <div class="someClass">abc</div>
+
+    >>> print insertCSSClass(u'<div class="first"></div>', u'someClass')
+    <div class="first someClass"></div>
+
+edge cases:
+
+    >>> print insertCSSClass(u'<div>\n</div>', u'someClass')
+    <div class="someClass"></div>
+
+    >>> print insertCSSClass(u'<div\n class="first">\n</div>', u'someClass')
+    <div class="first someClass"></div>
+
+    >>> print insertCSSClass(u'', u'someClass')
+    <BLANKLINE>
+
+    >>> print insertCSSClass(u'123', u'someClass')
+    123
+
+    >>> print insertCSSClass(u'<div', u'someClass')
+    <div

Modified: cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py      
(original)
+++ cpsskins/branches/paris-sprint-2006/standard/filters/style/__init__.py      
Tue May  9 09:52:32 2006
@@ -17,21 +17,15 @@
 """
 __docformat__ = "reStructuredText"
 
-import re
-
 from zope.interface import implements, Interface
 from zope.component import adapts, getUtility
 
+from cpsskins import utils
 from cpsskins.standard.formats.style import IStyle
 from cpsskins.browser.rendering.interfaces import IFilterView
 from cpsskins.relations.interfaces import IRelatable
 from cpsskins.setup.interfaces import IResourceManager, IIdentifiable
 
-
-startTag = re.compile('<.*?>')
-classAttr = re.compile(' class="(.*?)"')
-lineBreaks = re.compile('(\n|\r)')
-
 class ICSSRenderer(Interface):
     """Renders a style in CSS"""
 
@@ -85,22 +79,7 @@
     def __call__(self, markup, info):
         """Apply the style to the markup.
         """
-        markup = lineBreaks.sub('', markup)
-        s = startTag.search(markup)
-        if s is None:
-            return markup
-        res = s.group()
-        in_brackets = res[1:-1]
-        c = classAttr.search(in_brackets)
-        if c is not None:
-            class_attrs = [c.group(1)]
-            start, end = c.span()
-            in_brackets = in_brackets[:start] + in_brackets[end:]
-        else:
-            class_attrs = []
-        class_attrs.append(str(ICSSRenderer(self.context)))
-        final = '<%s class="%s">' % (in_brackets, ' '.join(class_attrs))
-        return startTag.sub(final, markup, count=1)
+        return utils.insertCSSClass(markup, str(ICSSRenderer(self.context)))
 
 class CSSRenderer(object):
     """Render a style in CSS

Added: cpsskins/branches/paris-sprint-2006/tests/test_utils.py
==============================================================================
--- (empty file)
+++ cpsskins/branches/paris-sprint-2006/tests/test_utils.py     Tue May  9 
09:52:32 2006
@@ -0,0 +1,30 @@
+##############################################################################
+#
+# Copyright (c) 2005-2006 Nuxeo and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""DOM tests
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import unittest
+
+from zope.testing.doctestunit import DocFileSuite
+
+def test_suite():
+    return unittest.TestSuite((
+        DocFileSuite('../doc/utils.txt'),
+        ))
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')

Modified: cpsskins/branches/paris-sprint-2006/utils.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/utils.py        (original)
+++ cpsskins/branches/paris-sprint-2006/utils.py        Tue May  9 09:52:32 2006
@@ -17,11 +17,17 @@
 """
 __docformat__ = "reStructuredText"
 
+import re
+
 from zope.component import getSiteManager, getGlobalSiteManager
 from zope.app.zapi import getParent
 
 from cpsskins.thememanager import IThemeManagementFolder
 
+startTag = re.compile('<.*?>')
+classAttr = re.compile(' class="(.*?)"')
+lineBreaks = re.compile('(\n|\r)')
+
 def getThemeManager(context=None, name=u''):
     # global utility
     if context is None:
@@ -92,3 +98,27 @@
     set_width(page[u'main'][u'right'], u'20%')
 
     return theme
+
+def camelize(text):
+    # TODO
+    return text
+
+def insertCSSClass(markup, css_class):
+    """Insert a CSS class in the first tag of some HTML markup.
+    """
+    markup = lineBreaks.sub(u'', markup)
+    s = startTag.search(markup)
+    if s is None:
+        return markup
+    res = s.group()
+    in_brackets = res[1:-1]
+    c = classAttr.search(in_brackets)
+    if c is not None:
+        class_attrs = [c.group(1)]
+        start, end = c.span()
+        in_brackets = in_brackets[:start] + in_brackets[end:]
+    else:
+        class_attrs = []
+    class_attrs.append(css_class)
+    final = u'<%s class="%s">' % (in_brackets, u' '.join(class_attrs))
+    return startTag.sub(final, markup, count=1)
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to