-rw-r--r-- | frontend/gamma/css/web.css | 56 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageHeader.js | 4 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/PM/UI/Web/Components/UserInfoBox.js | 32 |
3 files changed, 85 insertions, 7 deletions
diff --git a/frontend/gamma/css/web.css b/frontend/gamma/css/web.css index 011831a..7d1745b 100644 --- a/frontend/gamma/css/web.css +++ b/frontend/gamma/css/web.css @@ -829,213 +829,263 @@ div.activeFeatures div.createAccountLink a.createAccountLink span.link { div.activeFeatures div.createAccountLink:hover { background-image: url(./images/old/home/register_selected.png); } div.activeFeatures div.createAccountLink:hover a.createAccountLink span.payoff { color: #54535a; } div.activeFeatures div.createAccountLink:hover a.createAccountLink span.link { color: white; } div.activeFeatures div.createAccountLink canvas { width: 282px; height: 93px; } /* Color list: - login box: light #ff9955 dark #ff6622 - login button: regular #dd5500 hover #773311 - login translations: box: #cc6622; not-selected: color: #ddaa99 background: #994422 selected: #772211; */ html { height: 100%; } body { font-family: Helvetica-Neue, Helvetica, Arial, Geneva, sans-serif; margin: 0px; } div.modalDialogMask.userInfoBoxMask { -moz-opacity: 0.0; opacity: .0; filter: alpha(opacity=0); z-index: 19000; } .reset-margin { margin: 0px; padding: 0px; border: 0px; } .clear { clear: both; } .hidden_none { display: none; visibility: hidden; } .keepTogether { display: inline-block; white-space: nowrap; } #mainDiv { margin: 0 auto; } div.userInfoBox { position: absolute; width: 160px; - height: 120px; + height: 200px; top: 100px; left: 15px; color: white; background-color: #ff9955; background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9a56), to(#ff6723)); background: -moz-linear-gradient(0% 100% 90deg, #ff6723, #ff9a56); background: linear-gradient(0deg, #ff6723, #ff9a56); border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -webkit-box-shadow: 2px 2px 9px #333333; -moz-box-shadow: 2px 2px 9px #333333; box-shadow: 2px 2px 9px #333333; } div.userInfoBox.locked { z-index: 19001; } div.userInfoBox.locked div.header a.lockButton { background: url(./images/old/lock/locked.png) no-repeat -5px -2px; } div.userInfoBox.locked div.header a.lockButton:hover { background: url(./images/old/lock/locked_hover.png) no-repeat -5px -2px; } div.userInfoBox.locked div.body a { display: none; } div.userInfoBox div.header { height: 30px; } div.userInfoBox div.header h1 { font-size: 8pt; font-weight: normal; margin: 0px; padding-top: 12px; padding-left: 12px; } div.userInfoBox div.header a.lockButton { position: absolute; top: 8px; right: 12px; display: block; width: 15px; height: 20px; text-decoration: none; background: url(./images/old/lock/unlocked.png) no-repeat -5px -2px; } div.userInfoBox div.header a.lockButton:hover { background: url(./images/old/lock/unlocked_hover.png) no-repeat -5px -2px; } div.userInfoBox div.body { padding: 0px 12px; } div.userInfoBox div.body h3 { font-size: 11pt; font-weight: bold; margin: 0px; } div.userInfoBox div.body ul { font-size: 8pt; padding: 0px; margin: 4px 0px; list-style-position: inside; } div.userInfoBox div.body ul li span.number { font-weight: bold; padding-right: 3px; } +div.userInfoBox div.body div.accountInfo { + margin-top: 6px; + border-top: 1px solid white; + border-color: #f4aa84; +} +div.userInfoBox div.body div.accountInfo h5 { + margin: 0px; + padding-top: 8px; + padding-bottom: 8px; + font-size: 8pt; + font-weight: normal; +} +div.userInfoBox div.body div.accountInfo span.label { + font-size: 9pt; + font-weight: normal; + padding-right: 4px; + display: inline-block; + width: 45px; +} +div.userInfoBox div.body div.accountInfo span.label:after { + content: ":"; +} +div.userInfoBox div.body div.accountInfo span.status { + font-size: 10pt; +} +div.userInfoBox div.body div.accountInfo span.expriation { + font-size: 9pt; +} +div.userInfoBox div.body div.accountInfo div.payButton { + float: right; + padding-top: 6px; + text-align: right; +} +div.userInfoBox div.body div.accountInfo div.payButton a { + border: 0px; + margin-top: 0px; + padding: 0px; + color: white; + display: inline-block; + padding: 2px 5px 2px 5px; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + font-size: 9pt; + font-weight: normal; + background-color: #d15a22; +} +div.userInfoBox div.body div.accountInfo div.payButton a:hover { + background-color: #8c3b15; +} div.userInfoBox div.body a { display: block; - margin-top: 8px; + margin-top: 4px; border-top: 1px solid white; padding-top: 6px; font-size: 10pt; font-weight: bold; color: #d15a22; border-color: #fe9a5f; text-decoration: none; } div.userInfoBox div.body a:hover { color: #8c3b15; } div.sidePanels { float: left; - margin-top: 106px; + margin-top: 186px; margin-left: 20px; width: 160px; } div.sidePanels div.tabSidePanel { margin-right: -10px; } div.sidePanels div.tabSidePanel ul { margin: 0px; padding-left: 0px; list-style-type: none; color: #f78b46; } div.sidePanels div.tabSidePanel ul.mainTabs { margin: 0px; } div.sidePanels div.tabSidePanel ul.mainTabs li a { display: block; line-height: 30px; height: 43px; padding-left: 40px; color: #ff6621; margin: 0px; font-weight: normal; font-size: 13pt; text-decoration: none; } div.sidePanels div.tabSidePanel ul.mainTabs li div.selectionHighlighter { display: none; } div.sidePanels div.tabSidePanel ul.mainTabs li div.selectionHighlighter a.add { font-size: 14pt; font-weight: bold; position: relative; top: -34px; right: 16px; background: none; color: #c0531b; padding-left: 15px; } div.sidePanels div.tabSidePanel ul.mainTabs li div.selectionHighlighter a.add:hover { color: white; } div.sidePanels div.tabSidePanel ul.mainTabs li div.selectionHighlighter a.add span { font-size: 8pt; vertical-align: middle; } div.sidePanels div.tabSidePanel ul.mainTabs li div.selectionHighlighter a.add h3 { display: inline; padding-left: 5px; } div.sidePanels div.tabSidePanel ul.mainTabs li.selected div.selectionHighlighter { display: block; position: absolute; left: 154px; margin-top: -43px; } div.sidePanels div.tabSidePanel ul.mainTabs li.cards a { background: url(./images/old/main/tabs/cardsBackground.png) -19px -63px; } div.sidePanels div.tabSidePanel ul.mainTabs li.cards a:hover { background: url(./images/old/main/tabs/cardsBackground.png) -19px -110px; } div.sidePanels div.tabSidePanel ul.mainTabs li.cards.selected a { margin-left: -10px; diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageHeader.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageHeader.js index 5e49fb5..3c57f67 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageHeader.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageHeader.js @@ -1,127 +1,127 @@ /* Copyright 2008-2013 Clipperz Srl This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. * Clipperz is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * Clipperz 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 Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); Clipperz.PM.UI.Web.Components.PageHeader = function(args) { args = args || {}; Clipperz.PM.UI.Web.Components.PageHeader.superclass.constructor.apply(this, arguments); this._newsIsOpen = args.newsIsOpen || false; this._animationDuration = args.animationDuration || 0.5; this._offset = 82; return this; } //============================================================================= Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.PageHeader, Clipperz.PM.UI.Common.Components.BaseComponent, { //------------------------------------------------------------------------- 'toString': function () { return "Clipperz.PM.UI.Web.Components.PageHeader component"; }, //------------------------------------------------------------------------- 'iframeURL': function () { // return './rss_view.html'; - return 'http://www.clipperz.com/files/clipperz.com/appTips/index.html'; + return 'https://www.clipperz.com/tips/index.html'; }, //------------------------------------------------------------------------- 'renderSelf': function(/*aContainer, aPosition*/) { this.append(this.element(), [ {tag:'div', id:'miscLinks', children:[ {tag:'ul', children:[ {tag:'li', children:[{tag:'a', id:'donateHeaderLink', stringID:'pageHeader.donation', href:'http://www.clipperz.com/donations', target:'_blank', html:Clipperz.PM.Strings.getValue('pageHeader.donation')}]}, {tag:'li', children:[{tag:'a', id:'forumHeaderLink', stringID:'pageHeader.forum', href:'http://www.clipperz.com/forum', target:'_blank', html:Clipperz.PM.Strings.getValue('pageHeader.forum')}]}, - {tag:'li', children:[{tag:'a', id:'creditsHeaderLink', stringID:'pageHeader.credits', href:'http://www.clipperz.com/credits', target:'_blank', html:Clipperz.PM.Strings.getValue('pageHeader.credits')}]}, +// {tag:'li', children:[{tag:'a', id:'creditsHeaderLink', stringID:'pageHeader.credits', href:'http://www.clipperz.com/credits', target:'_blank', html:Clipperz.PM.Strings.getValue('pageHeader.credits')}]}, {tag:'li', children:[{tag:'a', id:'feedbackHeaderLink', stringID:'pageHeader.feedback', href:'http://www.clipperz.com/contact', target:'_blank', html:Clipperz.PM.Strings.getValue('pageHeader.feedback')}]}, {tag:'li', children:[{tag:'a', id:'helpHeaderLink', stringID:'pageHeader.help', href:'http://www.clipperz.com/support/user_guide', target:'_blank', html:Clipperz.PM.Strings.getValue('pageHeader.help')}]} ]} ]}, {tag:'div', id:'logoFrame', children:[ {tag:'a', href:'http://www.clipperz.com', target:'_blank', children:[ // {tag:'h1', cls:'logo', html:"clipperz"}, {tag:'canvas', id:this.getId('logo'), cls:'logo'}, {tag:'h5', cls:'clipperzPayoff', html:"keep it to yourself!"} ]} ]}, {tag:'div', id:'news', cls:'hidden', children:[ // {tag:'div', cls:'close', children:[ // {tag:'a', href:'#', id:this.getId('closeTips'), html:'x'} // ]}, {tag:'div', id:'newsframe', children:[ {tag:'iframe', id:this.getId('iframe'), src:this.iframeURL()} ]}, {tag:'div', id:this.getId('newsGrip'), cls:'grip', children:[ {tag:'div', cls:'gripHandler', children:[]} ]} ]}, {tag:'div', id:'featureTabs', children:[ {tag:'table', children:[{tag:'tr', children:[ {tag:'td', children:[{tag:'div', id:'feature_store', children:[{tag:'canvas', cls:'featureIcon', id:this.getId('storeIcon')}, {tag:'span', html:"Store and manage your password and online credentials"}]}]}, {tag:'td', children:[{tag:'div', id:'feature_protect', children:[{tag:'canvas', cls:'featureIcon', id:this.getId('protectIcon')}, {tag:'span', html:"Protect all your sensitive data"}]}]}, {tag:'td', children:[{tag:'div', id:'feature_directLogin', children:[{tag:'canvas', cls:'featureIcon', id:this.getId('directLoginIcon')}, {tag:'span', html:"Login to your web services without entering any username or password"}]}]}, {tag:'td', children:[{tag:'div', id:'feature_share', children:[{tag:'canvas', cls:'featureIcon', id:this.getId('shareIcon')}, {tag:'span', html:"Share secret with family members and associates"}]}]} ]}]} ]} ]); Clipperz.PM.UI.Canvas.features.store(this.getElement('storeIcon'), "#ffffff"); Clipperz.PM.UI.Canvas.features.protect(this.getElement('protectIcon'), "#ffffff"); Clipperz.PM.UI.Canvas.features.directLogin(this.getElement('directLoginIcon'), "#ffffff"); Clipperz.PM.UI.Canvas.features.share(this.getElement('shareIcon'), "#ffffff", "#ffffff", "#ff0000"); MochiKit.Signal.connect(this.getElement('newsGrip'), 'onclick', this, 'toggleTips'); MochiKit.Signal.connect(this.getElement('iframe'), 'onload', this, 'handleIframeDidLoad'); this.setLogoDefaultColors(); }, //------------------------------------------------------------------------- 'switchToLoggedMode': function() { // MochiKit.Style.addElementClass(this.element(), 'logged'); MochiKit.Style.hideElement('featureTabs'); }, //------------------------------------------------------------------------- 'animationDuration': function () { return this._animationDuration; }, 'offset': function () { return this._offset; }, //------------------------------------------------------------------------- 'isNewsOpen': function () { return this._newsIsOpen; }, diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/UserInfoBox.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/UserInfoBox.js index fbf58e0..91085cf 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/UserInfoBox.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/UserInfoBox.js @@ -105,153 +105,181 @@ Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.UserInfoBox, Clipperz.PM.UI.C var deferredResult; var maskElement; this.setIsLocked(false); maskElement = this.getId('modalDialogMask'); deferredResult = Clipperz.Async.callbacks("UserInfoBox.unlock", [ MochiKit.Base.partial(Clipperz.Visual.deferredAnimation, MochiKit.Visual.fade, maskElement, {from:0.75, to:0.0, duration:0.5}), // Clipperz.Visual.deferredAnimation(MochiKit.Visual.fade, maskElement, {from:0.75, to:0.0, duration:0.5}), MochiKit.Base.partial(MochiKit.DOM.removeElementClass, this.element(), 'locked') ], {trace:false}); }, //------------------------------------------------------------------------- 'askForPassphrase': function () { var unlockPasswordComponent; /* var deferredResult; deferredResult = new Clipperz.Async.Deferred("UserInfoBox.askForPassphrase", {trace:false}); deferredResult.addCallback(MochiKit.Async.succeed, 'test'); deferredResult.callback(); return deferredResult; */ unlockPasswordComponent = new Clipperz.PM.UI.Web.Components.UnlockPasswordComponent({ 'title': "Unlock account", 'text': "Insert the passprase to unlock the account", 'type': 'INFO', 'buttons': [ {text:"Cancel", result:'CANCEL'}, {text:"Unlock", result:'OK', isDefault:true} ], 'openFromElement': this.getElement('lock'), 'onOkCloseToElement': null, 'onCancelCloseToElement': this.getId('lock') }); return unlockPasswordComponent.getPassphrase(); }, //========================================================================= 'renderSelf': function(/*aContainer, aPosition*/) { this.append(this.element(), [ // {tag:'canvas', id:this.getId('canvas'), cls:'canvas', width:'188', height:'154'}, {tag:'div', cls:'header', children:[ {tag:'h1', html:"Welcome"}, {tag:'a', cls:'lockButton', href:'#', id:this.getId('lock'), html:' '} ]}, {tag:'div', cls:'body', children:[ {tag:'h3', id:this.getId('username'), html:""}, {tag:'ul', children:[ {tag:'li', id:this.getId('cards'), children:[ {tag:'span', id:this.getId('cardsNumber'), cls:'number', html:"-"}, {tag:'span', id:this.getId('cardsLabel'), html:"cards"} ]}, {tag:'li', id:this.getId('directLogins'), children:[ {tag:'span', id:this.getId('directLoginsNumber'), cls:'number', html:"-"}, {tag:'span', id:this.getId('directLoginsLabel'), html:"direct logins"} ]} ]}, + {tag:'div', cls:'accountInfo', children:[ + {tag:'div', cls:'payButton', children:[ + {tag:'a', href:'#', id:this.getId('payButton'), cls:'info', html:"info"} + ]}, + {tag:'h5', html:"Account info"}, + {tag:'div', cls:'accountStatus', children:[ + {tag:'span', cls:'label', html:"status"}, + {tag:'span', cls:'status', html:"early adopter"} + ]}, + {tag:'div', cls:'accountLevel', children:[ + {tag:'span', cls:'label', html:"level"}, +// {tag:'span', cls:'level', html:"★☆☆☆"} + {tag:'span', cls:'level', html:"☆☆☆☆"} + ]}, + {tag:'div', cls:'accountExpiration', children:[ + {tag:'span', cls:'label', html:"expires"}, +// {tag:'span', cls:'expriation', html:"on 26 April 2014"} + {tag:'span', cls:'expriation', html:"never"} + ]} + ]}, {tag:'a', href:'#', id:this.getId('logout'), html:"logout >"} ]}, {tag:'div', cls:'footer'} ]); - MochiKit.Signal.connect(this.getElement('logout'), 'onclick', this, 'handleLogout'); - MochiKit.Signal.connect(this.getElement('lock'), 'onclick', this, 'toggleLock'); + MochiKit.Signal.connect(this.getElement('logout'), 'onclick', this, 'handleLogout'); + MochiKit.Signal.connect(this.getElement('lock'), 'onclick', this, 'toggleLock'); + MochiKit.Signal.connect(this.getElement('payButton'), 'onclick', this, 'handlePayButton'); this._lockTooltip = new Clipperz.PM.UI.Common.Components.Tooltip({ element: this.getElement('lock'), text: "Click here to lock/unlock your account.", position: 'RIGHT' }); Clipperz.DOM.Helper.append(MochiKit.DOM.currentDocument().body, {tag:'div', id:this.getId('modalDialogWrapper'), cls:'modalDialogWrapper', children:[ {tag:'div', id:this.getId('modalDialogMask'), cls:'modalDialogMask userInfoBoxMask'} ]} ); MochiKit.Style.hideElement(this.getId('modalDialogMask')); // this.drawUserInfoBackground(this.getElement('canvas')); }, //------------------------------------------------------------------------- + + 'handlePayButton': function (anEvent) { + anEvent.preventDefault(); + window.open('https://www.clipperz.com/pricing/', '_blank'); + }, + + //------------------------------------------------------------------------- /* 'drawUserInfoBackground': function (canvas) { var kMyDrawingFunctionWidth = 188.0; var kMyDrawingFunctionHeight = 154.0; var context = canvas.getContext("2d"); var color; var resolution; var alignStroke; var path; var pointX; var pointY; var controlPoint1X; var controlPoint1Y; var controlPoint2X; var controlPoint2Y; var gradient; if (window.devicePixelRatio) resolution = window.devicePixelRatio; else resolution = 1.0; resolution *= 0.5 * (canvas.width / kMyDrawingFunctionWidth + canvas.height / kMyDrawingFunctionHeight); context.save(); context.scale(canvas.width / kMyDrawingFunctionWidth, canvas.height / kMyDrawingFunctionHeight); context.clearRect(0.0, 0.0, kMyDrawingFunctionWidth, kMyDrawingFunctionHeight); // Setup for Shadow Effect color = "rgba(0.0%, 0.0%, 0.0%, 0.667)"; context.save(); context.shadowColor = color; context.shadowBlur = 3.0; context.shadowOffsetX = 5.729 * Math.cos(7.592) * resolution; context.shadowOffsetY = 5.729 * Math.sin(7.592) * resolution; // Layer 1 alignStroke = 0.0; context.beginPath(); pointX = 169.5; pointY = 141.5; pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; context.moveTo(pointX, pointY); pointX = 177.5; pointY = 133.5; pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; controlPoint1X = 173.889; controlPoint1Y = 141.5; controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; controlPoint2X = 177.5; controlPoint2Y = 137.889; controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); pointX = 177.5; pointY = 19.5; pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; context.lineTo(pointX, pointY); pointX = 169.5; pointY = 11.5; |