Browse files

initial commit

  • Loading branch information...
0 parents commit 2463ed0a9c218e685056a51610535f2bb6a18418 @vangheem vangheem committed Oct 25, 2011
Showing with 5,805 additions and 0 deletions.
  1. +2 −0 MANIFEST.in
  2. +4 −0 README.txt
  3. +7 −0 docs/HISTORY.txt
  4. +52 −0 docs/INSTALL.txt
  5. +339 −0 docs/LICENSE.GPL
  6. +16 −0 docs/LICENSE.txt
  7. +1 −0 plonetheme.bootstrap-configure.zcml
  8. +6 −0 plonetheme/__init__.py
  9. +4 −0 plonetheme/bootstrap/__init__.py
  10. +1 −0 plonetheme/bootstrap/browser/__init__.py
  11. +25 −0 plonetheme/bootstrap/browser/configure.zcml
  12. +15 −0 plonetheme/bootstrap/browser/interfaces.py
  13. BIN plonetheme/bootstrap/browser/templates/.DS_Store
  14. +2 −0 plonetheme/bootstrap/browser/templates/plone.app.layout.viewlets.logo.pt
  15. +24 −0 plonetheme/bootstrap/browser/templates/plone.app.layout.viewlets.path_bar.pt
  16. +29 −0 plonetheme/bootstrap/browser/templates/plone.app.layout.viewlets.personal_bar.pt
  17. +21 −0 plonetheme/bootstrap/browser/templates/plone.app.layout.viewlets.searchbox.pt
  18. +47 −0 plonetheme/bootstrap/browser/templates/plone.app.layout.viewlets.sections.pt
  19. +22 −0 plonetheme/bootstrap/browser/utils.py
  20. +14 −0 plonetheme/bootstrap/configure.zcml
  21. +11 −0 plonetheme/bootstrap/locales/README.txt
  22. +22 −0 plonetheme/bootstrap/profiles.zcml
  23. +4 −0 plonetheme/bootstrap/profiles/default/cssregistry.xml
  24. +19 −0 plonetheme/bootstrap/profiles/default/jsregistry.xml
  25. +4 −0 plonetheme/bootstrap/profiles/default/metadata.xml
  26. +1 −0 plonetheme/bootstrap/profiles/default/plonetheme.bootstrap_various.txt
  27. +50 −0 plonetheme/bootstrap/profiles/default/skins.xml
  28. +43 −0 plonetheme/bootstrap/profiles/default/viewlets.xml
  29. +11 −0 plonetheme/bootstrap/setuphandlers.py
  30. +16 −0 plonetheme/bootstrap/skins.zcml
  31. +3 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_custom_images/CONTENT.txt
  32. +3 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_custom_templates/CONTENT.txt
  33. +165 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_custom_templates/main_template.pt
  34. +10 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/CONTENT.txt
  35. +1,924 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/base.css.dtml
  36. +47 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/base_properties.props
  37. +111 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/bootstrap-alerts.js
  38. +53 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/bootstrap-dropdown.js
  39. +55 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/bootstrap-integration.js
  40. +137 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/ploneCustom.css.dtml
  41. +18 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/portlets.css.dtml
  42. +2,374 −0 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/public.css.dtml
  43. +55 −0 plonetheme/bootstrap/tests.py
  44. +1 −0 plonetheme/bootstrap/version.txt
  45. +37 −0 setup.py
