From 3f85bd14fbc0872399be8f570475e4de25bb0a7c Mon Sep 17 00:00:00 2001 From: Jono Menz Date: Wed, 13 Aug 2014 10:11:18 +0930 Subject: [PATCH] Initial commit --- README.md | 43 +++++- _config.php | 4 + _config/config.yml | 7 + code/BetterNavigator.php | 64 ++++++++ composer.json | 17 +++ css/betternavigator.css | 210 +++++++++++++++++++++++++++ images/bn-icon-sff60849a67.png | Bin 0 -> 2418 bytes images/bn-icon/close.png | Bin 0 -> 1014 bytes images/bn-icon/cog.png | Bin 0 -> 1130 bytes images/bn-icon/db.png | Bin 0 -> 1250 bytes images/bn-icon/devmode.png | Bin 0 -> 1269 bytes images/bn-icon/edit.png | Bin 0 -> 1146 bytes images/bn-icon/flush.png | Bin 0 -> 1277 bytes images/bn-icon/info.png | Bin 0 -> 1331 bytes images/bn-icon/tick.png | Bin 0 -> 1196 bytes images/bn-icon/tools.png | Bin 0 -> 1313 bytes images/bn-icon/user.png | Bin 0 -> 1210 bytes images/bn-icon/view.png | Bin 0 -> 1228 bytes images/demo.png | Bin 0 -> 13040 bytes javascript/BN.LeftAndMain.Preview.js | 17 +++ javascript/betternavigator.js | 36 +++++ scss/betternavigator.scss | 167 +++++++++++++++++++++ templates/BetterNavigator.ss | 81 +++++++++++ 23 files changed, 643 insertions(+), 3 deletions(-) create mode 100644 _config.php create mode 100644 _config/config.yml create mode 100755 code/BetterNavigator.php create mode 100644 composer.json create mode 100644 css/betternavigator.css create mode 100644 images/bn-icon-sff60849a67.png create mode 100644 images/bn-icon/close.png create mode 100644 images/bn-icon/cog.png create mode 100644 images/bn-icon/db.png create mode 100644 images/bn-icon/devmode.png create mode 100644 images/bn-icon/edit.png create mode 100644 images/bn-icon/flush.png create mode 100644 images/bn-icon/info.png create mode 100644 images/bn-icon/tick.png create mode 100644 images/bn-icon/tools.png create mode 100644 images/bn-icon/user.png create mode 100644 images/bn-icon/view.png create mode 100644 images/demo.png create mode 100755 javascript/BN.LeftAndMain.Preview.js create mode 100755 javascript/betternavigator.js create mode 100644 scss/betternavigator.scss create mode 100644 templates/BetterNavigator.ss diff --git a/README.md b/README.md index 6ea1d25..24206a3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,41 @@ -silverstripe-betternavigator -============================ +![Diagram of module](/images/demo.png?raw=true) -Front-end utility menu for SilverStripe websites featuring administration and development tools +This module is intended to replicate and expand upon the functionality provided by SilverStripe's built-in SilverStripeNavigator class. It provides a handy front-end menu for CMS users which offers these features: + +**For Content Authors** + + - Indicates to a user that they are logged in + - Indicates whether they are viewing draft or live content + - Quickly edit the page you're viewing + + **For Developers** + + - When in Dev Mode links are included for accessing most of SilverStripe's [URL Variable Tools](http://doc.silverstripe.org/framework/en/reference/urlvariabletools) + - Developers can access these tools on a live website by nominating themselves as a developer in the site config + + +##Requirements + +SilverStripe 3.1 + +##Installation + +**Composer / Packagist ([best practice](http://doc.silverstripe.org/framework/en/trunk/installation/composer))** +Add "jonom/silverstripe-betternavigator" to your requirements. + +**Manually** +Download, place the folder in your project root, rename it to 'betternavigator' (if applicable) and run a dev/build?flush=1. + +##How to use + +Just place **$BetterNavigator** somewhere in your template(s). If your website uses caching, make sure BetterNavigator's output is excluded. + +##Customisation + +Scripts and CSS are included via the BetterNavigator.ss template, so you can completely customise the front-end code and included links by copying or creating your own BetterNavigator.ss template. + +The BetterNavigator.ss template's scope is set to the page that is being viewed, so any methods available in your page controller will be available in the BetterNavigator.ss template. This should allow you to add custom links by page type if you wish. + +##Known issues + + - Probably won't work in IE8 or lower. \ No newline at end of file diff --git a/_config.php b/_config.php new file mode 100644 index 0000000..e4447e5 --- /dev/null +++ b/_config.php @@ -0,0 +1,4 @@ +owner && $this->owner->dataRecord) { + + //Get SilverStripeNavigator links & stage info (CMS/Stage/Live/Archive) + $nav = array(); + $navigator = new SilverStripeNavigator($this->owner->dataRecord); + $items = $navigator->getItems(); + foreach($items as $item) { + $nav[$item->getName()] = array( + 'Link' => $item->getLink(), + 'Active' => $item->isActive() + ); + } + + //Is the logged in member nominated as a developer? + $member = Member::currentUser(); + $devs = Config::inst()->get('BetterNavigator', 'developers'); + $isDeveloper = $member && is_array($devs) ? in_array($member->Email, $devs) : false; + + //Add other data for template + $nav = array_merge($nav, array( + 'Member' => $member, + 'Stage' => Versioned::current_stage(), + 'LoginLink' => Config::inst()->get('Security', 'login_url'), + 'Mode' => Director::get_environment_type(), + 'IsDeveloper' => $isDeveloper + )); + + //Merge with page data, send to template and render + $nav = new ArrayData($nav); + $page = $this->owner->customise($nav); + return $page->renderWith('BetterNavigator'); + } + } + return false; + } +} \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..bc65f2d --- /dev/null +++ b/composer.json @@ -0,0 +1,17 @@ +{ + "name": "jonom/silverstripe-betternavigator", + "description": "Front-end utility menu for SilverStripe websites featuring administration and development tools", + "type": "silverstripe-module", + "keywords": ["silverstripe", "navigator", "SilverStripeNavigator", "BetterNavigator"], + "license": "BSD-3-Clause", + "authors": [{ + "name": "Jonathon Menz", + "homepage": "http://jonathonmenz.com" + }], + "require": { + "silverstripe/framework": "~3.1" + }, + "extra": { + "installer-name": "betternavigator" + } +} \ No newline at end of file diff --git a/css/betternavigator.css b/css/betternavigator.css new file mode 100644 index 0000000..287abdd --- /dev/null +++ b/css/betternavigator.css @@ -0,0 +1,210 @@ +.bn-icon-sprite, .bn-icon-close, .bn-icon-cog, .bn-icon-db, .bn-icon-devmode, .bn-icon-edit, .bn-icon-flush, .bn-icon-info, .bn-icon-tick, .bn-icon-tools, .bn-icon-user, .bn-icon-view { + background-image: url('/betternavigator/images/bn-icon-sff60849a67.png'); + background-repeat: no-repeat; +} + +.bn-icon-close { + background-position: 0 0; + height: 12px; + width: 12px; +} + +.bn-icon-cog { + background-position: 0 -12px; + height: 17px; + width: 17px; +} + +.bn-icon-db { + background-position: 0 -29px; + height: 16px; + width: 16px; +} + +.bn-icon-devmode { + background-position: 0 -45px; + height: 16px; + width: 16px; +} + +.bn-icon-edit { + background-position: 0 -61px; + height: 16px; + width: 16px; +} + +.bn-icon-flush { + background-position: 0 -77px; + height: 16px; + width: 16px; +} + +.bn-icon-info { + background-position: 0 -93px; + height: 16px; + width: 16px; +} + +.bn-icon-tick { + background-position: 0 -109px; + height: 16px; + width: 16px; +} + +.bn-icon-tools { + background-position: 0 -125px; + height: 16px; + width: 16px; +} + +.bn-icon-user { + background-position: 0 -141px; + height: 16px; + width: 16px; +} + +.bn-icon-view { + background-position: 0 -157px; + height: 16px; + width: 16px; +} + +span[class^='bn-icon'], span[class*=' bn-icon'] { + display: inline-block; +} + +#BetterNavigator { + position: fixed; + top: 0; + right: 0; + z-index: 99999; + background: #cfd8de; + border: 1px solid #ecf0f2; + border-width: 0 0 1px 1px; + box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.5); + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; + text-align: left; +} +#BetterNavigator.collapsed { + right: auto; + left: 100%; + width: auto; + overflow: visible; +} +#BetterNavigator.collapsed #BetterNavigatorStatus { + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + -moz-transform-origin: 0 0; + -ms-transform-origin: 0 0; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + white-space: nowrap; + box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.5); + border: 1px solid #fff; + border-width: 0 1px 1px 0; +} +#BetterNavigator.collapsed #BetterNavigatorStatus .bn-icon-close { + display: none; +} +#BetterNavigator.collapsed #BetterNavigatorStatus .bn-icon-cog { + display: inline-block; +} +#BetterNavigator.collapsed #BetterNavigatorContent { + display: none; +} + +#BetterNavigatorStatus { + color: #fff; + background: #6f6f6f; + text-transform: uppercase; + cursor: pointer; + padding: 10px 15px 8px; + font-weight: bold; +} +#BetterNavigatorStatus.Live { + background: #39b54a; +} +#BetterNavigatorStatus.Live:hover { + background: #36ab46; +} +#BetterNavigatorStatus.Stage { + background: #f26c4f; +} +#BetterNavigatorStatus.Stage:hover { + background: #e5664b; +} +#BetterNavigatorStatus .bn-icon-cog { + margin: -4px 8px -4px -4px; + display: none; +} +#BetterNavigatorStatus .bn-icon-close { + float: right; + margin: 1px 0 0 0; +} +#BetterNavigatorStatus .bn-icon-cog, +#BetterNavigatorStatus .bn-icon-close { + opacity: .7; +} +#BetterNavigatorStatus:hover { + background: dimgray; +} +#BetterNavigatorStatus:hover .bn-icon-cog, +#BetterNavigatorStatus:hover .bn-icon-close { + opacity: 1; +} + +#BetterNavigatorContent { + padding: 6px; + color: #71767a; +} +#BetterNavigatorContent .bn-heading { + text-align: center; + text-transform: uppercase; + font-size: 11px; + margin: 8px 0 4px 0; +} +#BetterNavigatorContent span[class^='bn-icon'], #BetterNavigatorContent span[class*=' bn-icon'] { + margin: -2px 5px -3px -2px; +} +#BetterNavigatorContent a, +#BetterNavigatorContent span.bn-disabled { + display: block; + background: #eceff2; + color: #313639; + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; + border-radius: 5px; + border-bottom: 1px solid #a3aaaf; + margin: 0 0 4px 0; + padding: 6px 10px 5px 10px; + line-height: 16px; + font-weight: bold; +} +#BetterNavigatorContent a .light, +#BetterNavigatorContent span.bn-disabled .light { + font-weight: normal; +} +#BetterNavigatorContent a:focus, +#BetterNavigatorContent a:hover, +#BetterNavigatorContent a:active { + background: #fff; + color: #000; +} +#BetterNavigatorContent span.bn-disabled { + background: #afbac0; + color: #51565a; + cursor: default; +} + +body > p.message { + text-align: left; + background: #fff; + color: #222; + padding: 10px 20px; + margin: 0; + border-bottom: 1px solid #ccc; + border-left: 5px solid #1d8aff; +} diff --git a/images/bn-icon-sff60849a67.png b/images/bn-icon-sff60849a67.png new file mode 100644 index 0000000000000000000000000000000000000000..930575b9b32149bbaf5daf10d3c7405dad704f45 GIT binary patch literal 2418 zcmeHJ=QkUQ8;(7SXrhE`)l8#S?m^Yom{npGwMWgwj8fE$7_lWr%~IT=rS_(-l^VsZ zy2iCDy#%2|Rn_(T4}Kr+$NQXjocH7NoadbPNkN(#aIy=q0{{R{BSVD6)xLh!uUQ$c zrfavy2mnAIg*36!yE^}WC@QP|SN|#SuPAVNd8s~JGjV0Uj~EM6O8`5kfV{#3&zPLT z>i)qAI(i01W)@a9_G=uRTtE<*=LRnyMBo=eAz=~Gn_}V;l2XuHFj+Zy1x2`$vdW#i zY8qPFI=c4|din-N#wHI;&5-66RyMYe>>V7PTwFaoy}VIq|G?mo(6FZwkx|d0W8)IA ziMZsHRD4=`Ms_YSzo4+FxU{VNMMY&*bxmzu{hP+OO)YKh9i2VBef4&rRCMN^^MJ~&)Z-A-r1$>?H^E&z8;^@PQRUfKmT#@^AZ57*PsCa zOfyCZ9joxg)=!ZpmNpOowP6p9W^xwwx2RB;@TRh9HnI65aXm0|Mk^jhWe;@(hMhrA z+tqed`<)ns5iTTyC?+I{Sev?K3oS8!cJu{#j-Za-zXeyw9+q`~y;EAh1-YfjZ$AyKO{$g* zX0y4O;HR&$m7`fJJL^sV7Z>zy?UGM7Tgf6`i)geO_;j1)m9^2M5f)w zZz00%E0=Pe982^pT9OQf^R4_p{@4)-P{-a1`KvU@qHt#$S2juX;Wb*Sc5(xr_RZNG z#T0HCz2Z1K@1M&j?i6%=3u>x02Q}3iKy&w#4{S5>K1_{%;MB{~Ppj1|es@QP461bJ zqjfmkE2wXRH^^i(#1?gOyeM9_GG%(Z)p(>`oX>i#e`9h|LLb}?Rr_35^KjB~tvlD? zt>DSgUvQR#!AUdDXQ*vWDi>FnFbcIdNha^;X~`89Qdj56i8;}0N27d+IZowN5xxX~ zOO-Y&$AQdxVj=~ksn3cSq02iJOG{N8XzCg3GZ|sXd&*{gftDP6E+pEtKGY#6DAWsb zn)Llm*E&R^JyO8_PD*{C5bCi*B|}b2{ckWKuGaFB#X@WD8EuaeJdQFUeUKmU*gcBn zgkQo-FF&(^4u9WIBo3)YjC$M?NSoLk~5DXjb=k~KBAD%99+(r z)oXo1A6+liIMi3c=5}_80X?uPg$^=PRL3t!zIU@PEID`2`nssYB%kqq`}BJzyxK1$ z67th3x=xytblqs)cM91wvxC2D_DqdZI(FhR4(x2g9&Ifr{P~=p3lQd;=PM}QxO~#T zft1TrsBC7g=r%F|{m44pmCart?Qd|6+XF8AD3lCodd#UE{2+>N?TyZBY$JsBGzR>0`zPcf!U zVFC>W{C6BWhQhOAHZk{?ftt|?Gd$D~q6ax5wi8q4LW@rjNo^HLtMdvtY$1?g%O^0k z8)F&a_9ZLa&2Jl%h}KKS%xzCzvV7TzOogY^FEFaiysayyH1%c;wMfTk#k4w0Pv}Tf z}iF5wR=(!dblaGA)n!@3h%6fUZT6fnWv?=urX+{7Wue3tKL*zZOY5KKSF#8qQwm&=tOdTgur3|gz!UcWza%Ozi3WaWE< z3@@>ZhxxtfHIEOvu{YRV(_~`Sx8gv~QW+@$(q}+`kY+K&*L}KmN)$5pvMr9q%bjU< zxgIw@IXK}rPNzO!`uXv_HPS2SA*qY@A!TSJT1w2>G<{{((lTMIAU?ootCwdKibca3 zlbz0%j?J2sT;8EnH82-ZvNAd(rRkgo{Hh@TLIejIcH`kThvQBLy%450ej8Up=iC45 zKw=YaWIAcwYON>cc8FCtW4@}{CPy8xMs8Oti8oRKn0^;b5PUhin(056r2Pwt107ED rwLHn%k3u(A30vS=yU%g?`y2B74vdT5+)L*FOHM|5rieGXF7f{W)ZN#5 literal 0 HcmV?d00001 diff --git a/images/bn-icon/close.png b/images/bn-icon/close.png new file mode 100644 index 0000000000000000000000000000000000000000..3d09c5107877bc456f2f399e785ea127c79f78f1 GIT binary patch literal 1014 zcmaJ=PiWIn9L_2X8J!GoQ;d2H+ zuHcHXAX~^~%-DyCT%VvRYGyX_O=}fmP=gJ}%hBJTJ*R;Hl6v+04{AV zmaWZIOS0+Nb6_Tt34sf-2_kpR3*{(BcX(xTj?F9$IxcuMM;|0rF^WJ%0R$N)ld?F0 z2U&^XGns5wI12=h7g>&H`E-hxWKonk4s<`7L<{V?T+#~NSmc(Yn;82t%eLEXrk!R` z&|rBxaX`MfA) zm5iopidGPn{B&OJVKrp6TnmR;!;9pY`+i zUvHhD-5zgj{Tw@H{3prN4XLz-N)Y4>Wd!D- zqE&u<43iYKX}?}5;-cIusK{Ux&xdghi=Zhg+2vY_ItDQ)!4cg|(Vy<#qk*oa=)suG z$(9I5^&?X@9GL1Ws8eHVLZiDnLDCfnfdR1sTw~mH1UE%jc?ELz%q$J6E_f_OuO(HK z`+%#1jl3i^b#NgCNZDQI_LbJ`&;+LNqFH99aKo63y0zg}jtqk40`N zdK6;gjLwJ!FLB8;3-WC2mEb`9*86;(Gqy7ujao0>lL*8*iyyUVWe`pfT+eF+? zA|L)F599BglrFe$N<;TIe?EM|KR5k+d3y2P=l8pUOF`RzX8MQuvx`B0?>{@~Ez1{! zflXcDOM&Zkl^B^Cj|hA$nur)fNBtrcSZBqbaO)wLH5xzi4bb&c z!}u-b>EUkQ+^ePFO2A?M=nO2MFTVVE`nSiuw^w=^4kdkC=kMTsZ7pGUw)MxAM-Ntq zW`pX|Ip6QUEcl9hBGFs)^R~(rE|J9@~z)^!|+jk#r`tq;$`g55+>1OxP>8}N_Z><0T literal 0 HcmV?d00001 diff --git a/images/bn-icon/db.png b/images/bn-icon/db.png new file mode 100644 index 0000000000000000000000000000000000000000..a2df70b079c93a1aa8de9f340351b70bf3f234b1 GIT binary patch literal 1250 zcmbVMZ)h837{6w-DPg72eJHJpuQ!wlP3}+bdcC7rlIBtuwsbKIEZ8r(KW~~Ny?d{B zS97f(OP$hv5)i1g>T^`K^*Xna>c6@PD&aw<4T|t_e~q431Twk+ltnJ9#G+&VI|4mKmU>h zhMpwP@CCYHXJOqqzU;u$%QIzdxuJ1)T3%jGlK3XB8@i;^%BAuJ!rWqk4FiegUg$yre<%~SdWpd-WY!92aTu-qy*z;{* z-@Dk{Be7D}fr^KmGD7pcE-2QKhuk`{K{ng1IyhQTG{XvnF9e0!$yG3+N#giG(G?}gf<>9K?FE{EH~S$`;cD%HGy`@~26#Ks6% z+fd)8qqErsHhQabf925QSJpO$`#(-UJp9(L>qY+1r(f8EtC_piq4u5PrPr^|f@_g> zxOIDEy|2;QIvPdi-u!0vLz*T!Y<+_6us=Urs@@F^ZNAYOj#7Ocs=~e2y1CSO@YNXj zA=Htb*W_b;a>pIkNVk!q+t+}esn*AI5i6c-pU9#)_JqcSC246XikF|v5o z|0Pu(e2V^H?)j=S{#Z#&-#hnC{Q|Lh3|t7Eym4uBH2vpK1JNpRf}KF04ZQkw@Yl)b LX5=eV)s?>i0lJ*F literal 0 HcmV?d00001 diff --git a/images/bn-icon/devmode.png b/images/bn-icon/devmode.png new file mode 100644 index 0000000000000000000000000000000000000000..c174002f9156c7907c6add65d92146df869755d2 GIT binary patch literal 1269 zcmbVMU1-}@6uyoZ*KG;aSev#Bp%;bGcGQ++OK~OQ_)pGiS|!2th$)O!Ki7$tNU|lR zR`TSu3|vYfgKg|-jIIxZmaXYa!+uyF{4%zVm6THYFgEru=n5qpV;ziSS5BPmA(SzJ zbniX)eCOvo=jh`2=qo+DUfcx$=qa2Ki+CmcHypy>L%*%dcsc0i%kF8b;?`vwfsAG; z2o?-^5*3lG&DFj_LjVLly;OF~(kVf;jHvAEL_MR5(EtpkysE5DBNr-YQa6+2lh3{+ zp{^y#2~MJ=Y7R~5C+2N*dVaK|&QGhnMy7`0kSAaR26AQS88fCMcuBHtSHOE;Op&my z;!Y>YjiAcXILui#f?Sk~sC0~h2|mhjTp|%W24ghCQZz#`@d(2UEGy77+`98@d7h$UR4f+38WCsCbY(AMIs+XGB63t)ue!Qr zLf@jSShH@D#F1{KU{ob(%dqKe5``(FJh@6SQJOLgKd-j7;}+3BVQj1Il;*04Dk8_4 zwN+e?%0LHa2lGw;(1-d=u4lP0;8;O^IQ~;&Bc|Sd~sh zWEIH~wo;+v2~Ob^_ISt6c6d4)=dv+2$0RZdhRL&hBEyL}F(Zz!nfzcr*TEJ{$CXVL zb$sjC_a-*`OstTzk?dM_$+BiTT`)dnxt23!RbejIt~xv-$*OMp!lQnnHu4sct)D~M zh;13L&9tCz6UBdHU<0rHUj`{06y>+ezuKoG!aeD4w}t^9w#EsWc!q2|Ec%b-F#rND z6vRx)d#L=izMcxc)VR2iZLEL+=h_Hd3tm}0c)NLLcUt-;{pcuhDY$wPzB^q1^}*{i zp&LKYWzc+*eJyzpLEUt+;?-o z36_rC>s?%#0Q;_IF5M5qb0H-G%`S!4g37}3?&h6_x04tPyzwcxn#z9o9eDIIalE^Q z4%`jjyB)sT)mYxwRS#$Q`FF~@2L6W}Nrk$Wa-+xF0(@4-q#5|jKQm|@{ zPP_2%bfK(IPv~)j9^MOve3=-qAXb5IP1>I9C+MbKnd}2GLxZLYo=DKGpvLk=kU}m5 zVpNRiEYATc9_2()lK26@vz)-N9K*#TTwE3enPtJ^LlbYVQIShZX3-ZpCFm-~j?6H% zS}j_OMUgwsaPfGYVR?qlahlRmlonuQdCk(QppI(^k6#G#^!7ftF{i?zD?r0i4`)L6|r*4g(^mF z8KKE`7Zj@qBd>}akV-YH4#Ig=H|;>UGbmImZw0#MNoZtTWPv8rvbjtY|HeQIZ~QNV z3<-(}+U2kIX^Tit2HT}!Acv)Kf;O2Umki5IsSzTBb|t4I%l;ef`@+I-=Z-7qPVF1H z(=jj;=J|W>s?yblAM3q&ZBPBYVPsK zgEO0+e^{4Wv;Q)6Vsml6u9bF%!r7i`WmOkTeS1{>+IQ>O(co{8OBa;e`;MLd4XSBy Au>b%7 literal 0 HcmV?d00001 diff --git a/images/bn-icon/flush.png b/images/bn-icon/flush.png new file mode 100644 index 0000000000000000000000000000000000000000..84ad7b5a5fd59e006ab2ce0a4f690edc0fc0a680 GIT binary patch literal 1277 zcmbVMTWB0*6#lo9#wJZ{utjVN_GhZ4lJ4Ag_A=95vzOU53vOJui$)64x%``*Br~&} znRO@WOEywT>H47f;Dcx?6%|5#QY?K?BtrB-iw|NYqAd6zh$R*uMD6;|CL4W-A`Z-d zIdi^q`OZ0Wu{in2@Zjhm0AM&jA(ikx;=lX)@p|-jN5

