add Lobo skin, based on Blueprint CSS framework with an 8-column grid
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3936 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									33401e52d9
								
							
						
					
					
						commit
						4aa2baaf12
					
				
					 5 changed files with 638 additions and 4 deletions
				
			
		|  | @ -3,8 +3,12 @@ $Id$ | |||
| """ | ||||
| 
 | ||||
| from cybertools.browser.liquid import Liquid | ||||
| from cybertools.browser.blue import Blue | ||||
| 
 | ||||
| 
 | ||||
| class Loopz(Liquid): | ||||
|     """ The Loopz (neutral enduser) skin """ | ||||
| 
 | ||||
| class Lobo(Blue): | ||||
|     """ The Lobo (neutral blueprint-based) skin """ | ||||
| 
 | ||||
|  |  | |||
|  | @ -29,3 +29,8 @@ class View(object): | |||
| 
 | ||||
|     bodyTemplate = UnboundTemplateFile('body.pt') | ||||
| 
 | ||||
| 
 | ||||
| class LoboView(object): | ||||
| 
 | ||||
|     bodyTemplate = UnboundTemplateFile('lobo.pt') | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,14 +3,14 @@ | |||
| <configure | ||||
|    xmlns:zope="http://namespaces.zope.org/zope" | ||||
|    xmlns="http://namespaces.zope.org/browser" | ||||
|    i18n_domain="zope" | ||||
|    > | ||||
|    i18n_domain="loops"> | ||||
| 
 | ||||
|   <!-- Loopz skin --> | ||||
| 
 | ||||
|   <zope:interface | ||||
|       interface="loops.browser.skin.Loopz" | ||||
|       type="zope.publisher.interfaces.browser.IBrowserSkinType" | ||||
|       name="Loopz" | ||||
|       /> | ||||
|       name="Loopz" /> | ||||
| 
 | ||||
|   <page for="*" | ||||
|         name="body.html" | ||||
|  | @ -25,4 +25,26 @@ | |||
|   <resource name="logo.png" file="loops_logo.png" | ||||
|             layer="loops.browser.skin.Loopz" /> | ||||
| 
 | ||||
|   <!-- Lobo skin --> | ||||
| 
 | ||||
|   <zope:interface | ||||
|       interface="loops.browser.skin.Lobo" | ||||
|       type="zope.publisher.interfaces.browser.IBrowserSkinType" | ||||
|       name="Lobo" /> | ||||
| 
 | ||||
|   <page for="*" | ||||
|         name="body.html" | ||||
|         class="loops.browser.skin.browser.LoboView" | ||||
|         permission="zope.View" | ||||
|         layer="loops.browser.skin.Lobo" /> | ||||
| 
 | ||||
|   <resource name="loops.css" file="lobo.css" | ||||
|             layer="loops.browser.skin.Lobo" /> | ||||
|   <resource name="custom.css" file="custom.css" | ||||
|             layer="loops.browser.skin.Lobo" /> | ||||
|   <resource name="favicon.png" file="loops_favicon.png" | ||||
|             layer="loops.browser.skin.Lobo" /> | ||||
|   <resource name="logo.png" file="loops_logo.png" | ||||
|             layer="loops.browser.skin.Lobo" /> | ||||
| 
 | ||||
| </configure> | ||||
|  |  | |||
							
								
								
									
										537
									
								
								browser/skin/lobo.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										537
									
								
								browser/skin/lobo.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,537 @@ | |||
| /* | ||||
|  $Id$ | ||||
| 
 | ||||
|  settings specific for view / node objects | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| /* general */ | ||||
| 
 | ||||
| a[href]:hover { | ||||
|     text-decoration: none; | ||||
|     color: #803000; | ||||
| } | ||||
| 
 | ||||
| pre { | ||||
|     font-size: 100%; | ||||
|     background-color: #f4f4f4; | ||||
|     overflow: scroll; | ||||
|     max-height: 35em; | ||||
| } | ||||
| 
 | ||||
| ol, ul, p { | ||||
|     margin-top: 0.4em; | ||||
|     margin-bottom: 0.5em; | ||||
| } | ||||
| 
 | ||||
| ol li, ul li { | ||||
|     line-height: 1.5em; | ||||
| } | ||||
| 
 | ||||
| blockquote ul { | ||||
|     margin: 0; | ||||
| } | ||||
| 
 | ||||
| textarea { | ||||
|     font-size: 100%; | ||||
| } | ||||
| 
 | ||||
| /* class-specific */ | ||||
| 
 | ||||
| .description { | ||||
|     font-style: italic; | ||||
|     /* margin-top: 0.5em;*/ | ||||
|     margin-bottom: 0.3em; | ||||
| } | ||||
| 
 | ||||
| .dialog div.heading { | ||||
|     font-weight: bold; | ||||
|     font-size: 140%; | ||||
|     margin: 0.5em 0 0.3em 0; | ||||
| } | ||||
| 
 | ||||
| .dialog label { | ||||
|     display: block; | ||||
|     font-weight: bold; | ||||
|     margin-top: 0.5em; | ||||
| } | ||||
| 
 | ||||
| .dialog div.buttons { | ||||
|     margin-top: 0.5em; | ||||
| } | ||||
| 
 | ||||
| table.listing { | ||||
|     margin: 1px; | ||||
|     margin-top: 6px; | ||||
| } | ||||
| 
 | ||||
| table.listing th { | ||||
|     font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif; | ||||
|     color: #000040; | ||||
|     padding: 0 2px 0 2px; | ||||
| } | ||||
| 
 | ||||
| table.listing td { | ||||
|     padding: 0 2px 0 2px; | ||||
|     white-space: normal; | ||||
|     vertical-align: middle; | ||||
| } | ||||
| 
 | ||||
| fieldset.box table.listing td { | ||||
|     padding: 0 1px 0 1px; | ||||
| } | ||||
| 
 | ||||
| table.listing td.number { | ||||
|     text-align: right; | ||||
| } | ||||
| 
 | ||||
| table.listing td.center { | ||||
|     text-align: center; | ||||
| } | ||||
| 
 | ||||
| table.listing td.nowrap { | ||||
|     white-space: nowrap; | ||||
| } | ||||
| 
 | ||||
| table.listing td.checkbox { | ||||
|     text-align: center; | ||||
|     width: 10px; | ||||
|     padding-left: 2px; | ||||
|     padding-right: 2px; | ||||
| } | ||||
| 
 | ||||
| table.listing td.headline { | ||||
|     font-weight: bold; | ||||
|     border: 1px solid lightgrey; | ||||
| } | ||||
| 
 | ||||
| table.listing-details td { | ||||
|     white-space: normal; | ||||
|     border: 1px solid lightgrey; | ||||
| } | ||||
| 
 | ||||
| table.listing-details tr.heading td { | ||||
|     border: none; | ||||
| } | ||||
| 
 | ||||
| table.listing-details tr.heading td h3 { | ||||
|     font-weight: bold; | ||||
|     border: none; | ||||
| } | ||||
| 
 | ||||
| table.listing th span.ascending { | ||||
|     background-image: url(/++resource++cybertools.icons/arrowdown.gif); | ||||
|     background-position: right; | ||||
|     background-repeat: no-repeat; | ||||
| } | ||||
| 
 | ||||
| table.listing th span.descending { | ||||
|     background-image: url(/++resource++cybertools.icons/arrowup.gif); | ||||
|     background-position: right; | ||||
|     background-repeat: no-repeat; | ||||
| } | ||||
| 
 | ||||
| table.records input, table.records textarea { | ||||
|     border: none; | ||||
|     padding: 0; | ||||
|     margin: 0; | ||||
|     width: auto; | ||||
| } | ||||
| 
 | ||||
| table.records th { | ||||
|     background-color: lightgrey; | ||||
| } | ||||
| 
 | ||||
| table.records th, table.records td { | ||||
|     padding: 0; | ||||
|     margin: 0; | ||||
|     border: 1px solid black; | ||||
| } | ||||
| 
 | ||||
| dl.docutils dt { | ||||
|     font-weight: bold; | ||||
|     margin-top: 0.3em; | ||||
| } | ||||
| 
 | ||||
| dl.docutils dd { | ||||
|     margin-left: 2em; | ||||
| } | ||||
| 
 | ||||
| dl.docutils dd ul li { | ||||
|     margin-left: -1em; | ||||
| } | ||||
| 
 | ||||
| fieldset.box { | ||||
|     margin: 1em 0 0.5em 0; | ||||
|     padding: 0.5em; | ||||
|     border: 1px solid #ccc; | ||||
| } | ||||
| 
 | ||||
| fieldset.box td { | ||||
|     padding: 0.2em 0.2em 0.2em 0; | ||||
| } | ||||
| 
 | ||||
| #body { | ||||
|     margin-left: 5px; | ||||
| } | ||||
| 
 | ||||
| .top-actions { | ||||
|     position: absolute; | ||||
|     right: 2em; | ||||
|     top: 1em; | ||||
| } | ||||
| 
 | ||||
| .quicksearch { | ||||
|     position: absolute; | ||||
|     right: 2em; | ||||
|     top: 0.8em; | ||||
| } | ||||
| 
 | ||||
| .quicksearch input { | ||||
|     font-size: 80%; | ||||
| } | ||||
| 
 | ||||
| .language-switch { | ||||
|     position: absolute; | ||||
|     right: 2em; | ||||
|     top: 2.4em; | ||||
| } | ||||
| 
 | ||||
| .page-actions { | ||||
|     margin-top: 1em; | ||||
|     margin-left: 20px; | ||||
| } | ||||
| 
 | ||||
| .top image { | ||||
|     margin-top: -1px; | ||||
| } | ||||
| 
 | ||||
| .content-1 h1, h1 { | ||||
|     font-size: 180%; | ||||
| } | ||||
| 
 | ||||
| .content-2 h1, .content-1 h2, h2 { | ||||
|     font-size: 160%; | ||||
|     font-weight: normal; | ||||
|     padding-top: 0.5em; | ||||
| } | ||||
| 
 | ||||
| .content-3 h1, .content-2 h2, .content-1 h3, h3 { | ||||
|     font-size: 140%; | ||||
|     font-weight: normal; | ||||
|     padding-top: 0.4em; | ||||
| } | ||||
| 
 | ||||
| .content-4 h1, .content-3 h2, .content-2 h3, .content-1 h4, h4 { | ||||
|     font-size: 130%; | ||||
|     font-weight: normal; | ||||
|     padding-top: 0.3em; | ||||
| } | ||||
| 
 | ||||
| .content-5 h1, .content-4 h2, .content-3 h3, content-2 h4, h5 { | ||||
|     font-size: 120%; | ||||
|     /* border: none; */ | ||||
|     padding-top: 0.2em; | ||||
| } | ||||
| 
 | ||||
| .box { | ||||
|     /*margin: 5px;*/ | ||||
|     padding: 0; | ||||
|     padding-top: 0; | ||||
|     background: none; | ||||
| } | ||||
| 
 | ||||
| div.box { | ||||
|     border-top: 1px solid #ccc; | ||||
|     border-bottom: 1px solid #ccc; | ||||
| } | ||||
| 
 | ||||
| div.box h4 { | ||||
|     font: 110% Verdana, Tahoma, Arial, Helvetica, sans-serif; | ||||
|     font-weight: bold; | ||||
|     color: #000040; | ||||
|     border: none; | ||||
|     border-bottom: 1px solid #ccc; | ||||
|     padding: 4px; | ||||
|     padding-top: 1px; | ||||
|     padding-bottom: 3px; | ||||
|     background-color: #eee; | ||||
|     height: auto; | ||||
|     margin-bottom: 0; | ||||
| } | ||||
| 
 | ||||
| .box h1, .box h2, .box h3 { | ||||
|     border-bottom: None; | ||||
| } | ||||
| 
 | ||||
| .box div.body div.even { | ||||
|     background-color: #f8f8f8; | ||||
| } | ||||
| 
 | ||||
| .box div.body div { | ||||
|     padding: 0.2em 0.2em 0.2em 0.3em; | ||||
| } | ||||
| 
 | ||||
| div.action { | ||||
|     border-top: 1px solid #eeeeee; | ||||
| } | ||||
| 
 | ||||
| div.menu-1, div.menu-2 { | ||||
|     border-top: 1px solid #eeeeee; | ||||
|     font-weight: bold; | ||||
| } | ||||
| 
 | ||||
| .box div.body div.menu-3 { | ||||
|     border-top: none; | ||||
|     padding: 0.1em 0 0.2em 1.5em; | ||||
| } | ||||
| 
 | ||||
| .box div.body div.menu-4 { | ||||
|     padding-left: 3em; | ||||
|     font-size: 90% | ||||
| } | ||||
| 
 | ||||
| .delete-item a[href] { | ||||
|     color: #ff7777; | ||||
|     font-weight: bold; | ||||
|     text-decoration: none; | ||||
| } | ||||
| 
 | ||||
| .subcolumn { | ||||
|     display: inline; | ||||
|     float: left; | ||||
| } | ||||
| 
 | ||||
| .footer { | ||||
|     text-align: center; | ||||
|     border-top: 1px solid #ccc; | ||||
|     border-bottom: none; | ||||
|     margin-top: 12px; | ||||
|     padding-top: 6px; | ||||
| } | ||||
| 
 | ||||
| .object-actions { | ||||
|     float: right; | ||||
|     margin: 0; | ||||
| } | ||||
| 
 | ||||
| .object-actions { | ||||
|     padding: 0.5em 0 0 0; | ||||
| } | ||||
| 
 | ||||
| .content-2 .object-actions { | ||||
|     padding: 1em 0 0 0; | ||||
| } | ||||
| 
 | ||||
| .listing .object-actions { | ||||
|     float: none; | ||||
|     padding: 0; | ||||
|     text-align: center; | ||||
| } | ||||
| 
 | ||||
| .icon-action { | ||||
|     display: inline; | ||||
| } | ||||
| 
 | ||||
| .flow-left { | ||||
|     float: left; | ||||
|     padding: 0.4em 0.8em 0.8em 0; | ||||
| } | ||||
| 
 | ||||
| .flow-right { | ||||
|     float: right; | ||||
|     padding: 0.4em 0.8em 0.8em 0; | ||||
| } | ||||
| 
 | ||||
| div.image { | ||||
|     margin-top: 10px; | ||||
|     margin-right: 5px; | ||||
| } | ||||
| 
 | ||||
| img.selected { | ||||
|     border: 2px solid #d6dcf6; | ||||
| } | ||||
| 
 | ||||
| img.notselected { | ||||
|     border: 2px solid #eff8ff; | ||||
| } | ||||
| 
 | ||||
| .navlink { | ||||
|     font-size: 130%; | ||||
|     margin-bottom: 1em; | ||||
| } | ||||
| 
 | ||||
| .navlink a { | ||||
|     font-weight: bold; | ||||
|     text-decoration: underline; | ||||
| } | ||||
| 
 | ||||
| .subtitle { | ||||
|     font-size: 140%; | ||||
|     font-weight: bold; | ||||
|     margin: 1em 0 0.5em 0; | ||||
| } | ||||
| 
 | ||||
| .button { | ||||
|     margin: 1em 0 1em 0; | ||||
| } | ||||
| 
 | ||||
| .button a:link, .button a:visited { | ||||
|     padding: 2px 4px 2px 4px; | ||||
|     background-color: #e8e8e8; | ||||
|     text-decoration: None; | ||||
|     color: Black; | ||||
|     border-width: 2px; | ||||
|     border-style: solid; | ||||
|     border-color: #f4f4f4 #989898 #989898 #f4f4f4; | ||||
| } | ||||
| 
 | ||||
| .button a:active { | ||||
|     border-color: #989898 #f4f4f4 #f4f4f4 #989898; | ||||
| } | ||||
| 
 | ||||
| .itemViews { | ||||
|     border-bottom-width: 2px; | ||||
| } | ||||
| 
 | ||||
| .dialog .headline { | ||||
|     font-size: 140%; | ||||
|     font-weight: bold; | ||||
|     padding: 1em 0 1em 0; | ||||
| } | ||||
| 
 | ||||
| .error { | ||||
|     background-color: #ffbb00; | ||||
|     padding: 4px; | ||||
|     margin-bottom: 4px; | ||||
| } | ||||
| 
 | ||||
| .error-heading { | ||||
|     margin-bottom: 8px; | ||||
|     font-weight: bold; | ||||
| } | ||||
| 
 | ||||
| /* comments */ | ||||
| 
 | ||||
| div.comment { | ||||
|     padding: 0.5em; | ||||
|     background-color: #eeeeff; | ||||
|     border: 1px solid #aaaaff; | ||||
| } | ||||
| 
 | ||||
| .comment h3 { | ||||
|     margin-top: 0; | ||||
| } | ||||
| 
 | ||||
| .comment .info { | ||||
|     font-style: italic; | ||||
|     padding-top: 3px; | ||||
|     padding-bottom: 0; | ||||
| } | ||||
| 
 | ||||
| /* search stuff */ | ||||
| 
 | ||||
| .searchForm input.button, input.submit { | ||||
|     padding: 2px; | ||||
| } | ||||
| 
 | ||||
| .searchForm input.submit { | ||||
|     font-weight: bold; | ||||
| } | ||||
| 
 | ||||
| /* blog */ | ||||
| 
 | ||||
| .blog .description { | ||||
|     font-size: 90%; | ||||
|     color: #666666; | ||||
| } | ||||
| 
 | ||||
| .blogpost .description { | ||||
|     font-weight: bold; | ||||
|     font-size: 90%; | ||||
|     color: #666666; | ||||
|     padding-top: 0.4em; | ||||
| } | ||||
| 
 | ||||
| .blog .info, .blogpost .info { | ||||
|     font-style: italic; | ||||
|     font-size: 90%; | ||||
|     color: #666666; | ||||
|     padding-top: 0.4em; | ||||
| } | ||||
| 
 | ||||
| /* calendar, work items */ | ||||
| 
 | ||||
| .today { | ||||
|     color: #444488; | ||||
|     font-weight: bold; | ||||
| } | ||||
| 
 | ||||
| .calendar td.arrows { | ||||
|     font-size: 130%; | ||||
| } | ||||
| 
 | ||||
| .calendar td.week_number { | ||||
|     color: grey; | ||||
| } | ||||
| 
 | ||||
| .calendar td.day { | ||||
|     width: 12%; | ||||
| } | ||||
| 
 | ||||
| .calendar td.today { | ||||
|     border: 1px solid red; | ||||
|     font-weight: normal; | ||||
| } | ||||
| 
 | ||||
| .calendar .has_events { | ||||
|     font-weight: bold; | ||||
|     background-color: #eeeeff; | ||||
| } | ||||
| 
 | ||||
| /* dojo stuff */ | ||||
| 
 | ||||
| .dijitDialog { | ||||
|     background-color: #aaaaaa; | ||||
|     border: 1px solid #999; | ||||
|     padding: 5px; | ||||
| } | ||||
| 
 | ||||
| .dijitDialogPaneContent { | ||||
|     background-color: #aaaaaa; | ||||
| } | ||||
| 
 | ||||
| .dijitDialog th { | ||||
|     font-size: 120%; | ||||
|     font-weight: bold; | ||||
|     text-align: center; | ||||
|     padding: 0 5px 8px 5px; | ||||
| } | ||||
| 
 | ||||
| .dijitDialog td { | ||||
|     padding: 2px; | ||||
| } | ||||
| 
 | ||||
| .dijitDialog .headline { | ||||
|     font-weight: bold; | ||||
| } | ||||
| 
 | ||||
| .dijitDialog input.text { | ||||
|     width: 100%; | ||||
|     margin-right: 10px; | ||||
| } | ||||
| 
 | ||||
| .dijitDialog input.submit { | ||||
|     font-weight: bold; | ||||
| } | ||||
| 
 | ||||
| .dijitDialogUnderlay { | ||||
|     background-color: Lightgrey; | ||||
| } | ||||
| 
 | ||||
| div.RichTextEditable { | ||||
|     border-top: 2px solid grey; | ||||
|     border-left: 2px solid grey; | ||||
|     border-right: 2px solid #eeeeee; | ||||
|     border-bottom: 2px solid #eeeeee; | ||||
| } | ||||
							
								
								
									
										66
									
								
								browser/skin/lobo.pt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								browser/skin/lobo.pt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,66 @@ | |||
| <tal:block i18n:domain="loops"> | ||||
| <div class="body container" | ||||
|      metal:define-macro="body" | ||||
|      tal:define="controller nocall:view/controller; | ||||
|                  resourceBase controller/resourceBase;" | ||||
|      tal:attributes="class python: | ||||
|             'body container' + (view.request.get('showgrid') and ' showgrid' or '')"> | ||||
| 
 | ||||
|     <div metal:define-macro="global"> | ||||
|       <div class="top span-8" | ||||
|            metal:define-slot="top"> | ||||
|         <a href="#" name="top" metal:define-slot="logo" | ||||
|            tal:attributes="href view/topMenu/url"><img class="logo" | ||||
|                border="0" alt="Home" | ||||
|                tal:attributes="src string:${resourceBase}logo.png" /></a> | ||||
|         <hr /> | ||||
|       </div> | ||||
|       <div class="pull-2" | ||||
|            metal:define-slot="top-actions"> | ||||
|           <tal:action repeat="macro controller/macros/top_actions"> | ||||
|             <metal:action use-macro="macro" /> | ||||
|           </tal:action> | ||||
|       </div> | ||||
|     </div> | ||||
| 
 | ||||
|     <div id="content" class="span-6" | ||||
|          metal:define-macro="content"> | ||||
|       <div metal:define-slot="actions"></div> | ||||
|       <div metal:define-slot="message"></div> | ||||
|       <metal:content define-slot="content"> | ||||
|         <tal:content define="item nocall:view/item; | ||||
|                              level level|python: 1; | ||||
|                              macro item/macro;" | ||||
|                      condition="macro"> | ||||
|           <metal:block use-macro="macro" /> | ||||
|         </tal:content> | ||||
|       </metal:content> | ||||
|     </div> | ||||
| 
 | ||||
|     <div class="span-2 last"> | ||||
|       <tal:portlet repeat="macro controller/macros/portlet_left"> | ||||
|         <metal:portlet use-macro="macro" /> | ||||
|       </tal:portlet> | ||||
|       <tal:portlet repeat="macro controller/macros/portlet_right"> | ||||
|         <metal:portlet use-macro="macro" /> | ||||
|       </tal:portlet> | ||||
|     </div> | ||||
| 
 | ||||
|     <div id="footer" class="footer clear" | ||||
|          metal:define-macro="footer"> | ||||
|       <metal:footer define-slot="footer"> | ||||
|         <div tal:condition="nothing" xtal:condition="view/editable"> | ||||
|           <span i18n:translate="">For quick creation of notes/links bookmark this link</span>: | ||||
|           <a href="#" | ||||
|              tal:attributes="href view/popupCreateObjectForm">Create loops Note</a> | ||||
|         </div> | ||||
|         Powered by | ||||
|         <b><a href="http://loops.cy55.de">loops</a></b> · | ||||
|         <b><a href="http://wiki.zope.org/zope3">Zope 3</a></b> · | ||||
|         <b><a href="http://www.python.org">Python</a></b> · | ||||
|         <b><a href="http://www.dojotoolkit.org">Dojo</a></b>. | ||||
|       </metal:footer> | ||||
|     </div> | ||||
| 
 | ||||
| </div> | ||||
| </tal:block> | ||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 helmutm
						helmutm