2 MANIFEST.in
@@ -0,0 +1,2 @@
+recursive-include plonetheme *
+global-exclude *pyc
4 README.txt
@@ -0,0 +1,4 @@
+Introduction
+============
+
+
7 docs/HISTORY.txt
@@ -0,0 +1,7 @@
+Changelog
+=========
+
+1.0a1dev (unreleased)
+---------------------
+
+- Initial release
52 docs/INSTALL.txt
@@ -0,0 +1,52 @@
+plonetheme.bootstrap Installation
+---------------------------------
+
+To install plonetheme.bootstrap into the global Python environment (or a workingenv),
+using a traditional Zope 2 instance, you can do this:
+
+* When you're reading this you have probably already run
+ ``easy_install plonetheme.bootstrap``. Find out how to install setuptools
+ (and EasyInstall) here:
+ http://peak.telecommunity.com/DevCenter/EasyInstall
+
+* If you are using Zope 2.9 (not 2.10), get `pythonproducts`_ and install it
+ via::
+
+ python setup.py install --home /path/to/instance
+
+into your Zope instance.
+
+* Create a file called ``plonetheme.bootstrap-configure.zcml`` in the
+ ``/path/to/instance/etc/package-includes`` directory. The file
+ should only contain this::
+
+ <include package="plonetheme.bootstrap" />
+
+.. _pythonproducts: http://plone.org/products/pythonproducts
+
+
+Alternatively, if you are using zc.buildout and the plone.recipe.zope2instance
+recipe to manage your project, you can do this:
+
+* Add ``plonetheme.bootstrap`` to the list of eggs to install, e.g.:
+
+ [buildout]
+ ...
+ eggs =
+ ...
+ plonetheme.bootstrap
+
+* Tell the plone.recipe.zope2instance recipe to install a ZCML slug:
+
+ [instance]
+ recipe = plone.recipe.zope2instance
+ ...
+ zcml =
+ plonetheme.bootstrap
+
+* Re-run buildout, e.g. with:
+
+ $ ./bin/buildout
+
+You can skip the ZCML slug if you are going to explicitly include the package
+from another package's configure.zcml file.
339 docs/LICENSE.GPL
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
16 docs/LICENSE.txt
@@ -0,0 +1,16 @@
+ plonetheme.bootstrap is copyright
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ MA 02111-1307 USA.
1 plonetheme.bootstrap-configure.zcml
@@ -0,0 +1 @@
+<include package="plonetheme.bootstrap" />
6 plonetheme/__init__.py
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
4 plonetheme/bootstrap/__init__.py
@@ -0,0 +1,4 @@
+ # -*- extra stuff goes here -*-
+
+def initialize(context):
+ """Initializer called when used as a Zope 2 product."""
1 plonetheme/bootstrap/browser/__init__.py
@@ -0,0 +1 @@
+#
25 plonetheme/bootstrap/browser/configure.zcml
@@ -0,0 +1,25 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:browser="http://namespaces.zope.org/browser"
+ i18n_domain="plonetheme.bootstrap">
+
+ <interface
+ interface=".interfaces.IThemeSpecific"
+ type="zope.publisher.interfaces.browser.IBrowserSkinType"
+ name="Bootstrap Theme"
+ />
+
+ <include package="z3c.jbot" file="meta.zcml" />
+ <browser:templateOverrides
+ layer=".interfaces.IThemeSpecific"
+ directory="templates" />
+
+ <browser:page
+ name="bootstrap_utils"
+ for="*"
+ permission="zope.Public"
+ class=".utils.BootstrapUtils"
+ allowed_interface=".interfaces.IBootstrapUtils"
+ />
+
+</configure>
15 plonetheme/bootstrap/browser/interfaces.py
@@ -0,0 +1,15 @@
+from zope.interface import Interface
+from plone.theme.interfaces import IDefaultPloneLayer
+
+
+class IThemeSpecific(IDefaultPloneLayer):
+ """Marker interface that defines a Zope 3 browser layer.
+ If you need to register a viewlet only for the
+ "Bootstrap Theme" theme, this interface must be its layer
+ (in bootstrap/viewlets/configure.zcml).
+ """
+
+
+class IBootstrapUtils(Interface):
+ def bootstrap():
+ pass
BIN plonetheme/bootstrap/browser/templates/.DS_Store
Binary file not shown.
2 plonetheme/bootstrap/browser/templates/plone.app.layout.viewlets.logo.pt
@@ -0,0 +1,2 @@
+<a class="brand" href="#" tal:content="context/@@plone_portal_state/portal_title"
+ tal:attributes="href context/@@plone_portal_state/navigation_root_url">Site Title</a>
24 plonetheme/bootstrap/browser/templates/plone.app.layout.viewlets.path_bar.pt
@@ -0,0 +1,24 @@
+<ul class="breadcrumb" tal:define="breadcrumbs view/breadcrumbs;">
+ <li id="breadcrumbs-home">
+ <a href="#" tal:attributes="href view/navigation_root_url">Home</a>
+ <span class="divider">/</span></li>
+
+ <tal:crumb tal:repeat="crumb breadcrumbs">
+ <tal:item tal:define="is_last repeat/crumb/end;
+ url crumb/absolute_url;
+ title crumb/Title">
+ <li tal:attributes="class python: is_last and 'active' or ''; id string:breadcrumbs-${repeat/crumb/number};">
+ <a href="#"
+ tal:omit-tag="not: url"
+ tal:condition="python:not is_last"
+ tal:attributes="href url"
+ tal:content="title">
+ crumb
+ </a>
+ <span class="divider" tal:condition="not: is_last">/</span>
+ <tal:last tal:content="title" tal:condition="is_last" />
+ </li>
+ </tal:item>
+ </tal:crumb>
+
+</ul>
29 plonetheme/bootstrap/browser/templates/plone.app.layout.viewlets.personal_bar.pt
@@ -0,0 +1,29 @@
+<tal:define i18n:domain="plone">
+
+ <ul class="nav secondary-nav" id="portal-personaltools"
+ tal:condition="python:view.user_actions and not view.anonymous">
+ <tal:block condition="not: view/anonymous">
+ <li class="dropdown" data-dropdown="dropdown">
+ <a id="user-name" class="dropdown-toggle"
+ href="#"
+ tal:attributes="href view/homelink_url"
+ tal:content="view/user_name">
+ John
+ </a>
+
+ <ul class="dropdown-menu">
+ <li tal:repeat="action view/user_actions"
+ tal:attributes="id string:personaltools-${action/id}">
+ <a href=""
+ tal:attributes="href action/url"
+ tal:content="action/title"
+ i18n:translate="">
+ action title
+ </a>
+ </li>
+ </ul>
+ </li>
+ </tal:block>
+ </ul>
+
+</tal:define>
21 plonetheme/bootstrap/browser/templates/plone.app.layout.viewlets.searchbox.pt
@@ -0,0 +1,21 @@
+<tal:define
+ tal:define="navigation_root_url view/navigation_root_url;">
+ <form name="searchform" class="pull-right"
+ action="search"
+ tal:attributes="action string:${navigation_root_url}/search;">
+
+ <input name="SearchableText"
+ type="text"
+ size="18"
+ value=""
+ title="Search Site"
+ class="input-medium"
+ accesskey="4"
+ i18n:attributes="title title_search_site;"
+ tal:attributes="value request/form/SearchableText|nothing;"
+ placeholder="Search"
+ class="searchField inputLabel" />
+
+ <button class="btn" type="submit">Search</button>
+ </form>
+</tal:define>
47 plonetheme/bootstrap/browser/templates/plone.app.layout.viewlets.sections.pt
@@ -0,0 +1,47 @@
+<tal:sections tal:define="nav context/@@bootstrap_utils/navigation;
+ selected_tab python:view.selected_portal_tab"
+ tal:condition="nav"
+ i18n:domain="plone">
+ <h5 class="hiddenStructure" i18n:translate="heading_sections">Sections</h5>
+
+ <ul class="nav" id="navigation">
+ <li id="portaltab-index_html">
+ <a title="" tal:attributes="href context/@@plone_portal_state/navigation_root_url">Home</a>
+ </li>
+ <tal:tabs tal:repeat="tab nav">
+ <tal:define tal:define="item tab/item;
+ children tab/children;">
+ <li tal:define="tid item/id"
+ tal:condition="not: item/exclude_from_nav"
+ tal:attributes="id string:portaltab-${tid};
+ class python:selected_tab==tid and 'active' or '';
+ data-dropdown python: children and 'dropdown' or '';">
+ <a href=""
+ tal:content="item/Title"
+ tal:attributes="href item/getURL;
+ title item/Description|nothing;
+ class python: children and 'dropdown-toggle' or '';">
+ Tab Name
+ </a>
+ <ul class="dropdown-menu" tal:condition="children">
+ <tal:tabs tal:repeat="tab children">
+ <tal:define tal:define="item tab/item;
+ children tab/children;">
+ <li tal:define="tid item/id"
+ tal:attributes="id string:portaltab-${tid};
+ class python:selected_tab==tid and 'active' or ''">
+ <a href=""
+ tal:content="item/Title"
+ tal:attributes="href item/getURL;
+ title item/Description|nothing;">
+ Tab Name
+ </a>
+ </li>
+ </tal:define>
+ </tal:tabs>
+ </ul>
+ </li>
+ </tal:define>
+ </tal:tabs>
+ </ul>
+</tal:sections>
22 plonetheme/bootstrap/browser/utils.py
@@ -0,0 +1,22 @@
+from zope.component import getMultiAdapter
+from zope.interface import implements
+from Products.Five import BrowserView
+from plone.app.layout.navigation.navtree import buildFolderTree
+from Products.CMFPlone.browser.navtree import NavtreeQueryBuilder
+from interfaces import IBootstrapUtils
+
+
+class BootstrapUtils(BrowserView):
+ implements(IBootstrapUtils)
+
+ def navigation(self):
+ portal_state = getMultiAdapter((self.context, self.request),
+ name='plone_portal_state')
+ portal = portal_state.portal()
+ queryBuilder = NavtreeQueryBuilder(portal)
+ query = queryBuilder()
+ query['path']['depth'] = 2
+
+ tree = buildFolderTree(portal, obj=portal, query=query)['children']
+# for
+ return tree
14 plonetheme/bootstrap/configure.zcml
@@ -0,0 +1,14 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:five="http://namespaces.zope.org/five"
+ xmlns:cmf="http://namespaces.zope.org/cmf"
+ xmlns:i18n="http://namespaces.zope.org/i18n"
+ i18n_domain="plonetheme.bootstrap">
+
+ <five:registerPackage package="." initialize=".initialize" />
+ <include package=".browser" />
+ <include file="skins.zcml" />
+ <include file="profiles.zcml" />
+ <i18n:registerTranslations directory="locales" />
+
+</configure>
11 plonetheme/bootstrap/locales/README.txt
@@ -0,0 +1,11 @@
+This directory will be the home for internationalizations for your theme
+package. For more information on internationalization please consult the
+following sources:
+
+http://plone.org/documentation/kb/product-skin-localization
+http://plone.org/documentation/kb/i18n-for-developers
+http://www.mattdorn.com/content/plone-i18n-a-brief-tutorial/
+http://grok.zope.org/documentation/how-to/how-to-internationalize-your-application
+http://maurits.vanrees.org/weblog/archive/2007/09/i18n-locales-and-plone-3.0
+http://n2.nabble.com/Recipe-for-overriding-translations-td3045492ef221724.html
+http://dev.plone.org/plone/wiki/TranslationGuidelines
22 plonetheme/bootstrap/profiles.zcml
@@ -0,0 +1,22 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
+ i18n_domain="plonetheme.bootstrap">
+
+ <genericsetup:registerProfile
+ name="default"
+ title="Bootstrap Theme"
+ directory="profiles/default"
+ description='Extension profile for the "Bootstrap Theme" Plone theme.'
+ provides="Products.GenericSetup.interfaces.EXTENSION"
+ />
+
+ <genericsetup:importStep
+ name="plonetheme.bootstrap.various"
+ title="Bootstrap Theme: miscellaneous import steps"
+ description="Various import steps that are not handled by GS import/export handlers."
+ handler="plonetheme.bootstrap.setuphandlers.setupVarious">
+ <depends name="skins"/>
+ </genericsetup:importStep>
+
+</configure>
4 plonetheme/bootstrap/profiles/default/cssregistry.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<object name="portal_css">
+
+</object>
19 plonetheme/bootstrap/profiles/default/jsregistry.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<object name="portal_javascripts">
+
+ <javascript
+ id="bootstrap-integration.js"
+ cacheable="True" compression="safe" cookable="True"
+ enabled="True" expression="" inline="False"/>
+
+ <javascript
+ id="bootstrap-dropdown.js"
+ cacheable="True" compression="safe" cookable="True"
+ enabled="True" expression="" inline="False"/>
+
+ <javascript
+ id="bootstrap-alerts.js"
+ cacheable="True" compression="safe" cookable="True"
+ enabled="True" expression="" inline="False"/>
+
+</object>
4 plonetheme/bootstrap/profiles/default/metadata.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<metadata>
+ <version>1000</version>
+</metadata>
1 plonetheme/bootstrap/profiles/default/plonetheme.bootstrap_various.txt
@@ -0,0 +1 @@
+This file is used as a marker in setuphandlers.py.
50 plonetheme/bootstrap/profiles/default/skins.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<!-- This file holds the setup configuration for the portal_skins tool -->
+
+<!-- Change the value of these parameters to modify portal_skins behavior:
+ - allow_any: change it to True if you want users to be able to select the
+ skin to use from their personal preferences management page. In the
+ ZMI, this value is known as 'Skin flexibility'.
+ - cookie_persistence: change it to True if you want to make the skin cookie
+ persist indefinitely. In the ZMI, this value is known as 'Skin Cookie
+ persistence'.
+ -->
+<object name="portal_skins" allow_any="False" cookie_persistence="False"
+ default_skin="Bootstrap Theme">
+
+ <!-- This list registers the folders that are stored in the skins directory
+ of your product (on the filesystem) as Filesystem Directory Views within
+ the portal_skins tool, so that they become usable as skin layers.
+ -->
+ <object name="plonetheme_bootstrap_custom_images"
+ meta_type="Filesystem Directory View"
+ directory="plonetheme.bootstrap:skins/plonetheme_bootstrap_custom_images"/>
+ <object name="plonetheme_bootstrap_custom_templates"
+ meta_type="Filesystem Directory View"
+ directory="plonetheme.bootstrap:skins/plonetheme_bootstrap_custom_templates"/>
+ <object name="plonetheme_bootstrap_styles"
+ meta_type="Filesystem Directory View"
+ directory="plonetheme.bootstrap:skins/plonetheme_bootstrap_styles"/>
+
+ <!-- A skin-path in this file corresponds to a Skin Selection in the
+ 'Properties' tab of the portal_skins tool, in the ZMI.
+ You can define for each new skin path the layers that it holds. A new
+ skin can be based on another existing one by using the 'based-on'
+ attribute.
+ The definition of a layer accepts these parameters:
+ - name: quite self explanatory, the name of the layer.
+ - insert-before: name of the layer before which it must be added.
+ - insert-after: name of the layer after which it must be added.
+ Note: insert-before (and -after) accepts the value "*" which means
+ "all".
+ -->
+ <skin-path name="Bootstrap Theme" based-on="Plone Default">
+ <layer name="plonetheme_bootstrap_custom_images"
+ insert-after="custom"/>
+ <layer name="plonetheme_bootstrap_custom_templates"
+ insert-after="plonetheme_bootstrap_custom_images"/>
+ <layer name="plonetheme_bootstrap_styles"
+ insert-after="plonetheme_bootstrap_custom_templates"/>
+ </skin-path>
+
+</object>
43 plonetheme/bootstrap/profiles/default/viewlets.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<!-- This file holds the setup configuration of the viewlet managers
+ for the "Bootstrap Theme" skin.
+ -->
+
+<object>
+
+ <!-- Viewlets keep the same ordering than the default skin ('Plone Default'
+ out of the box).
+ You can specify skinname="*" if you want changes apply for all skins.
+ Using "True"" for the 'make-default' parameter will make the 'skinname'
+ value set as default skinname. Means the name of the skin that would be
+ used in case the viewlets ordering was not specified for the currently
+ used skin.
+ The 'based-on' attribute lets you inherit the viewlets ordering from an
+ existing skin.
+ -->
+ <order manager="plone.portalfooter" skinname="Bootstrap Theme"
+ based-on="Plone Default">
+ <!-- The definition of a viewlet accepts these parameters:
+ - name: quite self explanatory, the name of the viewlet.
+ - insert-before: name of the viewlet before which it must be added or
+ moved.
+ - insert-after: name of the viewlet after which it must be added
+ or moved.
+ - remove: supported but rarely needed, removes the viewlet from the
+ ordering list (doesn't mean that it hides the viewlet).
+ Note: insert-before and -after accept the value "*" which means
+ "all".
+ -->
+<!-- EXAMPLE (UNCOMMENT TO MAKE AVAILABLE):
+ <viewlet name="plonetheme.someviewlet"
+ insert-before="*" />
+-->
+ </order>
+
+ <hidden manager="plone.portalheader" skinname="Bootstrap Theme">
+<!-- EXAMPLE (UNCOMMENT TO MAKE AVAILABLE):
+ <viewlet name="plone.global_sections" />
+-->
+ </hidden>
+
+</object>
11 plonetheme/bootstrap/setuphandlers.py
@@ -0,0 +1,11 @@
+def setupVarious(context):
+
+ # Ordinarily, GenericSetup handlers check for the existence of XML files.
+ # Here, we are not parsing an XML file, but we use this text file as a
+ # flag to check that we actually meant for this import step to be run.
+ # The file is found in profiles/default.
+
+ if context.readDataFile('plonetheme.bootstrap_various.txt') is None:
+ return
+
+ # Add additional setup code here
16 plonetheme/bootstrap/skins.zcml
@@ -0,0 +1,16 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:cmf="http://namespaces.zope.org/cmf"
+ i18n_domain="plonetheme.bootstrap">
+
+ <!-- File System Directory Views registration -->
+ <cmf:registerDirectory name="plonetheme_bootstrap_custom_images"/>
+ <cmf:registerDirectory name="plonetheme_bootstrap_custom_templates"/>
+ <cmf:registerDirectory name="plonetheme_bootstrap_styles"/>
+
+ <!-- Note: This could also be done for all folders at once
+ by replacing the previous lines with this one:
+ <cmf:registerDirectory name="skins" directory="skins" recursive="True" />
+ -->
+
+</configure>
3 plonetheme/bootstrap/skins/plonetheme_bootstrap_custom_images/CONTENT.txt
@@ -0,0 +1,3 @@
+This folder holds Filesystem Image files that are registered for the
+'Bootstrap Theme' Skin Selection only.
+They act as replacement for the default Plone (or 3rd party products) ones.
3 plonetheme/bootstrap/skins/plonetheme_bootstrap_custom_templates/CONTENT.txt
@@ -0,0 +1,3 @@
+This folder holds Filesystem Page Template files that are registered for the
+'Bootstrap Theme' Skin Selection only.
+They act as replacement for the default Plone (or 3rd party products) ones.
165 plonetheme/bootstrap/skins/plonetheme_bootstrap_custom_templates/main_template.pt
@@ -0,0 +1,165 @@
+<metal:page define-macro="master">
+<tal:doctype tal:replace="structure string:&lt;!DOCTYPE html PUBLIC
+ &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
+ &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;" />
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ tal:define="portal_state context/@@plone_portal_state;
+ context_state context/@@plone_context_state;
+ plone_view context/@@plone;
+ lang portal_state/language;
+ view nocall:view | nocall: plone_view;
+ dummy python: plone_view.mark_view(view);
+ portal_url portal_state/portal_url;
+ checkPermission nocall: context/portal_membership/checkPermission;
+ site_properties context/portal_properties/site_properties;
+ ajax_load request/ajax_load | nothing;
+ ajax_include_head request/ajax_include_head | nothing"
+ tal:attributes="lang lang;">
+
+ <metal:cache use-macro="context/global_cache_settings/macros/cacheheaders">
+ Get the global cache headers located in global_cache_settings.
+ </metal:cache>
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <tal:comment replace="nothing">
+ Forces IE8+ into newest rendering engine even if on an intranet. This has to be defined before any script/style tags.
+ </tal:comment>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+
+ <metal:baseslot define-slot="base">
+ <base tal:attributes="href plone_view/renderBase" /><!--[if lt IE 7]></base><![endif]-->
+ </metal:baseslot>
+
+ <tal:notajax tal:condition="python:not ajax_load or ajax_include_head">
+ <div tal:replace="structure provider:plone.htmlhead" />
+ <link tal:replace="structure provider:plone.htmlhead.links" />
+
+ <tal:comment replace="nothing">
+ Various slots where you can insert elements in the header from a template.
+ </tal:comment>
+ <metal:topslot define-slot="top_slot" />
+ <metal:headslot define-slot="head_slot" />
+ <metal:styleslot define-slot="style_slot" />
+ <metal:javascriptslot define-slot="javascript_head_slot" />
+
+ <meta name="viewport" content="width=device-width; initial-scale=0.6666; maximum-scale=1.0; minimum-scale=0.6666" />
+ <meta name="generator" content="Plone - http://plone.org" />
+ </tal:notajax>
+</head>
+
+<body tal:define="isRTL portal_state/is_rtl;
+ sl python:plone_view.have_portlets('plone.leftcolumn', view);
+ sr python:plone_view.have_portlets('plone.rightcolumn', view);
+ body_class python:plone_view.bodyClass(template, view);
+ mainspan python: (sl or sr) and 'span11' or 'span16';"
+ tal:attributes="class body_class;
+ dir python:isRTL and 'rtl' or 'ltr'">
+
+<div class="container"
+ tal:define="show_border context/@@plone/showEditableBorder; show_border python:show_border and not ajax_load"
+ tal:attributes="class python:show_border and 'documentEditable container' or 'container'">
+
+<div class="topbar">
+ <div class="fill">
+ <div class="container">
+ <div tal:replace="structure provider:plone.portaltop" />
+ </div>
+ </div>
+</div>
+
+<div class="content">
+
+<div class="row">
+<div class="span11" tal:attributes="class mainspan">
+<div id="viewlet-above-content" tal:content="structure provider:plone.abovecontent" tal:condition="not:ajax_load" />
+<metal:block define-slot="content">
+ <div metal:define-macro="content" id="siteContent">
+
+ <div id="edit-bar"
+ tal:condition="show_border"
+ tal:content="structure provider:plone.contentviews" />
+
+ <div metal:use-macro="context/global_statusmessage/macros/portal_message">
+ Status message
+ </div>
+
+ <metal:slot define-slot="body">
+
+ <metal:header define-slot="header" tal:content="nothing">
+ Visual Header
+ </metal:header>
+
+ <metal:bodytext define-slot="main">
+
+ <div class="page-header">
+ <metal:title define-slot="content-title">
+ <h1 metal:use-macro="context/kss_generic_macros/macros/generic_title_view">
+ Generic KSS Title. Is rendered with class="documentFirstHeading".
+ </h1>
+ </metal:title>
+ <div id="viewlet-below-content-title"
+ tal:content="structure provider:plone.belowcontenttitle" tal:condition="not:ajax_load" />
+ </div>
+
+ <div class="row">
+ <metal:description define-slot="content-description">
+ <div metal:use-macro="context/kss_generic_macros/macros/generic_description_view">
+ Generic KSS Description. Is rendered with class="documentDescription".
+ </div>
+ </metal:description>
+ </div>
+ <div class="row">
+ <div id="viewlet-above-content-body" class="row"
+ tal:content="structure provider:plone.abovecontentbody" tal:condition="not:ajax_load" />
+ <div id="content-core">
+ <metal:text define-slot="content-core" tal:content="nothing">
+ Page body text
+ </metal:text>
+ </div>
+ <div id="viewlet-below-content-body"
+ tal:content="structure provider:plone.belowcontentbody" tal:condition="not:ajax_load" />
+ </div>
+ </metal:bodytext>
+ <div class="row" id="viewlet-below-content" tal:content="structure provider:plone.belowcontent"
+ tal:condition="not:ajax_load" />
+ </metal:slot>
+ </div>
+</metal:block>
+</div>
+<div class="span5" tal:condition="python: sl or sr">
+ <tal:notajax tal:condition="not:ajax_load">
+ <div id="portlet-left"
+ metal:define-slot="column_one_slot"
+ tal:condition="sl">
+ <metal:portlets define-slot="portlets_one_slot">
+ <tal:block replace="structure provider:plone.leftcolumn" />
+ </metal:portlets>
+ </div>
+ <div id="portlet-right"
+ metal:define-slot="column_two_slot"
+ tal:condition="sr">
+ <metal:portlets define-slot="portlets_two_slot">
+ <tal:block replace="structure provider:plone.rightcolumn" />
+ </metal:portlets>
+ </div>
+ </tal:notajax>
+</div>
+</div>
+</div>
+
+ <footer tal:condition="not:ajax_load">
+ <div tal:replace="structure provider:plone.portalfooter" />
+ <div id="kss-spinner">
+ <img tal:attributes="src string:${portal_url}/spinner.gif" alt="" />
+ </div>
+ </footer>
+
+</div> <!-- /container -->
+
+</body>
+</html>
+
+</metal:page>
10 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/CONTENT.txt
@@ -0,0 +1,10 @@
+This folder holds stylesheet files that are registered for the
+'Bootstrap Theme' Skin Selection only.
+
+It is a repository for customizations of the default Plone stylesheets,
+as well as for package specific stylesheets.
+
+
+Note
+ Stylesheet files that don't use DTML can also stored in the 'browser'
+ folder and accessed as Zope 3 file resources.
1,924 plonetheme/bootstrap/skins/plonetheme_bootstrap_styles/base.css.dtml
@@ -0,0 +1,1924 @@
+/* @override
+ http://localhost:8080/4/portal_css/Sunburst%20Theme/public.css
+ http://localhost:8080/sprites/portal_css/Sunburst%20Theme/public.css
+*/
+
+/* @group CSS Reset */
+
+/* Remove implicit browser styles to have a neutral starting point:
+ - No elements should have implicit margin/padding
+ - No underline by default on links (we add it explicitly in the body text)
+ - When we want markers on lists, we will be explicit about it, and they render inline by default
+ - Browsers are inconsistent about hX/pre/code, reset
+ - Linked images should not have borders
+ */
+
+* { margin: 0; padding: 0; }
+* :link,:visited { text-decoration:none }
+* ul,ol { list-style:none; }
+* li { display: inline; }
+* h1,h2,h3,h4,h5,h6,pre,code { font-size:1em; }
+* a img,:link img,:visited img { border:none }
+a { outline: none; }
+table { border-spacing: 0; }
+img { vertical-align: text-bottom; }
+iframe { border-width: 0; border-style:none; }
+
+
+/* @end */
+
+/* @group Basics */
+
+body {
+ font: 100% Arial, FreeSans, sans-serif;
+ background: White;
+ color: Black;
+ /* width: 58em; margin: 1em auto; */
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-family: "Helvetica Neue", Arial, FreeSans, sans-serif;
+ font-weight: bold;
+ color: Black;
+ line-height: 1.5em;
+}
+h1, h2 {
+ letter-spacing: -0.05em;
+}
+h1 {
+ font-size: 2em;
+}
+h2 {
+ font-size: 1.75em;
+}
+h3 {
+ font-size: 1.25em;
+}
+h4 {
+ font-size: 1.25em;
+}
+h5 {
+ font-size: 1em;
+}
+h6 {
+ font-size: 0.8em;
+}
+h2, h3, h4, h5, h6 {
+ color: #444;
+}
+h2 a, h3 a, h4 a {
+ border-bottom: none !important;
+}
+
+p {
+}
+
+a:link, a:visited {
+ color: #205c90;
+}
+a:focus img {
+ outline: thin dotted;
+}
+dt {
+ font-weight: bold;
+}
+input {
+ font-family: "Lucida Grande", Arial, FreeSans;
+}
+
+q {
+ quotes: "“" "”" "‘" "’";
+}
+
+/* @end */
+
+/* @group Navigation/search */
+
+#portal-header {
+ position: relative;
+ z-index: 2;
+}
+
+#portal-logo {
+ display: inline-block;
+ margin: 1.375em 0;
+}
+
+#portal-globalnav {
+ clear: both;
+ font-size: 80%;
+ background: #ddd;
+ /* ensure top navigation dont touches portlets, content etc.. #10491 */
+ margin: 0 0 1em 0;
+}
+#portal-globalnav li {
+}
+#portal-globalnav li a {
+ display: inline-block;
+ padding: 0.5em 1em 2em 1em;
+ background: #ddd;
+ min-width: 6em;
+ white-space: normal;
+ /*TODO: Once we have removed the whitespace from the nav template, this can be put back*/
+ /*border-bottom: 0.1em solid White;*/
+ border-right: 0.1em solid white;
+}
+
+#portal-globalnav .selected a,
+#portal-globalnav a:hover {
+ background: #205c90;
+ color: White;
+}
+#portal-globalnav .selected a:hover {
+ background: #ddd;
+ color: #205c90;
+}
+
+#portal-languageselector {
+ float: right;
+ background: #e3e3e3;
+ position: relative;
+ top: 0;
+ right: 1px;
+ z-index: 3; /* portal-header has 2 and we need to be above to be clickable */
+ padding: 0.25em 0.5em;
+ font-size: 80%;
+ border-bottom-right-radius: 0.5em;
+ border-bottom-left-radius: 0.5em;
+ -webkit-border-bottom-right-radius: 0.5em;
+ -webkit-border-bottom-left-radius: 0.5em;
+ -moz-border-radius-bottomleft: 0.5em;
+ -moz-border-radius-bottomright: 0.5em;
+ max-width: 50%;
+}
+
+#portal-searchbox {
+ float: right;
+ text-align: left;
+ clear: right;
+ margin: 1.2em 0;
+ font-size: 80%;
+}
+
+#portal-searchbox form {
+ white-space: nowrap;
+}
+
+#portal-searchbox label {
+ font-weight: normal;
+}
+
+#searchGadget {
+ width: 13em;
+}
+#searchGadget,
+.LSBox input.searchButton {
+}
+
+.LSBox .searchSection {
+}
+
+#content input.searchField {
+ margin-bottom: 1em;
+}
+
+input.searchField {
+/* -webkit-appearance: searchfield;*/
+ -moz-appearance: searchfield;
+}
+
+/* Collapsible elements in search_form */
+
+.collapsible .collapser.collapsed {
+ padding-right: 14px;
+ background: url('arrowRight.png') center right no-repeat;
+}
+
+.collapsible .collapser.expanded {
+ padding-right: 14px;
+ background: url('arrowDown.png') center right no-repeat;
+}
+/* @end */
+
+/* @group LiveSearch */
+
+#LSResult {
+ position: absolute;
+ right: 0;
+ background: White;
+ margin: -1.5em 0 0 -7em;
+}
+
+#LSResult fieldset {
+ padding: 1em 0 0;
+ border: 0.1em solid #ccc;
+}
+
+#livesearchLegend {
+ background-color:#ccc;
+ padding:0.3em;
+}
+
+#LSResult .LSDescr {
+ font-size: 85%;
+ color: #666;
+}
+
+.LSRow,
+#LSNothingFound {
+ display: block;
+ padding: 0.5em 1em;
+ white-space: normal;
+ width:28em;
+}
+
+.LSHighlight {
+ background: #ddd;
+}
+
+/* @end */
+
+
+/* @group Path indicator (breadcrumbs) */
+
+#portal-breadcrumbs {
+ font-size: 80%;
+ margin-bottom: 1em;
+ margin-left: 0.25em;
+}
+#portal-breadcrumbs a {
+ border-bottom: none;
+ display: inline-block;
+}
+
+/* @end */
+
+
+
+
+
+/* @group Site actions */
+
+#portal-siteactions {
+ font-size: 85%;
+ padding-bottom: 2em;
+ text-align: center;
+ clear: left;
+}
+#portal-siteactions li {
+ margin-right: 0.5em;
+}
+#portal-siteactions li a:hover {
+ color: #75ad0a
+}
+
+/* @end */
+
+/* @group Listings */
+
+a.link-parent {
+}
+
+a.link-anchor {
+ border: none !important;
+ color: Black !important;
+ cursor: default !important;
+}
+#content a.link-overlay {
+ border-bottom: 1px dotted #205c90 !important;
+}
+
+dl dt .documentByLine {
+ font-weight: normal;
+}
+
+dl dt span.summary a {
+ border: none !important;
+}
+
+/* @end */
+
+/* @group Portlets */
+
+dl.portlet {
+ margin: 0 0 1em;
+ font-size: 80%;
+}
+dl.portletError {
+ background-color: #FFA500;
+}
+
+dl.portlet dt,
+div.portletAssignments div.portletHeader {
+ padding: 0.42em 1em;
+ background: #ddd;
+ line-height: normal;
+}
+dl.portlet dt.hiddenStructure {
+ padding: 0;
+}
+div.portletAssignments {
+ font-size: 0.8em;
+ line-height: 2em;
+}
+
+div.portletAssignments .managedPortletActions {
+ float: right;
+}
+div.portletAssignments .managedPortletActions a {
+ margin: 0 0.25em;
+ border: none;
+}
+
+dl.portlet dt a:link,
+dl.portlet dt a:visited,
+dl.portlet dt a:hover {
+ color: black;
+ display: block;
+ border: none;
+}
+
+dl.portlet dd.portletItem,
+dl.portlet dd.portletFooter,
+dl.portletError dd {
+ padding: 1em;
+}
+
+
+
+div.managePortletsLink,
+a.managePortletsFallback {
+ text-align: center;
+ padding: 0.25em 0.5em;
+ font-size: 80%;
+ margin: 0 auto 1em;
+ background: #ddd;
+ border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ -moz-border-radius: 0.5em;
+}
+a.managePortletsFallback {
+ display:inline-block; /* in order for our vertical margins to work on inline element */
+}
+#content a.managePortletsFallback {
+ display: block;
+ border-bottom: none !important;
+}
+
+#portlet-prefs a {
+ border: none;
+ line-height: 2em;
+}
+
+#visual-portal-wrapper dl.portletCalendar dd {
+ padding: 0;
+}
+
+#dashboard-portlets1,
+#dashboard-portlets2,
+#dashboard-portlets3,
+#dashboard-portlets4 {
+ display: inline-block;
+}
+
+/* @end */
+
+/* @group Navigation portlet */
+
+dl.portlet ul.navTree li a {
+ border: none;
+ display: block;
+ zoom: 1;
+}
+
+dl.portlet ul.navTree li a:hover {
+
+}
+
+dl.portletNavigationTree dd.portletItem {
+ padding: 0;
+}
+
+dl.portlet ul.navTreeLevel0 > .navTreeItem {
+ padding: 0.25em 1em;
+ border-bottom: 0.1em dotted #ddd;
+ line-height: 2em;
+}
+
+dl.portlet ul.navTreeLevel1 .navTreeItem {
+ padding-left: 0.5em;
+ line-height: 2em;
+}
+
+dl.portlet ul.navTree .navTreeCurrentItem {
+ background-color: #ddd;
+ border-left: 1em solid #ddd;
+ margin-left: -1em;
+ margin-right: -1em;
+}
+
+/* @end */
+
+/* @group Content Area */
+
+#content {
+ line-height: 1.5em;
+ clear: both;
+ font-size: 80%;
+ margin: 1em 0.25em 2em 0.25em;
+}
+
+/* Special case of #content - TinyMCE */
+body#content {
+ margin: 1em;
+}
+
+#content h1 {
+ margin-top: 0.5em;
+}
+
+#content h1.documentFirstHeading {
+ margin-top: 0;
+}
+
+#content p,
+#content table,
+#content dl,
+dl.portlet p,
+dl.portlet {
+ margin-bottom: 1em;
+}
+
+#content ul,
+#content ol {
+
+}
+
+#content a:link,
+dl.portlet a:link {
+ color: #205c90;
+ border-bottom: 0.1em solid #ccc;
+}
+
+#content a:visited,
+dl.portlet a:visited {
+ color: #427597;
+ border-bottom: 0.1em solid #ccc;
+}
+#content a:hover,
+dl.portlet a:hover {
+ color: #75ad0a !important; /* This one gets an !important because it should always activate in the content area, even when state coloring is active */
+}
+#content a:target {
+ background-color: #ffb;
+}
+#content span.link-external a {
+ background: transparent url(link_icon.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+#category {
+ font-size: 75%;
+ margin-bottom: 1em;
+ color: #666;
+ text-align: right;
+}
+
+#category a.link-category, span.selectedTag {
+ color: black;
+ padding: 0.25em 0.5em;
+ background: #ddd;
+ border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ -moz-border-radius: 0.5em;
+}
+#category a.link-category:hover {
+ background: #205c90;
+ color: White;
+ border-color: #205c90;
+}
+#category .separator {
+ display: none;
+}
+
+#content ul {
+ list-style-type: disc;
+ margin-left: 2em;
+}
+
+#content ol,
+dl.portlet ol {
+ list-style-type: decimal;
+ margin-left: 2em;
+}
+
+#content li,
+dl.portlet li {
+ margin-bottom: 0.25em;
+ line-height: 1.5em;
+ display: list-item;
+}
+
+#content dt {
+ font-weight: bold;
+ margin-bottom: 0;
+ margin-right: 0;
+}
+#content dd {
+ margin: 0 0 1em 2em;
+}
+
+#content pre {
+ background-color: #222;
+ color: White;
+ font-family: Consolas, Inconsolata, Menlo, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace;
+ padding: 1em;
+ overflow-x: auto;
+ font-size: 90%;
+ margin-bottom: 1em;
+ line-height: 1.25em;
+}
+#content pre.python {
+ background-color: White;
+}
+
+#content code {
+ font-family: Consolas, Inconsolata, Menlo, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace;
+}
+
+#content div.documentByLine {
+ font-size: 85%;
+ display: block;
+ color: #666;
+}
+
+#content .discreet,
+#sidebar .discreet {
+ color: #666;
+ font-size: 85%;
+ font-weight: normal;
+}
+
+#content .visualHighlight {
+ background-color: #ffb;
+}
+
+#content .pullquote {
+ margin: 0 1em 0.5em 0.5em;
+ font-weight: bold;
+ line-height: 1.25em;
+ float: right;
+ width: 35%;
+ clear: right;
+ color: #444;
+ font-size: 1.6em;
+ letter-spacing: -0.08em !important;
+}
+#content .callout {
+ background: #eee;
+ padding: 1em;
+ border-left: 1em solid #ccc;
+ clear: both;
+}
+
+
+#content table {
+ text-align: left;
+ border-collapse: collapse;
+ border-spacing: 0px;
+}
+
+#content .documentDescription,
+#content #description {
+ color: #666;
+ margin-left: 0;
+ font: bold 1.25em "Helvetica Neue", Arial, FreeSans, sans-serif;
+}
+
+#content img.tileImage,
+#content div.newsImageContainer {
+ float: right;
+ margin: 0 1em 0.5em 1em;
+}
+#content div.newsImageContainer a {
+ border-bottom: none;
+}
+#content div.newsImageContainer p.discreet {
+ margin: 0;
+ padding: 0.5em;
+ background-color: #666;
+ background-color: rgba(40,40,40,0.7);
+ color: White;
+ font-weight: bold;
+ position: relative;
+ width: 190px;
+ top: -3em;
+}
+.eventDetails {
+ float: right;
+ clear: right;
+ margin: 0 0 0.5em 1em;
+}
+
+/* @end */
+
+/* Vertical table data listings */
+table.vertical {
+}
+table.vertical th {
+ text-align: right;
+}
+table.vertical td {
+ border-top: 0.1em solid #e7e7e7;
+ padding: 0.5em;
+}
+/* Grid table listings */
+table.grid td,
+table.grid th {
+ border: 1px solid #e7e7e7;
+ padding: 0.5em;
+}
+
+.dragindicator {
+ outline: 2px solid #FFD700;
+}
+
+#foldercontents-order-column {
+ padding: 0;
+}
+
+div.listingBar {
+ font-size: 80%;
+ margin: 1em 0;
+}
+
+div.listingBar .next {
+ display: inline-block;
+ float: right;
+}
+
+div.listingBar .previous {
+ display: inline-block;
+}
+
+div.listingBar a {
+ display: inline-block;
+ padding: 0.25em 0.5em;
+ border: 0.1em solid #ccc;
+}
+
+div.listingBar a:hover {
+ color: White;
+ background-color: #329fd7;
+ border-color: #329fd7;
+}
+
+/* @end */
+
+/* @group Status messages */
+
+dl.portalMessage {
+ margin: 1em 0;
+ font-size: 80%;
+ border: 1px solid #996;
+ background-color: #ffffe3;
+ clear:both;
+}
+dl.portalMessage a,
+#content dl.portalMessage a {
+ color: black;
+ border-bottom: 1px solid #888;
+}
+dl.portalMessage dt {
+ background-color: #996;
+ font-weight: bold;
+ float: left;
+ margin: 0 0.5em 0 0;
+ padding: 0.5em 0.75em;
+ color: White;
+ line-height: 1.25em;
+}
+dl.portalMessage dd {
+ padding: 0.5em 0.5em;
+ margin: 0;
+ line-height: 1.25em;
+}
+dl.warning {
+ border-color: #d80;
+}
+dl.warning dt {
+ background-color: #d80;
+}
+dl.error {
+ border-color: #d00;
+}
+dl.error dt {
+ background-color: #d00;
+}
+dl.warning {
+ border-color: #d80;
+}
+dl.warning dd {
+ background-color: #fd7;
+}
+dl.error {
+ border-color: red;
+}
+dl.error dd {
+ background-color: #fdc;
+}
+
+/* Additional specificity for when status is shown inside #content */
+#content dl.portalMessage {
+ font-size: 100%;
+}
+#content dl.portalMessage dt {
+ margin: 0 0.5em 0 0;
+ padding: 0.5em 0.75em;
+}
+#content dl.portalMessage dd {
+ margin: 0;
+}
+
+/* @end */
+
+/* @group Editing */
+
+/* @group Tabs */
+
+/* Color differences between the two tab types */
+#content ul.formTabs {
+ background-color: #ddd;
+ border: 0.3em solid #ddd;
+}
+#edit-bar {
+ background-color: #75ad0a;
+ border: 0.25em solid #75ad0a;
+ font-size: 80%;
+ min-height: 2em;
+ margin-bottom: 0;
+ padding-top: 0.05em;
+}
+#content-views {
+ float: left;
+ background-color: #75ad0a;
+}
+#content-views a {
+ color: White;
+}
+
+/* Shared CSS between the two tab types */
+#edit-bar,
+#content ul.formTabs {
+ display: block;
+ border-style: solid solid none solid;
+ margin-left: 0;
+}
+
+#content ul.formTabs {
+ border-top-right-radius: 0.5em;
+ border-top-left-radius: 0.5em;
+ -webkit-border-top-right-radius: 0.5em;
+ -webkit-border-top-left-radius: 0.5em;
+ -moz-border-radius-topleft: 0.5em;
+ -moz-border-radius-topright: 0.5em;
+}
+
+#content li.formTab {
+ display: inline;
+ margin-right:0.15em;
+}
+#content-views a,
+#content li.formTab a {
+ /* this isn't supported by all browsers, so we keep it in a separate rule */
+ display: inline-block;
+}
+#content-views a,
+#content li.formTab a {
+ line-height: 2em;
+ padding: 0 0.25em;
+ text-decoration: none;
+ border: none;
+ margin: 0 ;
+}
+#content-views li.selected a,
+#content li.formTab a.selected {
+ font-weight: bold;
+}
+#content-views li.selected a,
+#content-views li a:hover,
+#content li.formTab a.selected,
+#content li.formTab a:hover {
+ background: White;
+ color: Black;
+}
+
+#content li.formTab a.selected,
+#content li.formTab a:hover {
+ border-top-right-radius: 0.5em;
+ border-top-left-radius: 0.5em;
+ -webkit-border-top-right-radius: 0.5em;
+ -webkit-border-top-left-radius: 0.5em;
+ -moz-border-radius-topleft: 0.5em;
+ -moz-border-radius-topright: 0.5em;
+}
+#content li.formTab a.notify {
+ background-color: red;
+ color: White;
+}
+#content li.formTab a.required span {
+ background-image: url(required.png);
+ background-position: center right;
+ background-repeat: no-repeat;
+ padding-right: 1em;
+}
+#content fieldset.formPanel {
+ border: none;
+}
+#content fieldset.formPanel.hidden {
+ display: none;
+}
+#content div.formControls input.hidden {
+ display: none;
+}
+
+/* @end */
+
+
+/* @group Content pulldowns */
+
+#contentActionMenus dl.actionMenu a,
+#contentActionMenus dl.actionMenu.activated dd {
+ background-color: #75ad0a;
+ color: White;
+ z-index: 5;
+}
+#contentActionMenus dl.actionMenu.activated dd {
+ border-bottom: 0.5em solid #75ad0a;
+ right: -3px;
+}
+#contentActionMenus dl.actionMenu.activated dd a:hover,
+#contentActionMenus dl.actionMenu.activated dd .actionMenuSelected {
+ background-color: White !important;
+ color: #666;
+}
+#contentActionMenus dl.actionMenu {
+ line-height: 2em;
+}
+
+#folderHeader, #contextHeader {
+ border-bottom: 2px solid white;
+}
+
+#contextHeader { margin-top: 5px; }
+
+
+/* @end */
+
+#contentActionMenus {
+ float: right;
+ background: #75ad0a;
+ margin: 0;
+ position: relative;
+ top: -0.03em;
+ right:-0.24em;
+ padding: 0.1em 0.24em 0 0;
+ border-radius: 0.5em;
+ border-top-left-radius: 0;
+ -webkit-border-radius: 0.5em;
+ -webkit-border-top-left-radius: 0;
+ -moz-border-radius: 0.5em;
+ -moz-border-radius-topleft: 0;
+}
+
+.actionMenuContent {
+ padding: 0 0.25em;
+}
+
+dl.actionMenu {
+ float: right;
+ white-space: nowrap;
+ position: relative;
+ margin-left: 0.1em;
+}
+dl.actionMenu a,
+dl.actionMenu div {
+ display: block !important;
+ white-space: nowrap;
+}
+dl.actionMenu dt {
+ font-weight: normal;
+}
+span.arrowDownAlternative {
+ font-size: 80%;
+}
+dl.actionMenu.deactivated dt {
+ margin: 0 0.25em;
+}
+dl.actionMenu.deactivated dd {
+ display: none;
+}
+dl.actionMenu.activated dd {
+ position: absolute;
+ width: auto;
+ min-width: 100%;
+}
+dl.actionMenu.activated dt a,
+dl.actionMenu.activated dd a,
+dl.actionMenu.activated dd div {
+ margin: 0 0.25em;
+}
+
+/* @end */
+
+/* @group Control panel */
+
+#setup-link {
+ font-size: 90%;
+}
+
+#content ul.configlets {
+ margin: 1em 0;
+ list-style-image: none;
+ list-style: none;
+}
+#content ul.configlets li {
+ margin-bottom: 1em;
+ list-style: none;
+ display: block;
+}
+#content ul.configlets li a {
+ text-decoration: none;
+ border: none;
+}
+#content ul.configlets li a:visited {
+ color: #436976;
+ background-color: transparent;
+}
+#content ul.configlets li a:active {
+ color: #436976;
+ background-color: transparent;
+}
+#content ul.configlets li label {
+ font-weight: bold;
+}
+#content ul.configletDetails {
+ margin: 0em 1em 1em 4em;
+ list-style-image: none;
+ list-style: none;
+}
+#content ul.configletDetails li {
+ margin-bottom: 1em;
+ display: inline;
+}
+#content ul.configletDetails li a {
+ text-decoration: none;
+}
+#content ul.configletDetails li label {
+ font-weight: bold;
+}
+#content ul.configletDetails li.configletDescription {
+ display: block;
+ color: #76797c;
+ margin: 0;
+}
+.inlineDisplay {
+ display:inline
+}
+table.controlpanel-listing {
+ width:100%;
+}
+table.controlpanel-listing td, table.controlpanel-listing th {
+ font-size:120%;
+}
+table.controlpanel-listing dl {
+ margin-top:0;
+}
+table.controlpanel-listing dd {
+ margin-left: 1em;
+}
+table.controlpanel-listing dl dt a .trigger{
+ font-weight:normal;
+}
+table .controlpanel-listing td {
+ vertical-align:top;
+}
+table.controlpanel-listing td.checker{
+ text-align:center;
+}
+table.controlpanel-listing th.smallcolumn {
+ width:1.5em;
+}
+.chooser-right {
+ float:right;
+ margin-right:0;
+ margin-bottom:0;
+}
+.rule-element {
+ background-color:#EEF3F5;
+ margin:0.5em 0pt 0.5em;
+ padding:0.3em 1em 0.3em 1em;
+ width:auto;
+}
+.rule-element dl {
+}
+.rule-element dl dd {
+ margin-left:1em;
+}
+.rule-updown, .rule-operations {
+ float:right;
+ padding-top:0.8em;
+}
+/* @end */
+
+/* @group Collapsible */
+dl.collapsible {
+ border: 0.1em solid #8cacbb;
+ margin: 1em 0;
+ padding: 0;
+}
+dl.collapsible dt.collapsibleHeader {
+ display: block;
+ float: left;
+ background: White;
+ line-height: 1.2em;
+ vertical-align: middle;
+ font-size: 90%;
+ position: relative;
+ top: -0.6em;
+ width: auto;
+ margin: 0 0 -0.6em 1em;
+ padding: 0 0.5em;
+}
+dl.collapsible dd.collapsibleContent {
+ margin: 0;
+ padding: 0 1em 0.4em;
+ clear: left;
+}
+
+/* for IE the following isn't needed, that's why the css2 selector is used */
+dl.collapsible dd.collapsibleContent > dl {
+ margin: 0;
+ padding: 0;
+}
+
+dl.expandedInlineCollapsible dt.collapsibleHeader,
+dl.expandedBlockCollapsible dt.collapsibleHeader {
+ padding: 0 0.5em 0 2em;
+ background: White url(treeExpanded.png) no-repeat 0.5em 50%;
+ cursor: pointer;
+}
+
+dl.collapsedBlockCollapsible {
+ border: none;
+ height: 1em;
+ width: auto;
+}
+dl.collapsedInlineCollapsible dt.collapsibleHeader,
+dl.collapsedBlockCollapsible dt.collapsibleHeader {
+ float: none;
+ position: relative;
+ margin: 0 0 0 1em;
+ padding: 0 0.5em 0 2em;
+ line-height: 1.2em;
+ cursor: pointer;
+ background: White url(treeCollapsed.png) no-repeat 0.5em 50%;
+}
+dl.collapsedInlineCollapsible dd.collapsibleContent,
+dl.collapsedBlockCollapsible dd.collapsibleContent {
+ display: none;
+}
+dl.collapsedInlineCollapsible {
+ border: none;
+ height: 1em;
+ width: auto;
+ display: inline;
+}
+dl.collapsedInlineCollapsible dt.collapsibleHeader {
+ position: static;
+ float: none;
+ margin: 0;
+ padding: 0 0 0 2em;
+ line-height: 1em;
+ cursor: pointer;
+ display: inline;
+}
+
+/* @end */
+
+/* @group Comments */
+
+.comment {
+ margin-top: 1.5em;
+ font-size: 80%;
+}
+
+.comment .documentByLine {
+ margin-left: 1em;
+}
+
+.comment .formControls {
+ margin-left: 0;
+}
+
+.commentTime {
+ color: #666;
+}
+
+.commentBody {
+ padding: 1em;
+ margin: 0.5em 0;
+ border-radius: 0.5em;
+ -webkit-border-radius: 0.5em;
+ -moz-border-radius: 0.5em;
+ box-shadow: 0 0 1em 0 #888;
+ -moz-box-shadow: 0 0 0.5em 0 #888;
+ -webkit-box-shadow: 0 0 0.5em #888;
+}
+
+.comment h1,
+.comment h2,
+.comment h3,
+.comment h4,
+.comment h5,
+.comment h6 {
+ font-weight: normal;
+}
+
+/* @end */
+
+.reviewHistory,
+.contentHistory {
+ display: inline;
+ color: Black;
+}
+.spacer {
+ margin: 1em;
+}
+
+.label {
+ font-weight: bold;
+ display: inline;
+ padding-right: 0.5em;
+}
+.optionsToggle {
+ border: 0.1em solid #8cacbb;
+ color: Black;
+ background-color: #dee7ec;
+ font-weight: normal;
+ font-size: 90%;
+}
+
+/* for highlighting of search terms */
+.highlightedSearchTerm {
+ background-color: #ffa;
+}
+
+dl.searchResults .highlightedSearchTerm {
+ background-color: transparent;
+ font-weight: bold;
+}
+/* for greying out inherited roles */
+.noInheritedRoles {
+ color: #a0a0a0;
+}
+/* for highlighting current items, like the language or today in the calendar */
+.currentItem {
+ border-collapse: collapse;
+ border: 0.2em solid #ffa500;
+ padding: 0.1em;
+}
+
+
+/* @end */
+
+/* @group Search results page */
+
+form.searchPage {
+ text-align:center;
+}
+
+input.searchPage {
+ font-size:200% !important;
+}
+
+/* @end */
+
+
+/* @group Image alignment classes */
+
+.image-left {
+ float: left;
+ margin: 0.5em 1em 0.5em 0;
+}
+.image-right {
+ float: right;
+ margin: 0.5em;
+}
+.image-inline {
+ float: none;
+}
+/*note: the tricky thing here is that image-inline|image-left|image-right
+can both be on an image and a wrapper element e.g. a dl tag*/
+img.image-left,
+img.image-right,
+.captioned img {
+ border: 1px solid #ddd;
+}
+dd.image-caption {
+ text-align: left;
+ padding: 0 0 0 3px; /*image padding+border with*/
+ margin: 0;
+ color: #666;
+ font-size: 85%;
+}
+
+/* @end */
+
+
+/* @group Dashboard */
+
+#dashboard-actions ul,
+#dashboard-actions ul li {
+ list-style: none;
+}
+#dashboard-actions ul {
+ margin-left: 0;
+}
+
+#dashboard {
+ font-size: 125%;
+ line-height: 1em;
+}
+
+#dashboard dd {
+ margin: 0;
+}
+
+
+#dashboard dl.portlet a:link {
+ border-bottom: none;
+}
+
+#dashboard-portlets1,
+#dashboard-portlets2,
+#dashboard-portlets3 {
+ float:left;
+ width:23%;
+ padding:0.7em 1.3em 0 0;
+}
+
+#dashboard-portlets4 {
+ float:left;
+ width:23%;
+ padding-top:0.7em;
+}
+
+#dashboard-portlets1 dl.portlet,
+#dashboard-portlets2 dl.portlet,
+#dashboard-portlets3 dl.portlet,
+#dashboard-portlets4 dl.portlet {
+ margin-bottom:1.5em;
+}
+
+/* @end */
+
+/* @group Forms */
+
+fieldset,
+.editionComment {
+ line-height:1.5em;
+ margin:1em 0;
+ padding:0 1em 1em;
+ width:auto;
+}
+
+
+div.formControls {
+ margin: 1em;
+}
+input[type="text"]:focus,
+input[type="password"]:focus,
+textarea:focus {
+ background-color: #ffffe0;
+}
+
+#content textarea {
+ font: 100% Monaco, "Courier New", Courier, monospace;
+ width: 100%;
+}
+#content select {
+ vertical-align: top;
+}
+#content fieldset {
+ border: 0.1em solid #329fd7;
+ border-style: solid none none none;
+}
+#content legend {
+ padding: 0.5em;
+ font-size: 85%;
+}
+label {
+ font-weight:bold;
+}
+
+#content label {
+}
+
+#content optgroup {
+ font-style: normal;
+ font-weight: bold;
+ color: #999;
+ padding-left: 0.25em;
+}
+#content option {
+ color: black;
+}
+#content optgroup > option {
+ padding: 0 0.25em 0 1em;
+}
+dl.enableFormTabbing dd {
+ margin-left: 0;
+ padding-top: 2em;
+}
+.searchSection {
+ color: #76797c;
+ margin-top: 0.25em;
+}
+.searchSection label:hover {
+ color: Black;
+}
+.field {
+ clear: both;
+ margin-bottom: 1em;
+}
+.field input[type="text"] {
+ width: 20em;
+}
+.field input[type="text"][size] {
+ width: auto;
+}
+
+.fieldRequired {
+ background: url(required.png) center left no-repeat;
+ padding: 0 0 0 1em;
+ color: White;
+}
+.fieldUploadFile {
+ text-align: right;
+ margin-right: 0.75em;
+ display: none;
+}
+.fieldTextFormat {
+ text-align: right;
+ margin-right: 0.75em
+}
+.formHelp {
+ color: #555;
+ margin: 0 0 0.2em 0;
+}
+div.field.error {
+ background-color: #fdc;
+ border: 1px solid red;
+ padding: 0.5em;
+ margin: 1em 0;
+}
+.error .fieldRequired {
+ color: #d00;
+}
+div.error.warning {
+ background-color: transparent;
+ border: none;
+ margin-top: 0;
+ padding: 0;
+}
+
+div.error.warning input {
+ border: 2px solid red;
+}
+
+input.inputLabelActive {
+ color: #76797c;
+}
+textarea#form\.description {
+ height: 6em;
+ width: 99%;
+}
+.multi-widget-field {
+ padding-left: 0.5em;
+ border-left: 1.5em solid #DDD;
+}
+
+.multi-widget-checkbox {
+ margin-left: -2em;
+ margin-right: 0.5em;
+ width: 1.5em;
+ display: inline-block;
+}
+
+/* @group Login form */
+
+body.template-logged_out #content,
+body.template-login_form #content,
+.pb-ajax #login-form {
+ text-align: center;
+}
+
+#fieldset-openid-login input, #login-form input {
+ font-size: 150%;
+}
+