From df7b0b7bba87d9380e9b93527459c8732fef045f Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 19 Mar 2012 15:07:44 +0100 Subject: [PATCH 01/10] allow suppression of 'View' button via 'no_view_button' type option --- browser/resource_macros.pt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/browser/resource_macros.pt b/browser/resource_macros.pt index e30a3fb..2a8b9fb 100644 --- a/browser/resource_macros.pt +++ b/browser/resource_macros.pt @@ -66,17 +66,16 @@

Description 

- Download - + View @@ -84,7 +83,7 @@ - From 56bc752702eb30651bb1caa67b0603e08a1551a0 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Wed, 28 Mar 2012 11:52:25 +0200 Subject: [PATCH 02/10] use image description (if present) instead of title for display --- browser/lobo/standard.pt | 10 +++++----- browser/lobo/standard.py | 3 +++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/browser/lobo/standard.pt b/browser/lobo/standard.pt index 40a8061..13715db 100644 --- a/browser/lobo/standard.pt +++ b/browser/lobo/standard.pt @@ -83,7 +83,8 @@ style cell/style">

- + +
- +
@@ -104,11 +105,10 @@ - + title python: cell.img['description'] or cell.img['title']"> - Versioning + Versioning + + + + + + - + Version: 1.1 (current, released) diff --git a/browser/skin/lobo/print.css b/browser/skin/lobo/print.css index c8b0c74..19dd977 100644 --- a/browser/skin/lobo/print.css +++ b/browser/skin/lobo/print.css @@ -13,6 +13,6 @@ body { #content { /* width: 100%; */ - width: 70%; + width: 80%; color: Black; } diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index 0a47ea72d8af3a0b0d56aa7b44f4adba0d7f6208..8bbd48c5f73bbe52a1b5b4cb1c41180f586cedb8 100644 GIT binary patch delta 6564 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 NHp#Bq+~@VQ{{vtVSA_ro diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index ffdfd5f..f684b84 100644 --- a/locales/de/LC_MESSAGES/loops.po +++ b/locales/de/LC_MESSAGES/loops.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: $Id$\n" "POT-Creation-Date: 2007-05-22 12:00 CET\n" -"PO-Revision-Date: 2012-02-16 12:00 CET\n" +"PO-Revision-Date: 2012-03-28 12:00 CET\n" "Last-Translator: Helmut Merz \n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -437,6 +437,12 @@ msgstr "Suchbegriff" msgid "Select if you want to create a new version" msgstr "Bitte markieren, wenn Sie eine neue Version anlegen möchten" +msgid "Suppress Versioning" +msgstr "Keine Versionierung" + +msgid "Check this field if you want to suppress versioning for this resource." +msgstr "Bitte markieren, wenn diese Ressource nicht versioniert werden soll." + msgid "Search text" msgstr "Suchtext" diff --git a/versioning/interfaces.py b/versioning/interfaces.py index 1241dea..51e130c 100644 --- a/versioning/interfaces.py +++ b/versioning/interfaces.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2006 Helmut Merz helmutm@cy55.de +# Copyright (c) 2012 Helmut Merz helmutm@cy55.de # # 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 @@ -18,8 +18,6 @@ """ Versioning interfaces. - -$Id$ """ from zope.interface import Interface, Attribute @@ -30,31 +28,34 @@ class IVersionable(Interface): """ An object that may exist in different versions. """ - versionNumbers = Attribute(u'A tuple of version numbers for the context ' + versionNumbers = Attribute('A tuple of version numbers for the context ' 'object, with a number for each level') - variantIds = Attribute(u'A tuple of variant IDs (e.g. for language ' + variantIds = Attribute('A tuple of variant IDs (e.g. for language ' 'varuants) for the context object') - versionId = Attribute(u'A string identifying this version, e.g. 1.1_de, ' + versionId = Attribute('A string identifying this version, e.g. 1.1_de, ' 'derived from versionNumbers and variantIds') - master = Attribute(u'The object (master version) that should be used for access to ' + master = Attribute('The object (master version) that should be used for access to ' 'version-independent attributes and central ' 'versioning metadata') - parent = Attribute(u'The version this one was created from') + parent = Attribute('The version this one was created from') - comment = Attribute(u'Somme informative text provided when creating ' + comment = Attribute('Somme informative text provided when creating ' 'this version') # attributes taken from the master version: - versions = Attribute(u'A dictionary of all versions of this object') + versions = Attribute('A dictionary of all versions of this object') - currentVersion = Attribute(u'The default version to be used for editing') + currentVersion = Attribute('The default version to be used for editing') - releasedVersion = Attribute(u'The default version to be used for viewing') + releasedVersion = Attribute('The default version to be used for viewing') + + notVersioned = Attribute('A boolean that is True if this object should ' + 'not be versioned') def createVersion(level=1): """ Create a copy of the context object as a new version and return it. diff --git a/versioning/versionable.py b/versioning/versionable.py index 421bc4d..1e85db3 100644 --- a/versioning/versionable.py +++ b/versioning/versionable.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2007 Helmut Merz helmutm@cy55.de +# Copyright (c) 2012 Helmut Merz helmutm@cy55.de # # 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 @@ -18,8 +18,6 @@ """ Utilities for managing version informations. - -$Id$ """ from BTrees.OOBTree import OOBTree @@ -129,6 +127,13 @@ class VersionableResource(object): m = self.versionableMaster return self.versionableMaster.getVersioningAttribute('releasedVersion', None) + def getNotVersioned(self): + m = self.versionableMaster + return self.versionableMaster.getVersioningAttribute('notVersioned', False) + def setNotVersioned(self, value): + self.versionableMaster.setVersioningAttribute('notVersioned', bool(value)) + notVersioned = property(getNotVersioned, setNotVersioned) + def createVersionObject(self, versionNumbers, variantIds, comment=u''): versionableMaster = self.versionableMaster versionableMaster.initVersions() From a51e8e3f1954bea937381a84de297f0c98060067 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 29 Mar 2012 20:12:35 +0200 Subject: [PATCH 04/10] provide special part e.g. for start pages --- browser/lobo/configure.zcml | 8 ++++++++ browser/lobo/standard.pt | 10 ++++++++++ browser/lobo/standard.py | 7 +++++++ 3 files changed, 25 insertions(+) diff --git a/browser/lobo/configure.zcml b/browser/lobo/configure.zcml index d179e44..5bf7ea0 100644 --- a/browser/lobo/configure.zcml +++ b/browser/lobo/configure.zcml @@ -39,6 +39,14 @@ factory="loops.browser.lobo.standard.List1" permission="zope.View" /> + + + +
+ +
+
+ + +
diff --git a/browser/lobo/standard.py b/browser/lobo/standard.py index aa82276..fb8e1aa 100644 --- a/browser/lobo/standard.py +++ b/browser/lobo/standard.py @@ -246,6 +246,13 @@ class List2(BasePart): gridPattern = [['span-4 clear', 'span-2 last']] +class List3(BasePart): + + macroName = 'list3' + imageSize = 'large' + gridPattern = [['span-6 clear']] + + class Header0(BasePart): macroName = 'header' From b1a408bb9c681225fedfc6266351feff6a587716 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 30 Mar 2012 12:52:35 +0200 Subject: [PATCH 05/10] do not show version number for unversioned objects in listings, suppress versioning portlet accordingly --- browser/concept_macros.pt | 2 +- browser/resource.py | 4 ++-- expert/browser/search.pt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/browser/concept_macros.pt b/browser/concept_macros.pt index f3109df..eef5950 100644 --- a/browser/concept_macros.pt +++ b/browser/concept_macros.pt @@ -239,7 +239,7 @@ - 1: + if (versionable is not None and + not versionable.notVersioned and len(versionable.versions) > 1): cont.macros.register('portlet_right', 'versions', - #title=' '. join((_('Version'), versionable.versionId)), title=_(u'Version ${versionId}', mapping=dict(versionId=versionable.versionId)), subMacro=version_macros.macros['portlet_versions'], diff --git a/expert/browser/search.pt b/expert/browser/search.pt index f4b1fe6..4bcfc4d 100644 --- a/expert/browser/search.pt +++ b/expert/browser/search.pt @@ -129,7 +129,7 @@ - -
+
 
From ac9366e8053f22575679fc6655dec48af5506981 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 5 Apr 2012 12:55:18 +0200 Subject: [PATCH 07/10] get more control on formatting of descriptions --- browser/lobo/standard.pt | 4 ++-- browser/skin/lobo/lobo.css | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/browser/lobo/standard.pt b/browser/lobo/standard.pt index 2afa84f..9148b61 100644 --- a/browser/lobo/standard.pt +++ b/browser/lobo/standard.pt @@ -17,7 +17,7 @@ title cell/description">

- +
@@ -154,7 +154,7 @@
- +  
diff --git a/browser/skin/lobo/lobo.css b/browser/skin/lobo/lobo.css index 317bf01..3e78ba6 100644 --- a/browser/skin/lobo/lobo.css +++ b/browser/skin/lobo/lobo.css @@ -10,6 +10,10 @@ margin-top: 1em; } +.head-description, .legend { + font-style: italic; +} + ul.view-modes { padding: 0 0 0 2em; margin: 0.7em 0 0 0; From 2103901b1b99c8763567d09b79817d416e37d0a1 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 6 Apr 2012 11:20:45 +0200 Subject: [PATCH 08/10] page layout: visible container borders in standard Lobo skin --- browser/form_macros.pt | 7 ++++--- browser/skin/lobo/lobo.css | 12 ++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/browser/form_macros.pt b/browser/form_macros.pt index d8a1acf..f39b0a9 100644 --- a/browser/form_macros.pt +++ b/browser/form_macros.pt @@ -1,6 +1,5 @@ - +
+ fixedType view/fixedType; + langInfo view/languageInfo; + language langInfo/language">
Date: Fri, 6 Apr 2012 12:17:04 +0200 Subject: [PATCH 09/10] page layout: visible container borders in standard Lobo skin: re-position top/page actions --- browser/skin/lobo/body.pt | 2 +- browser/skin/lobo/lobo.css | 13 ++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/browser/skin/lobo/body.pt b/browser/skin/lobo/body.pt index e9c1a36..50577c5 100644 --- a/browser/skin/lobo/body.pt +++ b/browser/skin/lobo/body.pt @@ -16,7 +16,7 @@ tal:attributes="src string:${resourceBase}logo.png" />
-
diff --git a/browser/skin/lobo/lobo.css b/browser/skin/lobo/lobo.css index 42c945f..712e4ca 100644 --- a/browser/skin/lobo/lobo.css +++ b/browser/skin/lobo/lobo.css @@ -260,12 +260,7 @@ fieldset.box td { .top-actions { position: absolute; - top: 1em; -} - -.quicksearch { - position: absolute; - top: 0.5em; + top: 30px; } .quicksearch input { @@ -274,13 +269,13 @@ fieldset.box td { .language-switch { position: absolute; - top: 2.5em; + top: 55px; } .page-actions { position: absolute; - top: 0.8em; - margin-left: 18.5em; + top: 55px; + margin-left: 210px; } .top image { From a673cbcead2435de236ad12aa7d784ef7211b2e0 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 6 Apr 2012 15:40:58 +0200 Subject: [PATCH 10/10] if language options specifies only one language always use this one independent of personal settings --- i18n/README.txt | 2 +- i18n/browser.py | 20 ++++++++------------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/i18n/README.txt b/i18n/README.txt index 44b8b98..534ec0b 100644 --- a/i18n/README.txt +++ b/i18n/README.txt @@ -52,7 +52,7 @@ the default language using a LanguageInfo object that is similar to a view. >>> from loops.i18n.browser import LanguageInfo >>> langInfo = LanguageInfo(topic01, TestRequest()) >>> langInfo.availableLanguages - [] + >>> langInfo.language is None True >>> langInfo.defaultLanguage is None diff --git a/i18n/browser.py b/i18n/browser.py index 4f27b28..a064917 100644 --- a/i18n/browser.py +++ b/i18n/browser.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# Copyright (c) 2012 Helmut Merz helmutm@cy55.de # # 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 @@ -18,8 +18,6 @@ """ View extension for support of i18n content. - -$Id$ """ from zope import interface, component @@ -29,6 +27,7 @@ from zope.cachedescriptors.property import Lazy from zope.i18n.interfaces import IUserPreferredLanguages from zope.i18n.negotiator import negotiator +from cybertools.meta.interfaces import IOptions from loops.common import adapted @@ -50,12 +49,7 @@ class LanguageInfo(object): @Lazy def availableLanguages(self): - for opt in self.loopsRoot.options: - if opt.startswith('languages:'): - return opt[len('languages:'):].split(',') - return [] - # new implementation: - # return IOptions(self.context).i18n.languages + return IOptions(self.loopsRoot).languages @Lazy def defaultLanguage(self): @@ -64,10 +58,12 @@ class LanguageInfo(object): @Lazy def language(self): + available = self.availableLanguages or ('en', 'de') + if len(available) == 1: + return available[0] lang = self.request.get('loops.language') - if lang is not None and lang in self.availableLanguages: + if lang is not None and lang in available: return lang - available = self.availableLanguages or ('en', 'de',) return (negotiator.getLanguage(available, self.request) or self.defaultLanguage) @@ -95,7 +91,7 @@ class I18NView(object): def checkLanguage(self): session = ISession(self.request)[packageId] - lang = session.get('language') + lang = session.get('language') or self.languageInfo.language if lang: self.setLanguage(lang)