summaryrefslogtreecommitdiff
path: root/frontend/gamma
Side-by-side diff
Diffstat (limited to 'frontend/gamma') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/css/web.css56
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageHeader.js4
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/UserInfoBox.js32
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
@@ -797,277 +797,327 @@ div.activeFeatures div.keepTogether div {
display: inline-block;
padding-right: 15px;
}
div.activeFeatures div.keepTogether canvas {
width: 46px;
height: 46px;
vertical-align: bottom;
}
div.activeFeatures div.createAccountLink {
display: inline-block;
width: 282;
height: 65px;
background-image: url(./images/old/home/register.png);
margin-right: 20px;
}
div.activeFeatures div.createAccountLink a.createAccountLink {
position: relative;
top: -92px;
left: 5px;
}
div.activeFeatures div.createAccountLink a.createAccountLink span.payoff {
margin-top: 23px;
margin-left: 40px;
font-size: 17pt;
color: #64626c;
}
div.activeFeatures div.createAccountLink a.createAccountLink span.link {
padding-left: 40px;
padding-right: 50px;
padding-bottom: 10px;
font-size: 12pt;
}
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;
padding-left: 50px;
color: white;
background: url(./images/old/main/tabs/cardsBackground.png) -9px -14px;
}
div.sidePanels div.tabSidePanel ul.mainTabs li.directLogins.selected a {
margin-left: -10px;
padding-left: 50px;
color: white;
}
div.sidePanels div.tabSidePanel ul.mainTabs li.directLogins.selected a:hover {
color: white;
}
div.sidePanels div.tabSidePanel ul.otherTabs {
margin: 10px 0px;
}
div.sidePanels div.tabSidePanel ul.otherTabs li {
margin-top: -4px;
}
div.sidePanels div.tabSidePanel ul.otherTabs li div.selectionHighlighter {
display: none;
}
div.sidePanels div.tabSidePanel ul.otherTabs li a {
display: block;
line-height: 36px;
height: 43px;
padding-left: 40px;
color: #ff6621;
text-decoration: none;
}
div.sidePanels div.tabSidePanel ul.otherTabs li a:hover {
background: url(./images/old/main/tabs/itemsBackground.png) -10px -49px;
}
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,159 +1,159 @@
/*
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;
},
'toggleNewsIsOpen': function () {
this._newsIsOpen = !this._newsIsOpen;
},
'toggleTips': function(anEvent) {
anEvent.preventDefault();
if (this.isNewsOpen() == true) {
MochiKit.Visual.Move(Clipperz.DOM.get('news'), {
x: 0,
y: -this.offset(),
mode: 'relative',
duration: this.animationDuration(),
beforeStart: function () {
MochiKit.DOM.setElementClass(Clipperz.DOM.get('news'), 'hiding');
},
afterFinish: function () {
Clipperz.DOM.get('newsframe').innerHTML = "";
MochiKit.DOM.setElementClass(Clipperz.DOM.get('news'), 'hidden');
}
})
this.toggleNewsIsOpen();
} else {
MochiKit.DOM.addElementClass('newsframe', 'loading');
MochiKit.Visual.Move(Clipperz.DOM.get('news'), {
x: 0,
y: this.offset(),
mode: 'relative',
duration: this.animationDuration(),
beforeStart: MochiKit.Base.bind(function () {
this.append(Clipperz.DOM.get('newsframe'), {tag:'iframe', id:this.getId('iframe'), src:this.iframeURL()});
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
@@ -73,217 +73,245 @@ Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.UserInfoBox, Clipperz.PM.UI.C
'toggleLock': function(anEvent) {
var deferredResult;
var shouldLock;
anEvent.preventDefault();
this.lockTooltip().hide();
shouldLock = (this.isLocked() == false);
if (shouldLock) {
var maskElement;
this.setIsLocked(true);
maskElement = this.getId('modalDialogMask');
deferredResult = Clipperz.Async.callbacks("UserInfoBox.toggleLock [lock]", [
MochiKit.Base.partial(MochiKit.DOM.addElementClass, this.element(), 'locked'),
MochiKit.Base.partial(Clipperz.Visual.deferredAnimation, MochiKit.Visual.appear, maskElement, {from:0.0, to:0.75, duration:0.5}),
MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'setPassphraseDelegate', MochiKit.Base.method(this, 'askForPassphrase')),
MochiKit.Base.partial(MochiKit.Signal.signal, this, 'lock')
], {trace:false});
} else {
deferredResult = Clipperz.Async.callbacks("UserInfoBox.toggleLock [unlock]", [
MochiKit.Base.partial(MochiKit.Signal.signal, this, 'unlock')
], {trace:false});
}
return deferredResult;
},
//-------------------------------------------------------------------------
'unlock': function () {
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;
pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
controlPoint1X = 177.5;
controlPoint1Y = 15.111;
controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
controlPoint2X = 173.889;
controlPoint2Y = 11.5;
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 = 18.5;
pointY = 11.5;
pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
context.lineTo(pointX, pointY);
pointX = 10.5;
pointY = 19.5;
pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
controlPoint1X = 14.111;
controlPoint1Y = 11.5;
controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
controlPoint2X = 10.5;
controlPoint2Y = 15.111;
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 = 10.5;
pointY = 133.5;
pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;