From 705b4a6f2dc295a32330fab2d159430cc65f7782 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 25 Nov 2011 09:02:14 +0100 Subject: [PATCH] work in progress: breadcrumbs --- README.txt | 17 +++++++++++++++++ browser/common.py | 5 +++-- browser/node.py | 13 ++++++++++++- browser/skin/lobo/body.pt | 3 ++- locales/de/LC_MESSAGES/loops.mo | Bin 15234 -> 15279 bytes locales/de/LC_MESSAGES/loops.po | 5 ++++- 6 files changed, 38 insertions(+), 5 deletions(-) diff --git a/README.txt b/README.txt index 3d37044..2d862e4 100755 --- a/README.txt +++ b/README.txt @@ -649,6 +649,23 @@ to the bottom, and to the top. ['m111', 'm114', 'm112', 'm113'] +Breadcrumbs +----------- + + >>> view = NodeView(m112, TestRequest()) + >>> view.breadcrumbs() + [] + + >>> loopsRoot.options = ['showBreadcrumbs'] + >>> m114.nodeType = 'page' + >>> m114.target = cc1 + >>> view = NodeView(m114, TestRequest()) + >>> view.breadcrumbs() + [{'url': 'http://127.0.0.1/loops/views/m1', 'label': u'Menu'}, + {'url': 'http://127.0.0.1/loops/views/m1/m11', 'label': u'Zope'}, + {'url': 'http://127.0.0.1/loops/views/m1/m11/m114', 'label': u''}] + + End-user Forms and Special Views ================================ diff --git a/browser/common.py b/browser/common.py index 762fba1..659fc11 100644 --- a/browser/common.py +++ b/browser/common.py @@ -18,8 +18,6 @@ """ Common base class for loops browser view classes. - -$Id$ """ from cgi import parse_qs, parse_qsl @@ -146,6 +144,9 @@ class BaseView(GenericView, I18NView): return self.controller.getTemplateMacros('resource', resource_macros) #return resource_macros.macros + def breadcrumbs(self): + return [] + @Lazy def name(self): return getName(self.context) diff --git a/browser/node.py b/browser/node.py index 9c4cc9b..5c95f8d 100644 --- a/browser/node.py +++ b/browser/node.py @@ -36,7 +36,7 @@ from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent from zope.lifecycleevent import Attributes from zope.formlib.form import Form, FormFields from zope.proxy import removeAllProxies -from zope.publisher.defaultview import getDefaultViewName +from zope.app.publisher.browser import getDefaultViewName from zope.security import canAccess, canWrite, checkPermission from zope.security.proxy import removeSecurityProxy from zope.traversing.api import getParent, getParents, getPath @@ -91,6 +91,10 @@ class NodeView(BaseView): self.recordAccess() return result + @Lazy + def title(self): + return self.context.title or getName(self.context) + def breadcrumbs(self): if not self.globalOptions('showBreadcrumbs'): return [] @@ -100,6 +104,13 @@ class NodeView(BaseView): if menuItem != menu.context: data.append(dict(label=menuItem.title, url=absoluteURL(menuItem, self.request))) + for p in getParents(menuItem): + if p == menu.context: + break + data.insert(1, dict(label=p.title, + url=absoluteURL(p, self.request))) + if self.virtualTarget: + data.extend(self.virtualTarget.breadcrumbs()) return data def recordAccess(self, viewName=''): diff --git a/browser/skin/lobo/body.pt b/browser/skin/lobo/body.pt index 6f8f83c..fc9fc50 100644 --- a/browser/skin/lobo/body.pt +++ b/browser/skin/lobo/body.pt @@ -29,10 +29,11 @@
+ You are here: - / + >
diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index 616b70a25aa0e526ef0b7ce215c893781f0a340c..72fad95c341c5318a67892cf39cac7935a17724d 100644 GIT binary patch delta 4920 zcmXxo32;@_8Nl)TLIO!3gzSI;0wH1F!VaY)o0L`wiq5o-El@~-LPgo3I8Sg?5DvhSvvo< z`N@;{>FXl?nkS;D6zejhXfEX!@@$Qwhf1PoEIy1~uofHQ`QSxtMEyE8!1U%()EG0d z4HjZE?1Nc25}RN((mxqJK*0eM!i5=FM13I^<7&*om(dAcM+0~hi8VS9>PN%%<5)oZ zC!zft%%y%64K%w&6ph1t%w+xOXB0AMn2C0nd+S0JJre3qpc6ig`M5D$--QPBCc48z z=*~V2*UzGXUO@ZRrD(rr(G0zY_CJ93 zI}z&Vkj+L{(SQqXi!)e>O{w=m109Y@7aB{!9ZoG*dvbswOI>r}XY2HnY* z=-IiBraF^V9hZyFQy6T8&R>ac_;$44*jD7T^T=QRFs8Pon|+7TxI| z(2Tr=?sPx8&=IuXN%T;kM>F&-nn|BY`)8vWNET4=LUVM&cIX0?*ay3X`cKh*)6gBv zM&^u`pl4t`dQWT7iT@h>8#?Y7y70+R{}-}OGWv>w123ZyM`dv!4bhZlqdRMj-kKih z4u_)kyV3W=Bs9f~&~eK{{YCUJZ$&e)AKk#a*xcv;Bn5YT3C+Mwv|}3EawkpE0R^Gn z7QOeCXy60UTR0Rea10vooN)c|;3{;3>(ER*k3CsG+C;$sj-!XE4m|^3BTrUz10B$! zUA*&l=)zT@J_w!o`)CHnqW#CCflo!}oreaxGF*QSlir(+pHlKe~n#n3%0@Icq>!reAm&9WmLxPS?GMpW)w0gv)oBZgl?I;GuB+C^q!@KS9BTPNEZ?MN|9*I`A?Y z`OVOt)*o6;s4wlvYuM-iAO#m}z)5R}&Cm%; z&_h{{cyN`8a+Gp!Awr7{abb=|GpTiXfQ>0 zqNjHfI^Z#MfpuuVEofl1q5VYgb2RW9Xl5F7pGgdXBLG?SlV4t|E7 zol8jy4!nj&p57xqj74aw+o2P7MhEsqCmfCjFgmnPMElJ|cfJS>bWNzgie_>jn(1Sq zJ^2L%Q<~@*@3$U%)ZcFQfB} z>Kh-zYRsknb1cV2Xa-;E%l&ua-_c;i`_LU7LMQkLeO^yv5hnV@*GtfPXLRScqqkrT z8qg2X@smRPbaei?=)#N94KC|P{@u~DG&tdUbb>cR$9;G!#rPfCPoeLHR{i5!)E_x# zQ8l{Y5_F;EXkcqX{iWb$^y%7)9?rLu6dd?Y@K~@8UHA;z@e-2N=qmc6>MIo(Uc5(SfU3?^1Ar_tAkLhYp{k11<({pc%;+9H%%d zn2Tnn2<=}H?1l!|7kz&WMHjvUo#$@M^HAMK!9z0zo!~)q;Ji>@iU#-;y3jM|M4M8} z^MZ) z3reys(zbz5ed^Q>kxE1z-4Xlk1JapClgYm^$Njue*U+@$nm z=vtims<0$+HI-G=J8?ZVq^LUa-_)w2j}n(s(~8F@8l~PYE>9GuzAWz0DU;c1!>9?! zYw^}Mz(&mD+Gn_qPr=S1C1aarmra~iQ#Q3`R?VQD%PX!W(tCC5HE`#$4(0jTv!^{c RxoqmRnpuN(zC5rl@jsT_@yh@J delta 4882 zcmXxo3y{s%9l-H(_rWe}**6JMc3E%MD?t(xr6Uv1M5IPZiW-beV}#K(xoNa9Q4-@u zOBzWVA|*rAt2CvlBHE(TF)ZQ#?^zwW7-JD>ADzw`T_|J^%2p7!dr+}r*1#jt6Ihe_8O+4XSR1clW6Y`_LOra& zT6m4m;FN#1+onR9{2q z-9gvMA_}d8u3w5CxC1(_S0nOoLmwJka3~t_7&Jvw(bUdB$GwG)TY_d}4SM43=m`&@ zap!4YX8)ycSnY^TS|~_zk-7rdZ#J23C!3 zbQv9g3munL9zrWDLNoO+`uYvV3Y>`UGq;@l8~J=1+~^nR$v;HfS7S@ufEjoU-RK0m zz!`M>1@yJOiH^%>m$q1dmDm#vcpMt=40PV?3i9tpKc~TOwndnUtI_uL(chz&Y73ge zedtEV(MNF-v+x|6>PzUj+-B)z%8ij5! z9v$!eHaH6#<8RRn?MK%+f*$BpZ2vd9&PB||vKs2>aqZ22f zuiq3jz#n4`d>tJ>7Y%G7y1|m@^4Px$YtX(C*(Vu3rQkw4(3I^$Cmuv2|3_^95*>E| z4e$!O;q7S6%5-}@^w!r$$2Z3Z5`5+2H>r5c-l zelNOVMQnc%{bK2h1~?2y;b`>4f5KY$Il952SU-t1sb4_v+I4h(erxjYM)y!~fpT;} z6`GO0(f;THPhu?`fu3|6-u<0`{*js&>nmdaHuUaPM^DH8o9OpJaU1e)irR67y}frlA98p@A)l?Hi*z(ZG+QnK_H5`ZgL+G0&|6+arIG!;|Ruz+|-ljke_9zhcX1 z;C_T1=!WOxz*_Cnzlxiq6MCa39*I8Vsb~ggp_xgc2YDC0#GBDfZpAwISM=^2K<6D! zQZVw9n1@%V$^L_t&P-sfWW7rHQp%YVRU~fm?LpNT6KEqY$hHKGhxjFh78qgke+&(lz2eA+@ zVqMJcM5fq3lu$6$EzyCGqNyGp>*KM2`j61tn?e`*7`+=?&;#s21HXiBd;`5xx6%2v zJEtE>BQ(HvnB=!b=uE-XJcVvN5_v_#B=lJ=L{GR1U2r3M>9)uA&v5|tgXlUfyQD8+ z6?)Rgu^dOB8GHp@cXk)@Z^Vmf@I=ee1va7Y>ozRG<7of&SkLR4K6z905p+NU>WkmUW9*G`s0(zk7UCF;2yh?)$EQkXa zzF3R{&Cs*Qr2L-vYfW-LYmH3Xf25Vm}*jC>r5+(2d5S3r$NcEa;taC!~%P zG|$LLq-qon=$FGU8~^Jj@cA12mrL1oSMo8Vb*Znz5qyU5@!z#HVGO!w?bM>e#)-Vt zrotWt`HVjr`|D$ADz~V0lLW0TsQohbtib7f`tT{HFEcf?Xj&pWwX3Ks_cCq2;`5)> z*`gjLS1H}(9VjhN6s2yJR<^9kYFpy0XOOSGyWjlpV?Fx* kh4c9ouIXPkD1XgI&8{Z0I<)OnwPtB$dEuJsZu=Ae1D90t!~g&Q diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index 8586a11..a14d767 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: 2011-10-31 12:00 CET\n" +"PO-Revision-Date: 2011-11-19 12:00 CET\n" "Last-Translator: Helmut Merz \n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -11,6 +11,9 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: kwrite\n" +msgid "You are here:" +msgstr "Sie sind hier:" + msgid "Concept" msgstr "Begriff"