H#_B?wkmEzwh>5amV#j3 zkf%`z$=dw6Pf#2H!qdxB?o{DXQMC+8_H`)Fs9`h!@o}#vtFy?33Yyl<1bOTF2PD+B z1o>pRz!Yj3RMjUIY;<~IvaBx5s)9z2KMdoZhz%IXm7!nkp1w#a4d`p6dMjlqufczF)U9rEX{_3tRV8d$S`pGA+a}GtB55j zx9tnx5@gkNYa&fI8V#xuqAYuwW(7f@8II<-Al3*v^QJ3%LDM`ChUgM2A&G-1HYbczI0&ZHgRtMd&$;w;`zW;K#bb=Oc;Ibk(Eoa8^q(p zH#e)zvAeH4a5*se#gBnQ*FR6ETYnJkaB_9%`*-eY4{G!VP)@D9-HN@^8J)Nm*mT}1 zju%%C-dubmx!S)r;C=Mn{p&v@h`q>- qjeNVeT~BTh!}~Y-ZzQ67`tAcuC+nT{JI7o84=JCWl&+@FF8v8>XP@!_ literal 0 HcmV?d00001 diff --git a/images/bn-icon/info.png b/images/bn-icon/info.png new file mode 100644 index 0000000000000000000000000000000000000000..60535237462ec9a9f3c01f1b7fe94e1896c8b4ad GIT binary patch literal 1331 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m@6_vB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc$WX!DQqR!T z)ZE-iN5ROz&_v(BP~Xs4*U-|+#Kg+LKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD#PU%0_}#n6BP2AO_EVu8M)o`HUDF34YC)x{-2sR(CaRb3oXS&*t9 zlva}t%N=+=uFAB-e&w-_a zfQATTyOWR0PZ{s{Wzw3=E8co-U3d6}Og5I;iauDALX=CKgQ#Gtx@4V+LmOxQeBh#X3w!Y5pHXx-5V#)oqP66&GNeS?{@E9{^ZK_ z_oe4{KA%^7@2qR!m5=hTzsM>lFLl+Z-nZ%JWv(Z8_&jDgzS_X89?%jV(WX12ZqNSg z9jv?dHZ@_Y|q-De4lO0o;}n4Oxw-U{*NQy zz&}BT*R*(gMz_*O+Y$!7P17Qrb8gT7kW;v!B~jym>KP-iDPN`6FP&z?x&2bppM}*H zfep8rQ*L+eJv`H7oA0N#OVcWvWvcJq`1AMDjbCfDKl%Svop*RDSKZ%FMee5OLKZO; zx4v5PNM*aNX|%$3hFZ@*tbDh&_3Jn;4w)k@|79<~cEa2B$4>W5pTS<8%Gg-Ch0Fhf n_S#eO8v65pPWhi@&&0#9<6*AGJvFaKpkmC^)z4*}Q$iB}0_xX) literal 0 HcmV?d00001 diff --git a/images/bn-icon/tick.png b/images/bn-icon/tick.png new file mode 100644 index 0000000000000000000000000000000000000000..acee12137529cbd5f638d58a62f36d1022685762 GIT binary patch literal 1196 zcmbVMU1$?o6rQv;ii;RzK`py@8S$5$zs!tdW*eJiCb1DyLkw6D#QC{tr|tZ7=GIIL zt9D_b1;Nr6(HBb*^g+cw?ZYY}DCn|%^FhTI`{1ieL3~i+ousMzP-NMGnS1ZK=Q}^& zIcH|d{YSTK?%qrg#Fk>8TES}~dN;-Kch^co!^=*TA3!JF8menPB(kQfLr}D}L0EyB zIWhJO_7Fs8XjKQ$K#^i{RGRfW}peK~E0UII>g!ZTt$YGjn+LiG>5;G)ds-TfH*$Qf) zR0fLcLm<*3Ww1#ONGX~VMM+Bj0+K8zFf7M#JjJDCL6BJ%tUe_6=9@LSq83(t;ZvF% zLdcUDre3epb)I(pL554EQVg49l1U0{P{D+Qw2*Rw-E9jh3=H4$kmWicvZ(3qI7*W^ z(pCz#S1PR;c7j!+Fl9`rc??IhjBQ7GHMIj&f#1SdS39Uqc#x^Uz#aDuT#wrBHW+jF zeMgZZjz&J=Tev9NsOlQyHgr%?O_TVBHZ4;&*+ZtD#EkL02r0o}B}y}(MhUeV%S)o3 z(uKoqJL}=u953dQBFjlxiR1D@O3I3=qGr{Ckj)>;D{XAi36SO(u(6UBdH zpoKU8FM|vYiiz6gU+vQt;hv1PYr}vKYvTkRJVQPnmOX>lp5sCLyQpTX;Vb=fqtV;B z=iFZrqyI-S->=@yo&EhQ DPvMAa literal 0 HcmV?d00001 diff --git a/images/bn-icon/tools.png b/images/bn-icon/tools.png new file mode 100644 index 0000000000000000000000000000000000000000..09831c9deacb01e26ad6f3822f09038609a22598 GIT binary patch literal 1313 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m@6_vB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc$WX!DQqR!T z)ZE-iN5ROz&_v(BP~Xs4*U-|+#Kg+LKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD#PU%0_}#n6BP2AO_EVu8M)o`HUDF34YC)x{-2sR(CaRb3oXS&*t9 zlva}t%N=+=uFAB-e&w-_a zfQATTyz71LmP3U}o9!#_j_H1EamCi(^Q|tu2%H zdLIfDX}h|}(I8VJ%7v*t%1cHl>QEr3I{QJUW;64`%oqF^ z_h-{b$~Th#-(6WQaZFMmS#V#%)I-Il=Qr0k&6;sj{l7_qtb^NQqgG$#?M!(elJB_{ z$MRb2aXR;awNByW%*z=Y7D_b>?I{=9yo$HtX|TDWTSs((?;NMtf<>m=Us=A*RcPfF zy6}WAd5!^>oX27ImXmw`{+9ge^wjUuhVGqr*Pk;y@Wz>|tLFXTz&dujy&9FTOMCwc zq<76;C@k^J^~UiJo$p?(ji1ENGpAvRcx8jCq;&DY44q@uD^7Ed=m zG}ScPX>WTN4`_@xcwxXB7l}UXfgyp|3qsW-GzkeFHgTKwfDqkr+H`xU5W2@?d-lFvypUe^cjnpOC__4S;Bmo}6sqr-Lu)f5*JY28*K$eYR# zl%b-Jo%|K{5Jbo~N@Y|o9OO0Ij46Rm%r_m3CWxM1-%+$-h=2-*3`-!N-@Hu%Ll?*+ z$pT$)L|8R)<1RcrUMy+j!&*uwd-s7JpT`DFh!o(PBbLYe0@<+3<9#5eNYGG0!vZ-U zRJkw!MB9ZR8B0brI?ezt6=RY~j*EW|;xxljG($0oD3jt@mZxd3@Q~P>t5#y>Wx`Q@uQa4*|Z=*Pjd|i8MXxii;8NG zB7ww_&Zl5Hg~Fm?%Ud7{Q%3oULoqR$GR+{bhPH=f_+J=HYI~(I2U0Th>`_<4^{8|< z!I-=EI|>wWH2fjgz(r9;BwHIbp@s62K;oO2Zs@#Dcj;;zGnPmsVU*QqE~;oyiL#Xn zo#2vcN@cs7c9z16-3-UES&`w=T?~_9Q(QVJiBek1vgu4$Mr>m9mWLEegH7KC_Pv1Z ze=n97U8o@2E!p-+vkL~QHnP2{?Eq11R2}RpD4Jmf!reik=JS@IYkUdytZSQ~!8C6y z5ygiwFpt+imO%;!MFs8hzxHX0a8Cx?#bLmQ#c_fbo*@?x%Xys|#Dn%IFQrTVton9t zt~a!OV!GZxGg)|W=lA_9bN803doMod0L8tvSC87&<5wb6?e(*5-?m>+rLWRwa?H6^ zw>sqS>Kla5Cf+?Iszr$ULjxVJGbnY$?A#6p_dWxV+*=>>eJA~ zmeKm3Mexte#y63&s;yrCL#X9O%qLUreZPg*hKli58+JbYTG~Ub Zp^3@UBDZPy=wHF#B%ditm-`1N{{`Nmhams} literal 0 HcmV?d00001 diff --git a/images/bn-icon/view.png b/images/bn-icon/view.png new file mode 100644 index 0000000000000000000000000000000000000000..b9dd4a6c3dce2dca57e127d145c02d57d1192687 GIT binary patch literal 1228 zcmbVMU1%It6rOChiNr0gQm97CUZ;lI()rz)OlQa@yP4T^SGsZ8uDDn+d57Vt2Wu)$p2*-^Y6JH}m_3j+bXpv4M_zP1Mo@NE9s3fS~N? zQ?LegYyRXNI7ATLkzH?~M&+1ddJe6}I&|dt7)=mEBayG0GY|m-PT6jb{PoMPNMKtz z@)fbdR(uss+ogp79$y%*n+r3hY>^|wU?@_s0S6)-M9!=mDp8JX+g0#BK4wVJRzWj4 zaxWJcTu=aNb3FM7iPqjs*>dW?=is_FNEK)D3SA z0?1X1|nJtbA5+@ZTjw=eXR1h^)D`;avp*UDnJJ_-tBHcA%$G44rZ(#=? ziB;49>c|V~o;Ta+g6gz~yl~p{fvUEv4qm9}rtQXu2jfC*=B>fNJ_W6@z;i&GX~o_l zivPyICf@qL3^F(t2Kv=?JZSgJTA?1@H6Ctk zjC2oNII}d$rc#rIdrx0HVRv2I15PE4m%%+^J(GXy+0%b?KlnI2aQ3xt{I2RJ=`@qz zZzN7Wm!3!(`&Nx}yOip1>90ejeWlz_1UTAL%Ji-`uKxJy>g^<;9$$IC>+?+h&zZH~ zz}$Ch55J}xPuzN=bp6th~ pzB!rvZ0f};Pky_&c5$UEks|DaOSeB*zMP5wFXiI6c71em`EUNRiL3ws literal 0 HcmV?d00001 diff --git a/images/demo.png b/images/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..ab73397212ce3f3d2b2ef3e9c3e21164482731a7 GIT binary patch literal 13040 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 p.message { + text-align: left; + background: #fff; + color: #222; + padding: 10px 20px; + margin: 0; + border-bottom: 1px solid #ccc; + border-left: 5px solid #1d8aff; +} \ No newline at end of file diff --git a/templates/BetterNavigator.ss b/templates/BetterNavigator.ss new file mode 100644 index 0000000..721d791 --- /dev/null +++ b/templates/BetterNavigator.ss @@ -0,0 +1,81 @@ +<% if $ID > 0 %><%-- Only show on 'real' pages --%> + + <% require javascript("betternavigator/javascript/betternavigator.js") %> + <% require css("betternavigator/css/betternavigator.css") %> + +

+<% end_if %> \ No newline at end of file