summaryrefslogtreecommitdiff
path: root/frontend/gamma/js/Clipperz/PM/UI
Unidiff
Diffstat (limited to 'frontend/gamma/js/Clipperz/PM/UI') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/CoverActions/download.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/CoverActions/look.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/directLogin.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/protect.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/share.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/store.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/GraphicFunctions.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Logo/normal.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/exclamationMark.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/info.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/questionMark.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/RegisterButton/normal.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Star/normal.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Tips/close.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Canvas/Tips/open.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/BaseComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/Button.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/ComponentSlot.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/FaviconComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/PasswordEntropyDisplay.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/ProgressBar.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/TabPanelComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/Tooltip.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Components/TranslatorWidget.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/ProgressBarController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/TabPanelController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/WizardController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Compact/MainController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/AppPage.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/BookmarkletComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogRecordDirectLoginComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogRecordFieldComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/ColumnManager.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/CreateNewCardSplashComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/DateColumnManager.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/DeleteObjectColumnManager.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginColumnManager.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingBindingComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingFormValueComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginsColumnManager.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/FaviconColumnManager.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/GridComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/ImageColumnManager.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/LinkColumnManager.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginForm.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginPage.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/NewUserCreationComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/Page.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageFooter.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageHeader.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/PasswordTooltip.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/RulerComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/TabSidePanel.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/TextColumnManager.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/UnlockPasswordComponent.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/UserInfoBox.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/CardDialogController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/CardsController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/DirectLoginWizardController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/DirectLoginsController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/FilterController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/GridController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/MainController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/NewUserWizardController.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardDetail.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardList.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/LoginForm.js15
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/iPhone/Controllers/MainController.js15
79 files changed, 474 insertions, 711 deletions
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/CoverActions/download.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/CoverActions/download.js
index 169946a..25e82ca 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/CoverActions/download.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/CoverActions/download.js
@@ -1,120 +1,117 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //download.js 27 //download.js
31 //Download 28 //Download
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/15/10 30 //Created by Giulio Cesare Solaroli on 3/15/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_CoverActions_downloadWidth = 46.0; 35var kClipperz_PM_UI_Canvas_CoverActions_downloadWidth = 46.0;
39var kClipperz_PM_UI_Canvas_CoverActions_downloadHeight = 46.0; 36var kClipperz_PM_UI_Canvas_CoverActions_downloadHeight = 46.0;
40 37
41function Clipperz_PM_UI_Canvas_CoverActions_download(canvas, aColor, aFillColor, aThickness) 38function Clipperz_PM_UI_Canvas_CoverActions_download(canvas, aColor, aFillColor, aThickness)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var stroke; 43 var stroke;
47 var path; 44 var path;
48 var pointX; 45 var pointX;
49 var pointY; 46 var pointY;
50 if (window.devicePixelRatio) 47 if (window.devicePixelRatio)
51 resolution = window.devicePixelRatio; 48 resolution = window.devicePixelRatio;
52 else 49 else
53 resolution = 1.0; 50 resolution = 1.0;
54 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_CoverActions_downloadWidth + canvas.height / kClipperz_PM_UI_Canvas_CoverActions_downloadHeight); 51 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_CoverActions_downloadWidth + canvas.height / kClipperz_PM_UI_Canvas_CoverActions_downloadHeight);
55 52
56 context.save(); 53 context.save();
57 context.scale(canvas.width / kClipperz_PM_UI_Canvas_CoverActions_downloadWidth, canvas.height / kClipperz_PM_UI_Canvas_CoverActions_downloadHeight); 54 context.scale(canvas.width / kClipperz_PM_UI_Canvas_CoverActions_downloadWidth, canvas.height / kClipperz_PM_UI_Canvas_CoverActions_downloadHeight);
58 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_CoverActions_downloadWidth, kClipperz_PM_UI_Canvas_CoverActions_downloadHeight); 55 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_CoverActions_downloadWidth, kClipperz_PM_UI_Canvas_CoverActions_downloadHeight);
59 56
60 // arrow 57 // arrow
61 58
62 stroke = aThickness; 59 stroke = aThickness;
63 stroke *= resolution; 60 stroke *= resolution;
64 if (stroke < 1.0) 61 if (stroke < 1.0)
65 stroke = Math.ceil(stroke); 62 stroke = Math.ceil(stroke);
66 else 63 else
67 stroke = Math.round(stroke); 64 stroke = Math.round(stroke);
68 stroke /= resolution; 65 stroke /= resolution;
69 alignStroke = (0.5 * stroke * resolution) % 1.0; 66 alignStroke = (0.5 * stroke * resolution) % 1.0;
70 context.beginPath(); 67 context.beginPath();
71 pointX = 16.5; 68 pointX = 16.5;
72 pointY = 22.5; 69 pointY = 22.5;
73 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 70 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
74 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 71 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
75 context.moveTo(pointX, pointY); 72 context.moveTo(pointX, pointY);
76 pointX = 19.5; 73 pointX = 19.5;
77 pointY = 8.5; 74 pointY = 8.5;
78 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 75 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
79 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 76 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
80 context.lineTo(pointX, pointY); 77 context.lineTo(pointX, pointY);
81 pointX = 30.038; 78 pointX = 30.038;
82 pointY = 10.605; 79 pointY = 10.605;
83 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 80 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
84 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 81 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
85 context.lineTo(pointX, pointY); 82 context.lineTo(pointX, pointY);
86 pointX = 27.354; 83 pointX = 27.354;
87 pointY = 24.354; 84 pointY = 24.354;
88 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 85 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
89 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 86 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
90 context.lineTo(pointX, pointY); 87 context.lineTo(pointX, pointY);
91 pointX = 33.28; 88 pointX = 33.28;
92 pointY = 25.293; 89 pointY = 25.293;
93 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 90 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
94 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 91 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
95 context.lineTo(pointX, pointY); 92 context.lineTo(pointX, pointY);
96 pointX = 19.81; 93 pointX = 19.81;
97 pointY = 36.828; 94 pointY = 36.828;
98 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 95 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
99 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 96 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
100 context.lineTo(pointX, pointY); 97 context.lineTo(pointX, pointY);
101 pointX = 10.07; 98 pointX = 10.07;
102 pointY = 21.617; 99 pointY = 21.617;
103 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 100 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
104 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 101 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
105 context.lineTo(pointX, pointY); 102 context.lineTo(pointX, pointY);
106 pointX = 16.5; 103 pointX = 16.5;
107 pointY = 22.5; 104 pointY = 22.5;
108 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 105 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
109 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 106 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
110 context.lineTo(pointX, pointY); 107 context.lineTo(pointX, pointY);
111 context.closePath(); 108 context.closePath();
112 context.fillStyle = aFillColor; 109 context.fillStyle = aFillColor;
113 context.fill(); 110 context.fill();
114 context.strokeStyle = aColor; 111 context.strokeStyle = aColor;
115 context.lineWidth = stroke; 112 context.lineWidth = stroke;
116 context.lineCap = "square"; 113 context.lineCap = "square";
117 context.stroke(); 114 context.stroke();
118 115
119 context.restore(); 116 context.restore();
120} 117}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/CoverActions/look.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/CoverActions/look.js
index b8e535b..ba425ec 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/CoverActions/look.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/CoverActions/look.js
@@ -1,208 +1,205 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //look.js 27 //look.js
31 //Look 28 //Look
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/15/10 30 //Created by Giulio Cesare Solaroli on 3/15/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_CoverActions_lookWidth = 46.0; 35var kClipperz_PM_UI_Canvas_CoverActions_lookWidth = 46.0;
39var kClipperz_PM_UI_Canvas_CoverActions_lookHeight = 46.0; 36var kClipperz_PM_UI_Canvas_CoverActions_lookHeight = 46.0;
40 37
41function Clipperz_PM_UI_Canvas_CoverActions_look(canvas, aColor, aFillColor, aThickness) 38function Clipperz_PM_UI_Canvas_CoverActions_look(canvas, aColor, aFillColor, aThickness)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var stroke; 43 var stroke;
47 var path; 44 var path;
48 var pointX; 45 var pointX;
49 var pointY; 46 var pointY;
50 if (window.devicePixelRatio) 47 if (window.devicePixelRatio)
51 resolution = window.devicePixelRatio; 48 resolution = window.devicePixelRatio;
52 else 49 else
53 resolution = 1.0; 50 resolution = 1.0;
54 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_CoverActions_lookWidth + canvas.height / kClipperz_PM_UI_Canvas_CoverActions_lookHeight); 51 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_CoverActions_lookWidth + canvas.height / kClipperz_PM_UI_Canvas_CoverActions_lookHeight);
55 52
56 context.save(); 53 context.save();
57 context.scale(canvas.width / kClipperz_PM_UI_Canvas_CoverActions_lookWidth, canvas.height / kClipperz_PM_UI_Canvas_CoverActions_lookHeight); 54 context.scale(canvas.width / kClipperz_PM_UI_Canvas_CoverActions_lookWidth, canvas.height / kClipperz_PM_UI_Canvas_CoverActions_lookHeight);
58 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_CoverActions_lookWidth, kClipperz_PM_UI_Canvas_CoverActions_lookHeight); 55 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_CoverActions_lookWidth, kClipperz_PM_UI_Canvas_CoverActions_lookHeight);
59 56
60 // Layer 6 57 // Layer 6
61 58
62 stroke = aThickness; 59 stroke = aThickness;
63 stroke *= resolution; 60 stroke *= resolution;
64 if (stroke < 1.0) 61 if (stroke < 1.0)
65 stroke = Math.ceil(stroke); 62 stroke = Math.ceil(stroke);
66 else 63 else
67 stroke = Math.round(stroke); 64 stroke = Math.round(stroke);
68 stroke /= resolution; 65 stroke /= resolution;
69 alignStroke = (0.5 * stroke * resolution) % 1.0; 66 alignStroke = (0.5 * stroke * resolution) % 1.0;
70 context.save(); 67 context.save();
71 context.translate(17.5, 23.0); 68 context.translate(17.5, 23.0);
72 context.rotate(-0.503); 69 context.rotate(-0.503);
73 context.translate(-17.5, -23.0); 70 context.translate(-17.5, -23.0);
74 context.beginPath(); 71 context.beginPath();
75 pointX = 28.5; 72 pointX = 28.5;
76 pointY = 31.5; 73 pointY = 31.5;
77 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 74 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
78 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 75 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
79 context.moveTo(pointX, pointY); 76 context.moveTo(pointX, pointY);
80 pointX = 28.5; 77 pointX = 28.5;
81 pointY = 14.5; 78 pointY = 14.5;
82 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 79 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
83 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 80 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
84 context.lineTo(pointX, pointY); 81 context.lineTo(pointX, pointY);
85 pointX = 6.5; 82 pointX = 6.5;
86 pointY = 14.5; 83 pointY = 14.5;
87 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 84 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
88 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 85 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
89 context.lineTo(pointX, pointY); 86 context.lineTo(pointX, pointY);
90 pointX = 6.5; 87 pointX = 6.5;
91 pointY = 31.5; 88 pointY = 31.5;
92 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 89 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
93 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 90 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
94 context.lineTo(pointX, pointY); 91 context.lineTo(pointX, pointY);
95 pointX = 28.5; 92 pointX = 28.5;
96 pointY = 31.5; 93 pointY = 31.5;
97 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 94 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
98 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 95 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
99 context.lineTo(pointX, pointY); 96 context.lineTo(pointX, pointY);
100 context.closePath(); 97 context.closePath();
101 context.fillStyle = aFillColor; 98 context.fillStyle = aFillColor;
102 context.fill(); 99 context.fill();
103 context.strokeStyle = aColor; 100 context.strokeStyle = aColor;
104 context.lineWidth = stroke; 101 context.lineWidth = stroke;
105 context.lineCap = "square"; 102 context.lineCap = "square";
106 context.stroke(); 103 context.stroke();
107 context.restore(); 104 context.restore();
108 105
109 // Layer 3 106 // Layer 3
110 107
111 stroke = aThickness; 108 stroke = aThickness;
112 stroke *= resolution; 109 stroke *= resolution;
113 if (stroke < 1.0) 110 if (stroke < 1.0)
114 stroke = Math.ceil(stroke); 111 stroke = Math.ceil(stroke);
115 else 112 else
116 stroke = Math.round(stroke); 113 stroke = Math.round(stroke);
117 stroke /= resolution; 114 stroke /= resolution;
118 alignStroke = (0.5 * stroke * resolution) % 1.0; 115 alignStroke = (0.5 * stroke * resolution) % 1.0;
119 context.save(); 116 context.save();
120 context.translate(22.5, 20.0); 117 context.translate(22.5, 20.0);
121 context.rotate(-0.071); 118 context.rotate(-0.071);
122 context.translate(-22.5, -20.0); 119 context.translate(-22.5, -20.0);
123 context.beginPath(); 120 context.beginPath();
124 pointX = 33.5; 121 pointX = 33.5;
125 pointY = 28.5; 122 pointY = 28.5;
126 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 123 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
127 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 124 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
128 context.moveTo(pointX, pointY); 125 context.moveTo(pointX, pointY);
129 pointX = 33.5; 126 pointX = 33.5;
130 pointY = 11.5; 127 pointY = 11.5;
131 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 128 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
132 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 129 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
133 context.lineTo(pointX, pointY); 130 context.lineTo(pointX, pointY);
134 pointX = 11.5; 131 pointX = 11.5;
135 pointY = 11.5; 132 pointY = 11.5;
136 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 133 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
137 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 134 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
138 context.lineTo(pointX, pointY); 135 context.lineTo(pointX, pointY);
139 pointX = 11.5; 136 pointX = 11.5;
140 pointY = 28.5; 137 pointY = 28.5;
141 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 138 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
142 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 139 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
143 context.lineTo(pointX, pointY); 140 context.lineTo(pointX, pointY);
144 pointX = 33.5; 141 pointX = 33.5;
145 pointY = 28.5; 142 pointY = 28.5;
146 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 143 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
147 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 144 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
148 context.lineTo(pointX, pointY); 145 context.lineTo(pointX, pointY);
149 context.closePath(); 146 context.closePath();
150 context.fillStyle = aFillColor; 147 context.fillStyle = aFillColor;
151 context.fill(); 148 context.fill();
152 context.strokeStyle = aColor; 149 context.strokeStyle = aColor;
153 context.lineWidth = stroke; 150 context.lineWidth = stroke;
154 context.lineCap = "square"; 151 context.lineCap = "square";
155 context.stroke(); 152 context.stroke();
156 context.restore(); 153 context.restore();
157 154
158 // Layer 4 155 // Layer 4
159 156
160 stroke = aThickness; 157 stroke = aThickness;
161 stroke *= resolution; 158 stroke *= resolution;
162 if (stroke < 1.0) 159 if (stroke < 1.0)
163 stroke = Math.ceil(stroke); 160 stroke = Math.ceil(stroke);
164 else 161 else
165 stroke = Math.round(stroke); 162 stroke = Math.round(stroke);
166 stroke /= resolution; 163 stroke /= resolution;
167 alignStroke = (0.5 * stroke * resolution) % 1.0; 164 alignStroke = (0.5 * stroke * resolution) % 1.0;
168 context.save(); 165 context.save();
169 context.translate(27.5, 18.0); 166 context.translate(27.5, 18.0);
170 context.rotate(0.232); 167 context.rotate(0.232);
171 context.translate(-27.5, -18.0); 168 context.translate(-27.5, -18.0);
172 context.beginPath(); 169 context.beginPath();
173 pointX = 38.5; 170 pointX = 38.5;
174 pointY = 26.5; 171 pointY = 26.5;
175 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 172 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
176 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 173 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
177 context.moveTo(pointX, pointY); 174 context.moveTo(pointX, pointY);
178 pointX = 38.5; 175 pointX = 38.5;
179 pointY = 9.5; 176 pointY = 9.5;
180 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 177 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
181 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 178 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
182 context.lineTo(pointX, pointY); 179 context.lineTo(pointX, pointY);
183 pointX = 16.5; 180 pointX = 16.5;
184 pointY = 9.5; 181 pointY = 9.5;
185 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 182 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
186 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 183 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
187 context.lineTo(pointX, pointY); 184 context.lineTo(pointX, pointY);
188 pointX = 16.5; 185 pointX = 16.5;
189 pointY = 26.5; 186 pointY = 26.5;
190 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 187 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
191 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 188 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
192 context.lineTo(pointX, pointY); 189 context.lineTo(pointX, pointY);
193 pointX = 38.5; 190 pointX = 38.5;
194 pointY = 26.5; 191 pointY = 26.5;
195 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 192 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
196 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 193 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
197 context.lineTo(pointX, pointY); 194 context.lineTo(pointX, pointY);
198 context.closePath(); 195 context.closePath();
199 context.fillStyle = aFillColor; 196 context.fillStyle = aFillColor;
200 context.fill(); 197 context.fill();
201 context.strokeStyle = aColor; 198 context.strokeStyle = aColor;
202 context.lineWidth = stroke; 199 context.lineWidth = stroke;
203 context.lineCap = "square"; 200 context.lineCap = "square";
204 context.stroke(); 201 context.stroke();
205 context.restore(); 202 context.restore();
206 203
207 context.restore(); 204 context.restore();
208} 205}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/directLogin.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/directLogin.js
index 9c4e5ba..5c1f860 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/directLogin.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/directLogin.js
@@ -1,209 +1,206 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //directLogin.js 27 //directLogin.js
31 //directLogin 28 //directLogin
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/7/10 30 //Created by Giulio Cesare Solaroli on 3/7/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Features_directLoginWidth = 76.0; 35var kClipperz_PM_UI_Canvas_Features_directLoginWidth = 76.0;
39var kClipperz_PM_UI_Canvas_Features_directLoginHeight = 76.0; 36var kClipperz_PM_UI_Canvas_Features_directLoginHeight = 76.0;
40 37
41function Clipperz_PM_UI_Canvas_Features_directLogin(canvas, aColor, aBannerColor, aBannerBackgroundColor) 38function Clipperz_PM_UI_Canvas_Features_directLogin(canvas, aColor, aBannerColor, aBannerBackgroundColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var stroke; 43 var stroke;
47 var path; 44 var path;
48 var pointX; 45 var pointX;
49 var pointY; 46 var pointY;
50 if (window.devicePixelRatio) 47 if (window.devicePixelRatio)
51 resolution = window.devicePixelRatio; 48 resolution = window.devicePixelRatio;
52 else 49 else
53 resolution = 1.0; 50 resolution = 1.0;
54 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Features_directLoginWidth + canvas.height / kClipperz_PM_UI_Canvas_Features_directLoginHeight); 51 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Features_directLoginWidth + canvas.height / kClipperz_PM_UI_Canvas_Features_directLoginHeight);
55 52
56 context.save(); 53 context.save();
57 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Features_directLoginWidth, canvas.height / kClipperz_PM_UI_Canvas_Features_directLoginHeight); 54 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Features_directLoginWidth, canvas.height / kClipperz_PM_UI_Canvas_Features_directLoginHeight);
58 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Features_directLoginWidth, kClipperz_PM_UI_Canvas_Features_directLoginHeight); 55 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Features_directLoginWidth, kClipperz_PM_UI_Canvas_Features_directLoginHeight);
59 56
60 // Layer 2 57 // Layer 2
61 58
62 stroke = 6.0; 59 stroke = 6.0;
63 stroke *= resolution; 60 stroke *= resolution;
64 if (stroke < 1.0) 61 if (stroke < 1.0)
65 stroke = Math.ceil(stroke); 62 stroke = Math.ceil(stroke);
66 else 63 else
67 stroke = Math.round(stroke); 64 stroke = Math.round(stroke);
68 stroke /= resolution; 65 stroke /= resolution;
69 alignStroke = (0.5 * stroke * resolution) % 1.0; 66 alignStroke = (0.5 * stroke * resolution) % 1.0;
70 context.beginPath(); 67 context.beginPath();
71 pointX = 30.0; 68 pointX = 30.0;
72 pointY = 41.0; 69 pointY = 41.0;
73 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 70 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
74 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 71 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
75 context.moveTo(pointX, pointY); 72 context.moveTo(pointX, pointY);
76 pointX = 45.579; 73 pointX = 45.579;
77 pointY = 25.451; 74 pointY = 25.451;
78 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 75 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
79 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 76 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
80 context.lineTo(pointX, pointY); 77 context.lineTo(pointX, pointY);
81 context.strokeStyle = aColor; 78 context.strokeStyle = aColor;
82 context.lineWidth = stroke; 79 context.lineWidth = stroke;
83 context.lineCap = "square"; 80 context.lineCap = "square";
84 context.stroke(); 81 context.stroke();
85 82
86 alignStroke = 0.0; 83 alignStroke = 0.0;
87 context.beginPath(); 84 context.beginPath();
88 pointX = 34.207; 85 pointX = 34.207;
89 pointY = 45.697; 86 pointY = 45.697;
90 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 87 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
91 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 88 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
92 context.moveTo(pointX, pointY); 89 context.moveTo(pointX, pointY);
93 pointX = 24.101; 90 pointX = 24.101;
94 pointY = 37.52; 91 pointY = 37.52;
95 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 92 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
96 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 93 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
97 context.lineTo(pointX, pointY); 94 context.lineTo(pointX, pointY);
98 pointX = 24.122; 95 pointX = 24.122;
99 pointY = 47.828; 96 pointY = 47.828;
100 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 97 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
101 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 98 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
102 context.lineTo(pointX, pointY); 99 context.lineTo(pointX, pointY);
103 pointX = 34.207; 100 pointX = 34.207;
104 pointY = 45.697; 101 pointY = 45.697;
105 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 102 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
106 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 103 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
107 context.lineTo(pointX, pointY); 104 context.lineTo(pointX, pointY);
108 context.closePath(); 105 context.closePath();
109 context.fillStyle = aColor; 106 context.fillStyle = aColor;
110 context.fill(); 107 context.fill();
111 108
112 stroke = 6.0; 109 stroke = 6.0;
113 stroke *= resolution; 110 stroke *= resolution;
114 if (stroke < 1.0) 111 if (stroke < 1.0)
115 stroke = Math.ceil(stroke); 112 stroke = Math.ceil(stroke);
116 else 113 else
117 stroke = Math.round(stroke); 114 stroke = Math.round(stroke);
118 stroke /= resolution; 115 stroke /= resolution;
119 alignStroke = (0.5 * stroke * resolution) % 1.0; 116 alignStroke = (0.5 * stroke * resolution) % 1.0;
120 context.beginPath(); 117 context.beginPath();
121 pointX = 24.631; 118 pointX = 24.631;
122 pointY = 28.971; 119 pointY = 28.971;
123 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 120 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
124 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 121 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
125 context.moveTo(pointX, pointY); 122 context.moveTo(pointX, pointY);
126 pointX = 46.497; 123 pointX = 46.497;
127 pointY = 26.451; 124 pointY = 26.451;
128 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 125 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
129 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 126 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
130 context.lineTo(pointX, pointY); 127 context.lineTo(pointX, pointY);
131 context.strokeStyle = aColor; 128 context.strokeStyle = aColor;
132 context.stroke(); 129 context.stroke();
133 130
134 alignStroke = 0.0; 131 alignStroke = 0.0;
135 context.beginPath(); 132 context.beginPath();
136 pointX = 25.014; 133 pointX = 25.014;
137 pointY = 35.265; 134 pointY = 35.265;
138 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 135 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
139 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 136 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
140 context.moveTo(pointX, pointY); 137 context.moveTo(pointX, pointY);
141 pointX = 22.166; 138 pointX = 22.166;
142 pointY = 22.58; 139 pointY = 22.58;
143 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 140 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
144 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 141 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
145 context.lineTo(pointX, pointY); 142 context.lineTo(pointX, pointY);
146 pointX = 15.784; 143 pointX = 15.784;
147 pointY = 30.675; 144 pointY = 30.675;
148 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 145 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
149 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 146 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
150 context.lineTo(pointX, pointY); 147 context.lineTo(pointX, pointY);
151 pointX = 25.014; 148 pointX = 25.014;
152 pointY = 35.265; 149 pointY = 35.265;
153 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 150 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
154 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 151 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
155 context.lineTo(pointX, pointY); 152 context.lineTo(pointX, pointY);
156 context.closePath(); 153 context.closePath();
157 context.fillStyle = aColor; 154 context.fillStyle = aColor;
158 context.fill(); 155 context.fill();
159 156
160 stroke = 6.0; 157 stroke = 6.0;
161 stroke *= resolution; 158 stroke *= resolution;
162 if (stroke < 1.0) 159 if (stroke < 1.0)
163 stroke = Math.ceil(stroke); 160 stroke = Math.ceil(stroke);
164 else 161 else
165 stroke = Math.round(stroke); 162 stroke = Math.round(stroke);
166 stroke /= resolution; 163 stroke /= resolution;
167 alignStroke = (0.5 * stroke * resolution) % 1.0; 164 alignStroke = (0.5 * stroke * resolution) % 1.0;
168 context.beginPath(); 165 context.beginPath();
169 pointX = 42.282; 166 pointX = 42.282;
170 pointY = 47.03; 167 pointY = 47.03;
171 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 168 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
172 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 169 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
173 context.moveTo(pointX, pointY); 170 context.moveTo(pointX, pointY);
174 pointX = 47.771; 171 pointX = 47.771;
175 pointY = 25.714; 172 pointY = 25.714;
176 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 173 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
177 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 174 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
178 context.lineTo(pointX, pointY); 175 context.lineTo(pointX, pointY);
179 context.strokeStyle = aColor; 176 context.strokeStyle = aColor;
180 context.stroke(); 177 context.stroke();
181 178
182 alignStroke = 0.0; 179 alignStroke = 0.0;
183 context.beginPath(); 180 context.beginPath();
184 pointX = 48.294; 181 pointX = 48.294;
185 pointY = 48.929; 182 pointY = 48.929;
186 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 183 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
187 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 184 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
188 context.moveTo(pointX, pointY); 185 context.moveTo(pointX, pointY);
189 pointX = 35.432; 186 pointX = 35.432;
190 pointY = 47.039; 187 pointY = 47.039;
191 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 188 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
192 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 189 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
193 context.lineTo(pointX, pointY); 190 context.lineTo(pointX, pointY);
194 pointX = 40.7; 191 pointX = 40.7;
195 pointY = 55.899; 192 pointY = 55.899;
196 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 193 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
197 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 194 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
198 context.lineTo(pointX, pointY); 195 context.lineTo(pointX, pointY);
199 pointX = 48.294; 196 pointX = 48.294;
200 pointY = 48.929; 197 pointY = 48.929;
201 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 198 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
202 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 199 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
203 context.lineTo(pointX, pointY); 200 context.lineTo(pointX, pointY);
204 context.closePath(); 201 context.closePath();
205 context.fillStyle = aColor; 202 context.fillStyle = aColor;
206 context.fill(); 203 context.fill();
207 204
208 context.restore(); 205 context.restore();
209} 206}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/protect.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/protect.js
index 501b69b..b829ed6 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/protect.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/protect.js
@@ -1,237 +1,234 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //protect.js 27 //protect.js
31 //protect 28 //protect
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/7/10 30 //Created by Giulio Cesare Solaroli on 3/7/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Features_protectWidth = 76.0; 35var kClipperz_PM_UI_Canvas_Features_protectWidth = 76.0;
39var kClipperz_PM_UI_Canvas_Features_protectHeight = 76.0; 36var kClipperz_PM_UI_Canvas_Features_protectHeight = 76.0;
40 37
41function Clipperz_PM_UI_Canvas_Features_protect(canvas, aColor, aBannerColor, aBannerBackgroundColor) 38function Clipperz_PM_UI_Canvas_Features_protect(canvas, aColor, aBannerColor, aBannerBackgroundColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var path; 43 var path;
47 var pointX; 44 var pointX;
48 var pointY; 45 var pointY;
49 var controlPoint1X; 46 var controlPoint1X;
50 var controlPoint1Y; 47 var controlPoint1Y;
51 var controlPoint2X; 48 var controlPoint2X;
52 var controlPoint2Y; 49 var controlPoint2Y;
53 var stroke; 50 var stroke;
54 if (window.devicePixelRatio) 51 if (window.devicePixelRatio)
55 resolution = window.devicePixelRatio; 52 resolution = window.devicePixelRatio;
56 else 53 else
57 resolution = 1.0; 54 resolution = 1.0;
58 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Features_protectWidth + canvas.height / kClipperz_PM_UI_Canvas_Features_protectHeight); 55 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Features_protectWidth + canvas.height / kClipperz_PM_UI_Canvas_Features_protectHeight);
59 56
60 context.save(); 57 context.save();
61 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Features_protectWidth, canvas.height / kClipperz_PM_UI_Canvas_Features_protectHeight); 58 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Features_protectWidth, canvas.height / kClipperz_PM_UI_Canvas_Features_protectHeight);
62 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Features_protectWidth, kClipperz_PM_UI_Canvas_Features_protectHeight); 59 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Features_protectWidth, kClipperz_PM_UI_Canvas_Features_protectHeight);
63 60
64 // Layer 1 61 // Layer 1
65 62
66 alignStroke = 0.0; 63 alignStroke = 0.0;
67 context.beginPath(); 64 context.beginPath();
68 pointX = 38.5; 65 pointX = 38.5;
69 pointY = 36.0; 66 pointY = 36.0;
70 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 67 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
71 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 68 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
72 context.moveTo(pointX, pointY); 69 context.moveTo(pointX, pointY);
73 pointX = 37.068; 70 pointX = 37.068;
74 pointY = 38.816; 71 pointY = 38.816;
75 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 72 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
76 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 73 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
77 controlPoint1X = 37.41; 74 controlPoint1X = 37.41;
78 controlPoint1Y = 36.234; 75 controlPoint1Y = 36.234;
79 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 76 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
80 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 77 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
81 controlPoint2X = 37.175; 78 controlPoint2X = 37.175;
82 controlPoint2Y = 37.907; 79 controlPoint2Y = 37.907;
83 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 80 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
84 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 81 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
85 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 82 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
86 pointX = 37.031; 83 pointX = 37.031;
87 pointY = 40.802; 84 pointY = 40.802;
88 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 85 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
89 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 86 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
90 controlPoint1X = 36.991; 87 controlPoint1X = 36.991;
91 controlPoint1Y = 39.474; 88 controlPoint1Y = 39.474;
92 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 89 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
93 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 90 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
94 controlPoint2X = 36.98; 91 controlPoint2X = 36.98;
95 controlPoint2Y = 40.141; 92 controlPoint2Y = 40.141;
96 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 93 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
97 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 94 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
98 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 95 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
99 pointX = 37.258; 96 pointX = 37.258;
100 pointY = 42.23; 97 pointY = 42.23;
101 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 98 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
102 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 99 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
103 controlPoint1X = 37.068; 100 controlPoint1X = 37.068;
104 controlPoint1Y = 41.283; 101 controlPoint1Y = 41.283;
105 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 102 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
106 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 103 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
107 controlPoint2X = 37.139; 104 controlPoint2X = 37.139;
108 controlPoint2Y = 41.762; 105 controlPoint2Y = 41.762;
109 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 106 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
110 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 107 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
111 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 108 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
112 pointX = 38.348; 109 pointX = 38.348;
113 pointY = 43.979; 110 pointY = 43.979;
114 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 111 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
115 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 112 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
116 controlPoint1X = 37.402; 113 controlPoint1X = 37.402;
117 controlPoint1Y = 42.799; 114 controlPoint1Y = 42.799;
118 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 115 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
119 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 116 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
120 controlPoint2X = 37.682; 117 controlPoint2X = 37.682;
121 controlPoint2Y = 43.798; 118 controlPoint2Y = 43.798;
122 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 119 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
123 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 120 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
124 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 121 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
125 pointX = 38.5; 122 pointX = 38.5;
126 pointY = 36.0; 123 pointY = 36.0;
127 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 124 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
128 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 125 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
129 controlPoint1X = 40.249; 126 controlPoint1X = 40.249;
130 controlPoint1Y = 44.497; 127 controlPoint1Y = 44.497;
131 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 128 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
132 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 129 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
133 controlPoint2X = 40.723; 130 controlPoint2X = 40.723;
134 controlPoint2Y = 36.303; 131 controlPoint2Y = 36.303;
135 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 132 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
136 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 133 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
137 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 134 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
138 pointX = 38.5; 135 pointX = 38.5;
139 pointY = 36.0; 136 pointY = 36.0;
140 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 137 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
141 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 138 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
142 context.lineTo(pointX, pointY); 139 context.lineTo(pointX, pointY);
143 context.closePath(); 140 context.closePath();
144 pointX = 50.0; 141 pointX = 50.0;
145 pointY = 52.0; 142 pointY = 52.0;
146 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 143 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
147 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 144 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
148 context.moveTo(pointX, pointY); 145 context.moveTo(pointX, pointY);
149 pointX = 26.0; 146 pointX = 26.0;
150 pointY = 52.0; 147 pointY = 52.0;
151 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 148 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
152 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 149 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
153 context.lineTo(pointX, pointY); 150 context.lineTo(pointX, pointY);
154 pointX = 26.0; 151 pointX = 26.0;
155 pointY = 33.0; 152 pointY = 33.0;
156 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 153 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
157 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 154 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
158 context.lineTo(pointX, pointY); 155 context.lineTo(pointX, pointY);
159 pointX = 50.0; 156 pointX = 50.0;
160 pointY = 33.0; 157 pointY = 33.0;
161 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 158 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
162 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 159 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
163 context.lineTo(pointX, pointY); 160 context.lineTo(pointX, pointY);
164 pointX = 50.0; 161 pointX = 50.0;
165 pointY = 52.0; 162 pointY = 52.0;
166 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 163 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
167 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 164 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
168 context.lineTo(pointX, pointY); 165 context.lineTo(pointX, pointY);
169 context.closePath(); 166 context.closePath();
170 context.fillStyle = aColor; 167 context.fillStyle = aColor;
171 context.fill(); 168 context.fill();
172 169
173 alignStroke = 0.0; 170 alignStroke = 0.0;
174 context.beginPath(); 171 context.beginPath();
175 pointX = 47.0; 172 pointX = 47.0;
176 pointY = 32.463; 173 pointY = 32.463;
177 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 174 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
178 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 175 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
179 context.moveTo(pointX, pointY); 176 context.moveTo(pointX, pointY);
180 pointX = 38.0; 177 pointX = 38.0;
181 pointY = 52.0; 178 pointY = 52.0;
182 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 179 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
183 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 180 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
184 controlPoint1X = 47.0; 181 controlPoint1X = 47.0;
185 controlPoint1Y = 52.925; 182 controlPoint1Y = 52.925;
186 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 183 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
187 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 184 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
188 controlPoint2X = 38.0; 185 controlPoint2X = 38.0;
189 controlPoint2Y = 52.0; 186 controlPoint2Y = 52.0;
190 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 187 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
191 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 188 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
192 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 189 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
193 pointX = 29.0; 190 pointX = 29.0;
194 pointY = 32.463; 191 pointY = 32.463;
195 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 192 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
196 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 193 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
197 controlPoint1X = 38.0; 194 controlPoint1X = 38.0;
198 controlPoint1Y = 52.0; 195 controlPoint1Y = 52.0;
199 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 196 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
200 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 197 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
201 controlPoint2X = 29.0; 198 controlPoint2X = 29.0;
202 controlPoint2Y = 52.925; 199 controlPoint2Y = 52.925;
203 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 200 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
204 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 201 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
205 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 202 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
206 pointX = 47.0; 203 pointX = 47.0;
207 pointY = 32.463; 204 pointY = 32.463;
208 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 205 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
209 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 206 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
210 controlPoint1X = 29.0; 207 controlPoint1X = 29.0;
211 controlPoint1Y = 12.0; 208 controlPoint1Y = 12.0;
212 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 209 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
213 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 210 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
214 controlPoint2X = 47.0; 211 controlPoint2X = 47.0;
215 controlPoint2Y = 12.0; 212 controlPoint2Y = 12.0;
216 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 213 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
217 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 214 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
218 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 215 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
219 context.closePath(); 216 context.closePath();
220 context.strokeStyle = aColor; 217 context.strokeStyle = aColor;
221 stroke = 4.0; 218 stroke = 4.0;
222 stroke *= resolution; 219 stroke *= resolution;
223 if (stroke < 1.0) 220 if (stroke < 1.0)
224 stroke = Math.ceil(stroke); 221 stroke = Math.ceil(stroke);
225 else 222 else
226 stroke = Math.round(stroke); 223 stroke = Math.round(stroke);
227 stroke /= resolution; 224 stroke /= resolution;
228 stroke *= 2.0; 225 stroke *= 2.0;
229 context.lineWidth = stroke; 226 context.lineWidth = stroke;
230 context.lineCap = "square"; 227 context.lineCap = "square";
231 context.save(); 228 context.save();
232 context.clip(); 229 context.clip();
233 context.stroke(); 230 context.stroke();
234 context.restore(); 231 context.restore();
235 232
236 context.restore(); 233 context.restore();
237} 234}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/share.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/share.js
index 825a17e..8d73cc7 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/share.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/share.js
@@ -1,408 +1,405 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //share.js 27 //share.js
31 //share 28 //share
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/7/10 30 //Created by Giulio Cesare Solaroli on 3/7/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Features_shareWidth = 76.0; 35var kClipperz_PM_UI_Canvas_Features_shareWidth = 76.0;
39var kClipperz_PM_UI_Canvas_Features_shareHeight = 76.0; 36var kClipperz_PM_UI_Canvas_Features_shareHeight = 76.0;
40 37
41function Clipperz_PM_UI_Canvas_Features_share(canvas, aColor, aBannerColor, aBannerBackgroundColor) 38function Clipperz_PM_UI_Canvas_Features_share(canvas, aColor, aBannerColor, aBannerBackgroundColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var path; 43 var path;
47 var pointX; 44 var pointX;
48 var pointY; 45 var pointY;
49 var controlPoint1X; 46 var controlPoint1X;
50 var controlPoint1Y; 47 var controlPoint1Y;
51 var controlPoint2X; 48 var controlPoint2X;
52 var controlPoint2Y; 49 var controlPoint2Y;
53 var stroke; 50 var stroke;
54 if (window.devicePixelRatio) 51 if (window.devicePixelRatio)
55 resolution = window.devicePixelRatio; 52 resolution = window.devicePixelRatio;
56 else 53 else
57 resolution = 1.0; 54 resolution = 1.0;
58 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Features_shareWidth + canvas.height / kClipperz_PM_UI_Canvas_Features_shareHeight); 55 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Features_shareWidth + canvas.height / kClipperz_PM_UI_Canvas_Features_shareHeight);
59 56
60 context.save(); 57 context.save();
61 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Features_shareWidth, canvas.height / kClipperz_PM_UI_Canvas_Features_shareHeight); 58 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Features_shareWidth, canvas.height / kClipperz_PM_UI_Canvas_Features_shareHeight);
62 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Features_shareWidth, kClipperz_PM_UI_Canvas_Features_shareHeight); 59 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Features_shareWidth, kClipperz_PM_UI_Canvas_Features_shareHeight);
63 60
64 // Layer 1 61 // Layer 1
65 62
66 alignStroke = 0.0; 63 alignStroke = 0.0;
67 context.beginPath(); 64 context.beginPath();
68 pointX = 43.179; 65 pointX = 43.179;
69 pointY = 18.621; 66 pointY = 18.621;
70 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 67 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
71 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 68 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
72 context.moveTo(pointX, pointY); 69 context.moveTo(pointX, pointY);
73 pointX = 37.163; 70 pointX = 37.163;
74 pointY = 12.605; 71 pointY = 12.605;
75 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 72 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
76 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 73 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
77 controlPoint1X = 43.179; 74 controlPoint1X = 43.179;
78 controlPoint1Y = 15.32; 75 controlPoint1Y = 15.32;
79 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 76 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
80 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 77 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
81 controlPoint2X = 40.463; 78 controlPoint2X = 40.463;
82 controlPoint2Y = 12.605; 79 controlPoint2Y = 12.605;
83 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 80 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
84 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 81 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
85 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 82 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
86 pointX = 31.147; 83 pointX = 31.147;
87 pointY = 18.621; 84 pointY = 18.621;
88 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 85 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
89 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 86 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
90 controlPoint1X = 33.863; 87 controlPoint1X = 33.863;
91 controlPoint1Y = 12.605; 88 controlPoint1Y = 12.605;
92 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 89 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
93 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 90 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
94 controlPoint2X = 31.147; 91 controlPoint2X = 31.147;
95 controlPoint2Y = 15.32; 92 controlPoint2Y = 15.32;
96 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 93 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
97 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 94 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
98 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 95 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
99 pointX = 37.163; 96 pointX = 37.163;
100 pointY = 24.637; 97 pointY = 24.637;
101 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 98 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
102 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 99 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
103 controlPoint1X = 31.147; 100 controlPoint1X = 31.147;
104 controlPoint1Y = 21.921; 101 controlPoint1Y = 21.921;
105 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 102 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
106 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 103 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
107 controlPoint2X = 33.863; 104 controlPoint2X = 33.863;
108 controlPoint2Y = 24.637; 105 controlPoint2Y = 24.637;
109 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 106 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
110 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 107 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
111 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 108 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
112 pointX = 43.179; 109 pointX = 43.179;
113 pointY = 18.621; 110 pointY = 18.621;
114 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 111 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
115 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 112 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
116 controlPoint1X = 40.463; 113 controlPoint1X = 40.463;
117 controlPoint1Y = 24.637; 114 controlPoint1Y = 24.637;
118 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 115 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
119 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 116 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
120 controlPoint2X = 43.179; 117 controlPoint2X = 43.179;
121 controlPoint2Y = 21.921; 118 controlPoint2Y = 21.921;
122 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 119 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
123 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 120 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
124 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 121 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
125 context.closePath(); 122 context.closePath();
126 context.fillStyle = aColor; 123 context.fillStyle = aColor;
127 context.fill(); 124 context.fill();
128 125
129 alignStroke = 0.0; 126 alignStroke = 0.0;
130 context.beginPath(); 127 context.beginPath();
131 pointX = 56.548; 128 pointX = 56.548;
132 pointY = 53.379; 129 pointY = 53.379;
133 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 130 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
134 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 131 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
135 context.moveTo(pointX, pointY); 132 context.moveTo(pointX, pointY);
136 pointX = 51.2; 133 pointX = 51.2;
137 pointY = 48.032; 134 pointY = 48.032;
138 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 135 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
139 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 136 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
140 controlPoint1X = 56.548; 137 controlPoint1X = 56.548;
141 controlPoint1Y = 50.446; 138 controlPoint1Y = 50.446;
142 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 139 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
143 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 140 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
144 controlPoint2X = 54.134; 141 controlPoint2X = 54.134;
145 controlPoint2Y = 48.032; 142 controlPoint2Y = 48.032;
146 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 143 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
147 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 144 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
148 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 145 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
149 pointX = 45.853; 146 pointX = 45.853;
150 pointY = 53.379; 147 pointY = 53.379;
151 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 148 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
152 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 149 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
153 controlPoint1X = 48.267; 150 controlPoint1X = 48.267;
154 controlPoint1Y = 48.032; 151 controlPoint1Y = 48.032;
155 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 152 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
156 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 153 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
157 controlPoint2X = 45.853; 154 controlPoint2X = 45.853;
158 controlPoint2Y = 50.446; 155 controlPoint2Y = 50.446;
159 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 156 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
160 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 157 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
161 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 158 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
162 pointX = 51.2; 159 pointX = 51.2;
163 pointY = 58.727; 160 pointY = 58.727;
164 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 161 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
165 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 162 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
166 controlPoint1X = 45.853; 163 controlPoint1X = 45.853;
167 controlPoint1Y = 56.313; 164 controlPoint1Y = 56.313;
168 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 165 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
169 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 166 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
170 controlPoint2X = 48.267; 167 controlPoint2X = 48.267;
171 controlPoint2Y = 58.727; 168 controlPoint2Y = 58.727;
172 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 169 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
173 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 170 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
174 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 171 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
175 pointX = 56.548; 172 pointX = 56.548;
176 pointY = 53.379; 173 pointY = 53.379;
177 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 174 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
178 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 175 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
179 controlPoint1X = 54.134; 176 controlPoint1X = 54.134;
180 controlPoint1Y = 58.727; 177 controlPoint1Y = 58.727;
181 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 178 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
182 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 179 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
183 controlPoint2X = 56.548; 180 controlPoint2X = 56.548;
184 controlPoint2Y = 56.313; 181 controlPoint2Y = 56.313;
185 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 182 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
186 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 183 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
187 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 184 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
188 context.closePath(); 185 context.closePath();
189 context.fillStyle = aColor; 186 context.fillStyle = aColor;
190 context.fill(); 187 context.fill();
191 188
192 alignStroke = 0.0; 189 alignStroke = 0.0;
193 context.beginPath(); 190 context.beginPath();
194 pointX = 31.147; 191 pointX = 31.147;
195 pointY = 38.674; 192 pointY = 38.674;
196 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 193 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
197 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 194 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
198 context.moveTo(pointX, pointY); 195 context.moveTo(pointX, pointY);
199 pointX = 25.8; 196 pointX = 25.8;
200 pointY = 33.326; 197 pointY = 33.326;
201 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 198 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
202 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 199 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
203 controlPoint1X = 31.147; 200 controlPoint1X = 31.147;
204 controlPoint1Y = 35.74; 201 controlPoint1Y = 35.74;
205 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 202 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
206 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 203 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
207 controlPoint2X = 28.733; 204 controlPoint2X = 28.733;
208 controlPoint2Y = 33.326; 205 controlPoint2Y = 33.326;
209 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 206 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
210 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 207 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
211 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 208 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
212 pointX = 20.452; 209 pointX = 20.452;
213 pointY = 38.674; 210 pointY = 38.674;
214 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 211 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
215 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 212 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
216 controlPoint1X = 22.866; 213 controlPoint1X = 22.866;
217 controlPoint1Y = 33.326; 214 controlPoint1Y = 33.326;
218 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 215 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
219 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 216 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
220 controlPoint2X = 20.452; 217 controlPoint2X = 20.452;
221 controlPoint2Y = 35.74; 218 controlPoint2Y = 35.74;
222 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 219 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
223 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 220 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
224 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 221 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
225 pointX = 25.8; 222 pointX = 25.8;
226 pointY = 44.021; 223 pointY = 44.021;
227 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 224 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
228 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 225 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
229 controlPoint1X = 20.452; 226 controlPoint1X = 20.452;
230 controlPoint1Y = 41.607; 227 controlPoint1Y = 41.607;
231 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 228 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
232 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 229 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
233 controlPoint2X = 22.866; 230 controlPoint2X = 22.866;
234 controlPoint2Y = 44.021; 231 controlPoint2Y = 44.021;
235 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 232 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
236 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 233 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
237 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 234 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
238 pointX = 31.147; 235 pointX = 31.147;
239 pointY = 38.674; 236 pointY = 38.674;
240 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 237 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
241 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 238 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
242 controlPoint1X = 28.733; 239 controlPoint1X = 28.733;
243 controlPoint1Y = 44.021; 240 controlPoint1Y = 44.021;
244 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 241 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
245 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 242 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
246 controlPoint2X = 31.147; 243 controlPoint2X = 31.147;
247 controlPoint2Y = 41.607; 244 controlPoint2Y = 41.607;
248 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 245 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
249 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 246 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
250 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 247 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
251 context.closePath(); 248 context.closePath();
252 context.fillStyle = aColor; 249 context.fillStyle = aColor;
253 context.fill(); 250 context.fill();
254 251
255 alignStroke = 0.0; 252 alignStroke = 0.0;
256 context.beginPath(); 253 context.beginPath();
257 pointX = 39.168; 254 pointX = 39.168;
258 pointY = 48.032; 255 pointY = 48.032;
259 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 256 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
260 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 257 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
261 context.moveTo(pointX, pointY); 258 context.moveTo(pointX, pointY);
262 pointX = 33.821; 259 pointX = 33.821;
263 pointY = 42.684; 260 pointY = 42.684;
264 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 261 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
265 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 262 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
266 controlPoint1X = 39.168; 263 controlPoint1X = 39.168;
267 controlPoint1Y = 45.098; 264 controlPoint1Y = 45.098;
268 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 265 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
269 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 266 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
270 controlPoint2X = 36.754; 267 controlPoint2X = 36.754;
271 controlPoint2Y = 42.684; 268 controlPoint2Y = 42.684;
272 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 269 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
273 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 270 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
274 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 271 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
275 pointX = 28.473; 272 pointX = 28.473;
276 pointY = 48.032; 273 pointY = 48.032;
277 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 274 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
278 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 275 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
279 controlPoint1X = 30.887; 276 controlPoint1X = 30.887;
280 controlPoint1Y = 42.684; 277 controlPoint1Y = 42.684;
281 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 278 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
282 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 279 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
283 controlPoint2X = 28.473; 280 controlPoint2X = 28.473;
284 controlPoint2Y = 45.098; 281 controlPoint2Y = 45.098;
285 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 282 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
286 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 283 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
287 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 284 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
288 pointX = 33.821; 285 pointX = 33.821;
289 pointY = 53.379; 286 pointY = 53.379;
290 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 287 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
291 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 288 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
292 controlPoint1X = 28.473; 289 controlPoint1X = 28.473;
293 controlPoint1Y = 50.965; 290 controlPoint1Y = 50.965;
294 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 291 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
295 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 292 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
296 controlPoint2X = 30.887; 293 controlPoint2X = 30.887;
297 controlPoint2Y = 53.379; 294 controlPoint2Y = 53.379;
298 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 295 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
299 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 296 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
300 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 297 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
301 pointX = 39.168; 298 pointX = 39.168;
302 pointY = 48.032; 299 pointY = 48.032;
303 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 300 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
304 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 301 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
305 controlPoint1X = 36.754; 302 controlPoint1X = 36.754;
306 controlPoint1Y = 53.379; 303 controlPoint1Y = 53.379;
307 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 304 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
308 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 305 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
309 controlPoint2X = 39.168; 306 controlPoint2X = 39.168;
310 controlPoint2Y = 50.965; 307 controlPoint2Y = 50.965;
311 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 308 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
312 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 309 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
313 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 310 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
314 context.closePath(); 311 context.closePath();
315 context.fillStyle = aColor; 312 context.fillStyle = aColor;
316 context.fill(); 313 context.fill();
317 314
318 alignStroke = 0.0; 315 alignStroke = 0.0;
319 context.beginPath(); 316 context.beginPath();
320 pointX = 56.548; 317 pointX = 56.548;
321 pointY = 29.984; 318 pointY = 29.984;
322 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 319 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
323 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 320 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
324 context.moveTo(pointX, pointY); 321 context.moveTo(pointX, pointY);
325 pointX = 53.206; 322 pointX = 53.206;
326 pointY = 26.642; 323 pointY = 26.642;
327 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 324 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
328 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 325 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
329 controlPoint1X = 56.548; 326 controlPoint1X = 56.548;
330 controlPoint1Y = 28.151; 327 controlPoint1Y = 28.151;
331 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 328 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
332 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 329 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
333 controlPoint2X = 55.039; 330 controlPoint2X = 55.039;
334 controlPoint2Y = 26.642; 331 controlPoint2Y = 26.642;
335 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 332 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
336 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 333 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
337 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 334 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
338 pointX = 49.863; 335 pointX = 49.863;
339 pointY = 29.984; 336 pointY = 29.984;
340 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 337 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
341 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 338 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
342 controlPoint1X = 51.372; 339 controlPoint1X = 51.372;
343 controlPoint1Y = 26.642; 340 controlPoint1Y = 26.642;
344 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 341 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
345 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 342 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
346 controlPoint2X = 49.863; 343 controlPoint2X = 49.863;
347 controlPoint2Y = 28.151; 344 controlPoint2Y = 28.151;
348 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 345 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
349 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 346 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
350 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 347 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
351 pointX = 53.206; 348 pointX = 53.206;
352 pointY = 33.326; 349 pointY = 33.326;
353 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 350 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
354 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 351 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
355 controlPoint1X = 49.863; 352 controlPoint1X = 49.863;
356 controlPoint1Y = 31.817; 353 controlPoint1Y = 31.817;
357 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 354 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
358 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 355 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
359 controlPoint2X = 51.372; 356 controlPoint2X = 51.372;
360 controlPoint2Y = 33.326; 357 controlPoint2Y = 33.326;
361 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 358 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
362 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 359 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
363 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 360 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
364 pointX = 56.548; 361 pointX = 56.548;
365 pointY = 29.984; 362 pointY = 29.984;
366 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 363 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
367 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 364 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
368 controlPoint1X = 55.039; 365 controlPoint1X = 55.039;
369 controlPoint1Y = 33.326; 366 controlPoint1Y = 33.326;
370 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 367 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
371 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 368 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
372 controlPoint2X = 56.548; 369 controlPoint2X = 56.548;
373 controlPoint2Y = 31.817; 370 controlPoint2Y = 31.817;
374 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 371 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
375 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 372 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
376 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 373 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
377 context.closePath(); 374 context.closePath();
378 context.fillStyle = aColor; 375 context.fillStyle = aColor;
379 context.fill(); 376 context.fill();
380 377
381 alignStroke = 0.0; 378 alignStroke = 0.0;
382 context.beginPath(); 379 context.beginPath();
383 pointX = 49.863; 380 pointX = 49.863;
384 pointY = 39.342; 381 pointY = 39.342;
385 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 382 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
386 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 383 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
387 context.moveTo(pointX, pointY); 384 context.moveTo(pointX, pointY);
388 pointX = 46.521; 385 pointX = 46.521;
389 pointY = 36.0; 386 pointY = 36.0;
390 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 387 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
391 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 388 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
392 controlPoint1X = 49.863; 389 controlPoint1X = 49.863;
393 controlPoint1Y = 37.509; 390 controlPoint1Y = 37.509;
394 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 391 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
395 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 392 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
396 controlPoint2X = 48.355; 393 controlPoint2X = 48.355;
397 controlPoint2Y = 36.0; 394 controlPoint2Y = 36.0;
398 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 395 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
399 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 396 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
400 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 397 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
401 pointX = 43.179; 398 pointX = 43.179;
402 pointY = 39.342; 399 pointY = 39.342;
403 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 400 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
404 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 401 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
405 controlPoint1X = 44.688; 402 controlPoint1X = 44.688;
406 controlPoint1Y = 36.0; 403 controlPoint1Y = 36.0;
407 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 404 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
408 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 405 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/store.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/store.js
index eaeb7f1..572d9be 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/store.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Features/store.js
@@ -1,310 +1,307 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //store.js 27 //store.js
31 //store 28 //store
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/7/10 30 //Created by Giulio Cesare Solaroli on 3/7/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Features_storeWidth = 76.0; 35var kClipperz_PM_UI_Canvas_Features_storeWidth = 76.0;
39var kClipperz_PM_UI_Canvas_Features_storeHeight = 76.0; 36var kClipperz_PM_UI_Canvas_Features_storeHeight = 76.0;
40 37
41function Clipperz_PM_UI_Canvas_Features_store(canvas, aColor, aBannerColor, aBannerBackgroundColor) 38function Clipperz_PM_UI_Canvas_Features_store(canvas, aColor, aBannerColor, aBannerBackgroundColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var path; 43 var path;
47 var pointX; 44 var pointX;
48 var pointY; 45 var pointY;
49 if (window.devicePixelRatio) 46 if (window.devicePixelRatio)
50 resolution = window.devicePixelRatio; 47 resolution = window.devicePixelRatio;
51 else 48 else
52 resolution = 1.0; 49 resolution = 1.0;
53 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Features_storeWidth + canvas.height / kClipperz_PM_UI_Canvas_Features_storeHeight); 50 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Features_storeWidth + canvas.height / kClipperz_PM_UI_Canvas_Features_storeHeight);
54 51
55 context.save(); 52 context.save();
56 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Features_storeWidth, canvas.height / kClipperz_PM_UI_Canvas_Features_storeHeight); 53 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Features_storeWidth, canvas.height / kClipperz_PM_UI_Canvas_Features_storeHeight);
57 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Features_storeWidth, kClipperz_PM_UI_Canvas_Features_storeHeight); 54 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Features_storeWidth, kClipperz_PM_UI_Canvas_Features_storeHeight);
58 55
59 // Layer 1 56 // Layer 1
60 57
61 alignStroke = 0.0; 58 alignStroke = 0.0;
62 context.beginPath(); 59 context.beginPath();
63 pointX = 27.0; 60 pointX = 27.0;
64 pointY = 29.5; 61 pointY = 29.5;
65 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 62 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
66 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 63 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
67 context.moveTo(pointX, pointY); 64 context.moveTo(pointX, pointY);
68 pointX = 27.0; 65 pointX = 27.0;
69 pointY = 24.5; 66 pointY = 24.5;
70 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 67 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
71 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 68 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
72 context.lineTo(pointX, pointY); 69 context.lineTo(pointX, pointY);
73 pointX = 22.0; 70 pointX = 22.0;
74 pointY = 24.5; 71 pointY = 24.5;
75 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 72 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
76 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 73 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
77 context.lineTo(pointX, pointY); 74 context.lineTo(pointX, pointY);
78 pointX = 22.0; 75 pointX = 22.0;
79 pointY = 29.5; 76 pointY = 29.5;
80 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 77 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
81 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 78 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
82 context.lineTo(pointX, pointY); 79 context.lineTo(pointX, pointY);
83 pointX = 27.0; 80 pointX = 27.0;
84 pointY = 29.5; 81 pointY = 29.5;
85 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 82 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
86 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 83 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
87 context.lineTo(pointX, pointY); 84 context.lineTo(pointX, pointY);
88 context.closePath(); 85 context.closePath();
89 context.fillStyle = aColor; 86 context.fillStyle = aColor;
90 context.fill(); 87 context.fill();
91 88
92 alignStroke = 0.0; 89 alignStroke = 0.0;
93 context.beginPath(); 90 context.beginPath();
94 pointX = 54.0; 91 pointX = 54.0;
95 pointY = 29.5; 92 pointY = 29.5;
96 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 93 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
97 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 94 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
98 context.moveTo(pointX, pointY); 95 context.moveTo(pointX, pointY);
99 pointX = 54.0; 96 pointX = 54.0;
100 pointY = 24.5; 97 pointY = 24.5;
101 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 98 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
102 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 99 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
103 context.lineTo(pointX, pointY); 100 context.lineTo(pointX, pointY);
104 pointX = 29.0; 101 pointX = 29.0;
105 pointY = 24.5; 102 pointY = 24.5;
106 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 103 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
107 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 104 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
108 context.lineTo(pointX, pointY); 105 context.lineTo(pointX, pointY);
109 pointX = 29.0; 106 pointX = 29.0;
110 pointY = 29.5; 107 pointY = 29.5;
111 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 108 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
112 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 109 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
113 context.lineTo(pointX, pointY); 110 context.lineTo(pointX, pointY);
114 pointX = 54.0; 111 pointX = 54.0;
115 pointY = 29.5; 112 pointY = 29.5;
116 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 113 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
117 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 114 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
118 context.lineTo(pointX, pointY); 115 context.lineTo(pointX, pointY);
119 context.closePath(); 116 context.closePath();
120 context.fillStyle = aColor; 117 context.fillStyle = aColor;
121 context.fill(); 118 context.fill();
122 119
123 alignStroke = 0.0; 120 alignStroke = 0.0;
124 context.beginPath(); 121 context.beginPath();
125 pointX = 43.0; 122 pointX = 43.0;
126 pointY = 37.0; 123 pointY = 37.0;
127 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 124 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
128 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 125 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
129 context.moveTo(pointX, pointY); 126 context.moveTo(pointX, pointY);
130 pointX = 43.0; 127 pointX = 43.0;
131 pointY = 32.0; 128 pointY = 32.0;
132 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 129 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
133 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 130 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
134 context.lineTo(pointX, pointY); 131 context.lineTo(pointX, pointY);
135 pointX = 29.0; 132 pointX = 29.0;
136 pointY = 32.0; 133 pointY = 32.0;
137 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 134 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
138 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 135 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
139 context.lineTo(pointX, pointY); 136 context.lineTo(pointX, pointY);
140 pointX = 29.0; 137 pointX = 29.0;
141 pointY = 37.0; 138 pointY = 37.0;
142 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 139 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
143 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 140 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
144 context.lineTo(pointX, pointY); 141 context.lineTo(pointX, pointY);
145 pointX = 43.0; 142 pointX = 43.0;
146 pointY = 37.0; 143 pointY = 37.0;
147 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 144 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
148 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 145 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
149 context.lineTo(pointX, pointY); 146 context.lineTo(pointX, pointY);
150 context.closePath(); 147 context.closePath();
151 context.fillStyle = aColor; 148 context.fillStyle = aColor;
152 context.fill(); 149 context.fill();
153 150
154 alignStroke = 0.0; 151 alignStroke = 0.0;
155 context.beginPath(); 152 context.beginPath();
156 pointX = 27.0; 153 pointX = 27.0;
157 pointY = 37.0; 154 pointY = 37.0;
158 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 155 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
159 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 156 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
160 context.moveTo(pointX, pointY); 157 context.moveTo(pointX, pointY);
161 pointX = 27.0; 158 pointX = 27.0;
162 pointY = 32.0; 159 pointY = 32.0;
163 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 160 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
164 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 161 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
165 context.lineTo(pointX, pointY); 162 context.lineTo(pointX, pointY);
166 pointX = 22.0; 163 pointX = 22.0;
167 pointY = 32.0; 164 pointY = 32.0;
168 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 165 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
169 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 166 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
170 context.lineTo(pointX, pointY); 167 context.lineTo(pointX, pointY);
171 pointX = 22.0; 168 pointX = 22.0;
172 pointY = 37.0; 169 pointY = 37.0;
173 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 170 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
174 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 171 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
175 context.lineTo(pointX, pointY); 172 context.lineTo(pointX, pointY);
176 pointX = 27.0; 173 pointX = 27.0;
177 pointY = 37.0; 174 pointY = 37.0;
178 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 175 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
179 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 176 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
180 context.lineTo(pointX, pointY); 177 context.lineTo(pointX, pointY);
181 context.closePath(); 178 context.closePath();
182 context.fillStyle = aColor; 179 context.fillStyle = aColor;
183 context.fill(); 180 context.fill();
184 181
185 alignStroke = 0.0; 182 alignStroke = 0.0;
186 context.beginPath(); 183 context.beginPath();
187 pointX = 27.0; 184 pointX = 27.0;
188 pointY = 44.0; 185 pointY = 44.0;
189 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 186 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
190 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 187 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
191 context.moveTo(pointX, pointY); 188 context.moveTo(pointX, pointY);
192 pointX = 27.0; 189 pointX = 27.0;
193 pointY = 39.0; 190 pointY = 39.0;
194 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 191 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
195 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 192 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
196 context.lineTo(pointX, pointY); 193 context.lineTo(pointX, pointY);
197 pointX = 22.0; 194 pointX = 22.0;
198 pointY = 39.0; 195 pointY = 39.0;
199 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 196 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
200 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 197 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
201 context.lineTo(pointX, pointY); 198 context.lineTo(pointX, pointY);
202 pointX = 22.0; 199 pointX = 22.0;
203 pointY = 44.0; 200 pointY = 44.0;
204 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 201 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
205 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 202 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
206 context.lineTo(pointX, pointY); 203 context.lineTo(pointX, pointY);
207 pointX = 27.0; 204 pointX = 27.0;
208 pointY = 44.0; 205 pointY = 44.0;
209 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 206 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
210 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 207 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
211 context.lineTo(pointX, pointY); 208 context.lineTo(pointX, pointY);
212 context.closePath(); 209 context.closePath();
213 context.fillStyle = aColor; 210 context.fillStyle = aColor;
214 context.fill(); 211 context.fill();
215 212
216 alignStroke = 0.0; 213 alignStroke = 0.0;
217 context.beginPath(); 214 context.beginPath();
218 pointX = 46.0; 215 pointX = 46.0;
219 pointY = 44.0; 216 pointY = 44.0;
220 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 217 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
221 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 218 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
222 context.moveTo(pointX, pointY); 219 context.moveTo(pointX, pointY);
223 pointX = 46.0; 220 pointX = 46.0;
224 pointY = 39.0; 221 pointY = 39.0;
225 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 222 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
226 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 223 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
227 context.lineTo(pointX, pointY); 224 context.lineTo(pointX, pointY);
228 pointX = 29.0; 225 pointX = 29.0;
229 pointY = 39.0; 226 pointY = 39.0;
230 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 227 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
231 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 228 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
232 context.lineTo(pointX, pointY); 229 context.lineTo(pointX, pointY);
233 pointX = 29.0; 230 pointX = 29.0;
234 pointY = 44.0; 231 pointY = 44.0;
235 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 232 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
236 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 233 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
237 context.lineTo(pointX, pointY); 234 context.lineTo(pointX, pointY);
238 pointX = 46.0; 235 pointX = 46.0;
239 pointY = 44.0; 236 pointY = 44.0;
240 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 237 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
241 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 238 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
242 context.lineTo(pointX, pointY); 239 context.lineTo(pointX, pointY);
243 context.closePath(); 240 context.closePath();
244 context.fillStyle = aColor; 241 context.fillStyle = aColor;
245 context.fill(); 242 context.fill();
246 243
247 alignStroke = 0.0; 244 alignStroke = 0.0;
248 context.beginPath(); 245 context.beginPath();
249 pointX = 40.0; 246 pointX = 40.0;
250 pointY = 51.0; 247 pointY = 51.0;
251 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 248 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
252 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 249 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
253 context.moveTo(pointX, pointY); 250 context.moveTo(pointX, pointY);
254 pointX = 40.0; 251 pointX = 40.0;
255 pointY = 46.0; 252 pointY = 46.0;
256 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 253 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
257 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 254 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
258 context.lineTo(pointX, pointY); 255 context.lineTo(pointX, pointY);
259 pointX = 29.0; 256 pointX = 29.0;
260 pointY = 46.0; 257 pointY = 46.0;
261 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 258 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
262 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 259 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
263 context.lineTo(pointX, pointY); 260 context.lineTo(pointX, pointY);
264 pointX = 29.0; 261 pointX = 29.0;
265 pointY = 51.0; 262 pointY = 51.0;
266 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 263 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
267 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 264 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
268 context.lineTo(pointX, pointY); 265 context.lineTo(pointX, pointY);
269 pointX = 40.0; 266 pointX = 40.0;
270 pointY = 51.0; 267 pointY = 51.0;
271 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 268 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
272 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 269 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
273 context.lineTo(pointX, pointY); 270 context.lineTo(pointX, pointY);
274 context.closePath(); 271 context.closePath();
275 context.fillStyle = aColor; 272 context.fillStyle = aColor;
276 context.fill(); 273 context.fill();
277 274
278 alignStroke = 0.0; 275 alignStroke = 0.0;
279 context.beginPath(); 276 context.beginPath();
280 pointX = 27.0; 277 pointX = 27.0;
281 pointY = 51.0; 278 pointY = 51.0;
282 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 279 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
283 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 280 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
284 context.moveTo(pointX, pointY); 281 context.moveTo(pointX, pointY);
285 pointX = 27.0; 282 pointX = 27.0;
286 pointY = 46.0; 283 pointY = 46.0;
287 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 284 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
288 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 285 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
289 context.lineTo(pointX, pointY); 286 context.lineTo(pointX, pointY);
290 pointX = 22.0; 287 pointX = 22.0;
291 pointY = 46.0; 288 pointY = 46.0;
292 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 289 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
293 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 290 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
294 context.lineTo(pointX, pointY); 291 context.lineTo(pointX, pointY);
295 pointX = 22.0; 292 pointX = 22.0;
296 pointY = 51.0; 293 pointY = 51.0;
297 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 294 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
298 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 295 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
299 context.lineTo(pointX, pointY); 296 context.lineTo(pointX, pointY);
300 pointX = 27.0; 297 pointX = 27.0;
301 pointY = 51.0; 298 pointY = 51.0;
302 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 299 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
303 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 300 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
304 context.lineTo(pointX, pointY); 301 context.lineTo(pointX, pointY);
305 context.closePath(); 302 context.closePath();
306 context.fillStyle = aColor; 303 context.fillStyle = aColor;
307 context.fill(); 304 context.fill();
308 305
309 context.restore(); 306 context.restore();
310} 307}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/GraphicFunctions.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/GraphicFunctions.js
index 5de2e96..b9443bd 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/GraphicFunctions.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/GraphicFunctions.js
@@ -1,68 +1,65 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Canvas'); 26Clipperz.Base.module('Clipperz.PM.UI.Canvas');
30 27
31MochiKit.Base.update(Clipperz.PM.UI.Canvas , { 28MochiKit.Base.update(Clipperz.PM.UI.Canvas , {
32 'marks': { 29 'marks': {
33 '!':Clipperz_PM_UI_Canvas_Marks_exclamationMark, 30 '!':Clipperz_PM_UI_Canvas_Marks_exclamationMark,
34 '?':Clipperz_PM_UI_Canvas_Marks_questionMark, 31 '?':Clipperz_PM_UI_Canvas_Marks_questionMark,
35 'i':Clipperz_PM_UI_Canvas_Marks_info 32 'i':Clipperz_PM_UI_Canvas_Marks_info
36 }, 33 },
37 34
38 'features': { 35 'features': {
39 'store': Clipperz_PM_UI_Canvas_Features_store, 36 'store': Clipperz_PM_UI_Canvas_Features_store,
40 'protect': Clipperz_PM_UI_Canvas_Features_protect, 37 'protect': Clipperz_PM_UI_Canvas_Features_protect,
41 'directLogin':Clipperz_PM_UI_Canvas_Features_directLogin, 38 'directLogin':Clipperz_PM_UI_Canvas_Features_directLogin,
42 'share': Clipperz_PM_UI_Canvas_Features_share 39 'share': Clipperz_PM_UI_Canvas_Features_share
43 }, 40 },
44 41
45 'tips': { 42 'tips': {
46 'open': Clipperz_PM_UI_Canvas_Tips_open, 43 'open': Clipperz_PM_UI_Canvas_Tips_open,
47 'close': Clipperz_PM_UI_Canvas_Tips_close 44 'close': Clipperz_PM_UI_Canvas_Tips_close
48 }, 45 },
49 46
50 'star': { 47 'star': {
51 'normal': Clipperz_PM_UI_Canvas_Star_normal 48 'normal': Clipperz_PM_UI_Canvas_Star_normal
52 }, 49 },
53 50
54 'coverActions': { 51 'coverActions': {
55 'look': Clipperz_PM_UI_Canvas_CoverActions_look, 52 'look': Clipperz_PM_UI_Canvas_CoverActions_look,
56 'download': Clipperz_PM_UI_Canvas_CoverActions_download 53 'download': Clipperz_PM_UI_Canvas_CoverActions_download
57 }, 54 },
58 55
59 'registerButton': { 56 'registerButton': {
60 'normal': Clipperz_PM_UI_Canvas_RegisterButton_normal 57 'normal': Clipperz_PM_UI_Canvas_RegisterButton_normal
61 }, 58 },
62 59
63 'logo': { 60 'logo': {
64 'normal': Clipperz_PM_UI_Canvas_Logo_normal 61 'normal': Clipperz_PM_UI_Canvas_Logo_normal
65 }, 62 },
66 63
67 __syntaxFix__: "syntax fix" 64 __syntaxFix__: "syntax fix"
68}); 65});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Logo/normal.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Logo/normal.js
index e0bea36..de9d3aa 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Logo/normal.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Logo/normal.js
@@ -1,65 +1,62 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //normal.js 27 //normal.js
31 //normal 28 //normal
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/25/10 30 //Created by Giulio Cesare Solaroli on 3/25/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Logo_normalWidth = 150.0; 35var kClipperz_PM_UI_Canvas_Logo_normalWidth = 150.0;
39var kClipperz_PM_UI_Canvas_Logo_normalHeight = 39.0; 36var kClipperz_PM_UI_Canvas_Logo_normalHeight = 39.0;
40 37
41function Clipperz_PM_UI_Canvas_Logo_normal(canvas, aMainColor, aSecondaryColor) 38function Clipperz_PM_UI_Canvas_Logo_normal(canvas, aMainColor, aSecondaryColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var string; 41 var string;
45 42
46 context.save(); 43 context.save();
47 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Logo_normalWidth, canvas.height / kClipperz_PM_UI_Canvas_Logo_normalHeight); 44 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Logo_normalWidth, canvas.height / kClipperz_PM_UI_Canvas_Logo_normalHeight);
48 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Logo_normalWidth, kClipperz_PM_UI_Canvas_Logo_normalHeight); 45 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Logo_normalWidth, kClipperz_PM_UI_Canvas_Logo_normalHeight);
49 46
50 // clipper… 47 // clipper…
51 48
52 string = "clipper"; 49 string = "clipper";
53 context.font = "38.0pt Helvetica-Bold"; 50 context.font = "38.0pt Helvetica-Bold";
54 context.fillStyle = aMainColor; 51 context.fillStyle = aMainColor;
55 context.fillText(string, -9.0, -9.0); 52 context.fillText(string, -9.0, -9.0);
56 53
57 // …z 54 // …z
58 55
59 string = "z"; 56 string = "z";
60 context.font = "38.0pt Helvetica-Bold"; 57 context.font = "38.0pt Helvetica-Bold";
61 context.fillStyle = aSecondaryColor; 58 context.fillStyle = aSecondaryColor;
62 context.fillText(string, 125.0, -9.0); 59 context.fillText(string, 125.0, -9.0);
63 60
64 context.restore(); 61 context.restore();
65} 62}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/exclamationMark.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/exclamationMark.js
index f3ae04d..02f2f80 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/exclamationMark.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/exclamationMark.js
@@ -1,280 +1,277 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //exclamationMark.js 27 //exclamationMark.js
31 //! 28 //!
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/7/10 30 //Created by Giulio Cesare Solaroli on 3/7/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Marks_exclamationMarkWidth = 50.0; 35var kClipperz_PM_UI_Canvas_Marks_exclamationMarkWidth = 50.0;
39var kClipperz_PM_UI_Canvas_Marks_exclamationMarkHeight = 50.0; 36var kClipperz_PM_UI_Canvas_Marks_exclamationMarkHeight = 50.0;
40 37
41function Clipperz_PM_UI_Canvas_Marks_exclamationMark(canvas, aColor) 38function Clipperz_PM_UI_Canvas_Marks_exclamationMark(canvas, aColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var path; 43 var path;
47 var pointX; 44 var pointX;
48 var pointY; 45 var pointY;
49 var controlPoint1X; 46 var controlPoint1X;
50 var controlPoint1Y; 47 var controlPoint1Y;
51 var controlPoint2X; 48 var controlPoint2X;
52 var controlPoint2Y; 49 var controlPoint2Y;
53 if (window.devicePixelRatio) 50 if (window.devicePixelRatio)
54 resolution = window.devicePixelRatio; 51 resolution = window.devicePixelRatio;
55 else 52 else
56 resolution = 1.0; 53 resolution = 1.0;
57 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Marks_exclamationMarkWidth + canvas.height / kClipperz_PM_UI_Canvas_Marks_exclamationMarkHeight); 54 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Marks_exclamationMarkWidth + canvas.height / kClipperz_PM_UI_Canvas_Marks_exclamationMarkHeight);
58 55
59 context.save(); 56 context.save();
60 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Marks_exclamationMarkWidth, canvas.height / kClipperz_PM_UI_Canvas_Marks_exclamationMarkHeight); 57 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Marks_exclamationMarkWidth, canvas.height / kClipperz_PM_UI_Canvas_Marks_exclamationMarkHeight);
61 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Marks_exclamationMarkWidth, kClipperz_PM_UI_Canvas_Marks_exclamationMarkHeight); 58 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Marks_exclamationMarkWidth, kClipperz_PM_UI_Canvas_Marks_exclamationMarkHeight);
62 59
63 // Layer 1 60 // Layer 1
64 61
65 alignStroke = 0.0; 62 alignStroke = 0.0;
66 context.beginPath(); 63 context.beginPath();
67 pointX = 26.499; 64 pointX = 26.499;
68 pointY = 10.848; 65 pointY = 10.848;
69 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 66 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
70 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 67 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
71 context.moveTo(pointX, pointY); 68 context.moveTo(pointX, pointY);
72 pointX = 20.887; 69 pointX = 20.887;
73 pointY = 11.584; 70 pointY = 11.584;
74 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 71 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
75 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 72 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
76 controlPoint1X = 25.395; 73 controlPoint1X = 25.395;
77 controlPoint1Y = 10.802; 74 controlPoint1Y = 10.802;
78 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 75 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
79 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 76 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
80 controlPoint2X = 22.175; 77 controlPoint2X = 22.175;
81 controlPoint2Y = 11.078; 78 controlPoint2Y = 11.078;
82 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 79 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
83 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 80 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
84 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 81 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
85 pointX = 20.013; 82 pointX = 20.013;
86 pointY = 13.194; 83 pointY = 13.194;
87 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 84 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
88 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 85 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
89 controlPoint1X = 20.335; 86 controlPoint1X = 20.335;
90 controlPoint1Y = 11.814; 87 controlPoint1Y = 11.814;
91 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 88 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
92 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 89 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
93 controlPoint2X = 19.921; 90 controlPoint2X = 19.921;
94 controlPoint2Y = 12.826; 91 controlPoint2Y = 12.826;
95 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 92 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
96 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 93 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
97 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 94 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
98 pointX = 23.049; 95 pointX = 23.049;
99 pointY = 28.788; 96 pointY = 28.788;
100 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 97 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
101 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 98 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
102 controlPoint1X = 20.243; 99 controlPoint1X = 20.243;
103 controlPoint1Y = 15.448; 100 controlPoint1Y = 15.448;
104 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 101 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
105 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 102 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
106 controlPoint2X = 22.589; 103 controlPoint2X = 22.589;
107 controlPoint2Y = 26.35; 104 controlPoint2Y = 26.35;
108 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 105 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
109 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 106 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
110 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 107 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
111 pointX = 25.027; 108 pointX = 25.027;
112 pointY = 29.156; 109 pointY = 29.156;
113 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 110 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
114 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 111 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
115 controlPoint1X = 23.279; 112 controlPoint1X = 23.279;
116 controlPoint1Y = 29.018; 113 controlPoint1Y = 29.018;
117 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 114 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
118 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 115 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
119 controlPoint2X = 24.705; 116 controlPoint2X = 24.705;
120 controlPoint2Y = 29.202; 117 controlPoint2Y = 29.202;
121 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 118 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
122 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 119 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
123 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 120 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
124 pointX = 27.971; 121 pointX = 27.971;
125 pointY = 11.354; 122 pointY = 11.354;
126 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 123 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
127 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 124 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
128 controlPoint1X = 25.809; 125 controlPoint1X = 25.809;
129 controlPoint1Y = 25.384; 126 controlPoint1Y = 25.384;
130 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 127 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
131 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 128 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
132 controlPoint2X = 27.971; 129 controlPoint2X = 27.971;
133 controlPoint2Y = 12.826; 130 controlPoint2Y = 12.826;
134 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 131 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
135 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 132 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
136 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 133 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
137 pointX = 26.499; 134 pointX = 26.499;
138 pointY = 10.848; 135 pointY = 10.848;
139 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 136 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
140 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 137 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
141 controlPoint1X = 27.557; 138 controlPoint1X = 27.557;
142 controlPoint1Y = 11.032; 139 controlPoint1Y = 11.032;
143 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 140 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
144 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 141 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
145 controlPoint2X = 26.913; 142 controlPoint2X = 26.913;
146 controlPoint2Y = 10.848; 143 controlPoint2Y = 10.848;
147 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 144 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
148 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 145 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
149 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 146 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
150 pointX = 26.499; 147 pointX = 26.499;
151 pointY = 10.848; 148 pointY = 10.848;
152 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 149 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
153 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 150 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
154 context.lineTo(pointX, pointY); 151 context.lineTo(pointX, pointY);
155 context.closePath(); 152 context.closePath();
156 pointX = 24.337; 153 pointX = 24.337;
157 pointY = 31.962; 154 pointY = 31.962;
158 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 155 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
159 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 156 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
160 context.moveTo(pointX, pointY); 157 context.moveTo(pointX, pointY);
161 pointX = 21.899; 158 pointX = 21.899;
162 pointY = 32.882; 159 pointY = 32.882;
163 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 160 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
164 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 161 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
165 controlPoint1X = 23.463; 162 controlPoint1X = 23.463;
166 controlPoint1Y = 31.962; 163 controlPoint1Y = 31.962;
167 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 164 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
168 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 165 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
169 controlPoint2X = 22.589; 166 controlPoint2X = 22.589;
170 controlPoint2Y = 32.284; 167 controlPoint2Y = 32.284;
171 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 168 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
172 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 169 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
173 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 170 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
174 pointX = 20.703; 171 pointX = 20.703;
175 pointY = 35.458; 172 pointY = 35.458;
176 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 173 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
177 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 174 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
178 controlPoint1X = 21.163; 175 controlPoint1X = 21.163;
179 controlPoint1Y = 33.572; 176 controlPoint1Y = 33.572;
180 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 177 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
181 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 178 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
182 controlPoint2X = 20.703; 179 controlPoint2X = 20.703;
183 controlPoint2Y = 34.538; 180 controlPoint2Y = 34.538;
184 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 181 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
185 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 182 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
186 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 183 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
187 pointX = 21.669; 184 pointX = 21.669;
188 pointY = 38.08; 185 pointY = 38.08;
189 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 186 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
190 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 187 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
191 controlPoint1X = 20.703; 188 controlPoint1X = 20.703;
192 controlPoint1Y = 36.47; 189 controlPoint1Y = 36.47;
193 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 190 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
194 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 191 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
195 controlPoint2X = 20.979; 192 controlPoint2X = 20.979;
196 controlPoint2Y = 37.344; 193 controlPoint2Y = 37.344;
197 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 194 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
198 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 195 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
199 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 196 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
200 pointX = 24.015; 197 pointX = 24.015;
201 pointY = 39.0; 198 pointY = 39.0;
202 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 199 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
203 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 200 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
204 controlPoint1X = 22.405; 201 controlPoint1X = 22.405;
205 controlPoint1Y = 38.77; 202 controlPoint1Y = 38.77;
206 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 203 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
207 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 204 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
208 controlPoint2X = 23.325; 205 controlPoint2X = 23.325;
209 controlPoint2Y = 39.0; 206 controlPoint2Y = 39.0;
210 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 207 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
211 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 208 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
212 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 209 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
213 pointX = 26.821; 210 pointX = 26.821;
214 pointY = 38.034; 211 pointY = 38.034;
215 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 212 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
216 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 213 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
217 controlPoint1X = 25.073; 214 controlPoint1X = 25.073;
218 controlPoint1Y = 39.0; 215 controlPoint1Y = 39.0;
219 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 216 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
220 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 217 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
221 controlPoint2X = 26.131; 218 controlPoint2X = 26.131;
222 controlPoint2Y = 38.724; 219 controlPoint2Y = 38.724;
223 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 220 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
224 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 221 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
225 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 222 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
226 pointX = 27.833; 223 pointX = 27.833;
227 pointY = 35.55; 224 pointY = 35.55;
228 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 225 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
229 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 226 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
230 controlPoint1X = 27.465; 227 controlPoint1X = 27.465;
231 controlPoint1Y = 37.344; 228 controlPoint1Y = 37.344;
232 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 229 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
233 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 230 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
234 controlPoint2X = 27.833; 231 controlPoint2X = 27.833;
235 controlPoint2Y = 36.194; 232 controlPoint2Y = 36.194;
236 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 233 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
237 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 234 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
238 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 235 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
239 pointX = 26.683; 236 pointX = 26.683;
240 pointY = 32.744; 237 pointY = 32.744;
241 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 238 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
242 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 239 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
243 controlPoint1X = 27.833; 240 controlPoint1X = 27.833;
244 controlPoint1Y = 34.676; 241 controlPoint1Y = 34.676;
245 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 242 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
246 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 243 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
247 controlPoint2X = 27.557; 244 controlPoint2X = 27.557;
248 controlPoint2Y = 33.572; 245 controlPoint2Y = 33.572;
249 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 246 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
250 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 247 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
251 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 248 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
252 pointX = 24.337; 249 pointX = 24.337;
253 pointY = 31.962; 250 pointY = 31.962;
254 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 251 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
255 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 252 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
256 controlPoint1X = 26.085; 253 controlPoint1X = 26.085;
257 controlPoint1Y = 32.238; 254 controlPoint1Y = 32.238;
258 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 255 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
259 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 256 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
260 controlPoint2X = 25.211; 257 controlPoint2X = 25.211;
261 controlPoint2Y = 31.962; 258 controlPoint2Y = 31.962;
262 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 259 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
263 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 260 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
264 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 261 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
265 pointX = 24.337; 262 pointX = 24.337;
266 pointY = 31.962; 263 pointY = 31.962;
267 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 264 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
268 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 265 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
269 context.lineTo(pointX, pointY); 266 context.lineTo(pointX, pointY);
270 context.closePath(); 267 context.closePath();
271 pointX = 30.639; 268 pointX = 30.639;
272 pointY = 38.402; 269 pointY = 38.402;
273 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 270 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
274 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 271 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
275 context.moveTo(pointX, pointY); 272 context.moveTo(pointX, pointY);
276 context.fillStyle = aColor; 273 context.fillStyle = aColor;
277 context.fill(); 274 context.fill();
278 275
279 context.restore(); 276 context.restore();
280} 277}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/info.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/info.js
index adab74f..fad5c10 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/info.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/info.js
@@ -1,391 +1,388 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //info.js 27 //info.js
31 //i 28 //i
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/7/10 30 //Created by Giulio Cesare Solaroli on 3/7/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Marks_infoWidth = 50.0; 35var kClipperz_PM_UI_Canvas_Marks_infoWidth = 50.0;
39var kClipperz_PM_UI_Canvas_Marks_infoHeight = 50.0; 36var kClipperz_PM_UI_Canvas_Marks_infoHeight = 50.0;
40 37
41function Clipperz_PM_UI_Canvas_Marks_info(canvas, aColor) 38function Clipperz_PM_UI_Canvas_Marks_info(canvas, aColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var path; 43 var path;
47 var pointX; 44 var pointX;
48 var pointY; 45 var pointY;
49 var controlPoint1X; 46 var controlPoint1X;
50 var controlPoint1Y; 47 var controlPoint1Y;
51 var controlPoint2X; 48 var controlPoint2X;
52 var controlPoint2Y; 49 var controlPoint2Y;
53 var color; 50 var color;
54 if (window.devicePixelRatio) 51 if (window.devicePixelRatio)
55 resolution = window.devicePixelRatio; 52 resolution = window.devicePixelRatio;
56 else 53 else
57 resolution = 1.0; 54 resolution = 1.0;
58 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Marks_infoWidth + canvas.height / kClipperz_PM_UI_Canvas_Marks_infoHeight); 55 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Marks_infoWidth + canvas.height / kClipperz_PM_UI_Canvas_Marks_infoHeight);
59 56
60 context.save(); 57 context.save();
61 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Marks_infoWidth, canvas.height / kClipperz_PM_UI_Canvas_Marks_infoHeight); 58 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Marks_infoWidth, canvas.height / kClipperz_PM_UI_Canvas_Marks_infoHeight);
62 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Marks_infoWidth, kClipperz_PM_UI_Canvas_Marks_infoHeight); 59 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Marks_infoWidth, kClipperz_PM_UI_Canvas_Marks_infoHeight);
63 60
64 // Layer 1 61 // Layer 1
65 62
66 alignStroke = 0.0; 63 alignStroke = 0.0;
67 context.beginPath(); 64 context.beginPath();
68 pointX = 30.253; 65 pointX = 30.253;
69 pointY = 37.436; 66 pointY = 37.436;
70 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 67 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
71 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 68 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
72 context.moveTo(pointX, pointY); 69 context.moveTo(pointX, pointY);
73 pointX = 28.505; 70 pointX = 28.505;
74 pointY = 37.022; 71 pointY = 37.022;
75 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 72 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
76 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 73 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
77 context.lineTo(pointX, pointY); 74 context.lineTo(pointX, pointY);
78 pointX = 27.677; 75 pointX = 27.677;
79 pointY = 35.09; 76 pointY = 35.09;
80 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 77 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
81 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 78 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
82 controlPoint1X = 27.953; 79 controlPoint1X = 27.953;
83 controlPoint1Y = 36.792; 80 controlPoint1Y = 36.792;
84 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 81 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
85 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 82 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
86 controlPoint2X = 27.677; 83 controlPoint2X = 27.677;
87 controlPoint2Y = 36.47; 84 controlPoint2Y = 36.47;
88 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 85 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
89 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 86 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
90 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 87 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
91 pointX = 27.631; 88 pointX = 27.631;
92 pointY = 27.546; 89 pointY = 27.546;
93 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 90 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
94 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 91 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
95 controlPoint1X = 27.631; 92 controlPoint1X = 27.631;
96 controlPoint1Y = 32.974; 93 controlPoint1Y = 32.974;
97 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 94 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
98 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 95 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
99 controlPoint2X = 27.631; 96 controlPoint2X = 27.631;
100 controlPoint2Y = 29.892; 97 controlPoint2Y = 29.892;
101 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 98 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
102 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 99 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
103 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 100 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
104 pointX = 27.677; 101 pointX = 27.677;
105 pointY = 19.726; 102 pointY = 19.726;
106 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 103 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
107 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 104 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
108 controlPoint1X = 27.631; 105 controlPoint1X = 27.631;
109 controlPoint1Y = 24.97; 106 controlPoint1Y = 24.97;
110 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 107 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
111 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 108 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
112 controlPoint2X = 27.677; 109 controlPoint2X = 27.677;
113 controlPoint2Y = 21.612; 110 controlPoint2Y = 21.612;
114 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 111 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
115 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 112 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
116 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 113 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
117 pointX = 19.535; 114 pointX = 19.535;
118 pointY = 21.336; 115 pointY = 21.336;
119 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 116 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
120 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 117 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
121 controlPoint1X = 25.331; 118 controlPoint1X = 25.331;
122 controlPoint1Y = 20.692; 119 controlPoint1Y = 20.692;
123 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 120 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
124 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 121 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
125 controlPoint2X = 20.593; 122 controlPoint2X = 20.593;
126 controlPoint2Y = 21.336; 123 controlPoint2Y = 21.336;
127 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 124 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
128 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 125 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
129 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 126 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
130 pointX = 19.443; 127 pointX = 19.443;
131 pointY = 22.762; 128 pointY = 22.762;
132 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 129 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
133 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 130 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
134 controlPoint1X = 19.397; 131 controlPoint1X = 19.397;
135 controlPoint1Y = 21.52; 132 controlPoint1Y = 21.52;
136 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 133 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
137 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 134 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
138 controlPoint2X = 19.305; 135 controlPoint2X = 19.305;
139 controlPoint2Y = 22.532; 136 controlPoint2Y = 22.532;
140 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 137 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
141 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 138 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
142 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 139 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
143 pointX = 21.283; 140 pointX = 21.283;
144 pointY = 23.82; 141 pointY = 23.82;
145 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 142 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
146 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 143 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
147 controlPoint1X = 20.639; 144 controlPoint1X = 20.639;
148 controlPoint1Y = 23.222; 145 controlPoint1Y = 23.222;
149 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 146 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
150 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 147 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
151 controlPoint2X = 20.961; 148 controlPoint2X = 20.961;
152 controlPoint2Y = 23.452; 149 controlPoint2Y = 23.452;
153 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 150 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
154 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 151 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
155 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 152 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
156 pointX = 21.605; 153 pointX = 21.605;
157 pointY = 24.97; 154 pointY = 24.97;
158 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 155 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
159 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 156 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
160 controlPoint1X = 21.513; 157 controlPoint1X = 21.513;
161 controlPoint1Y = 24.05; 158 controlPoint1Y = 24.05;
162 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 159 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
163 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 160 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
164 controlPoint2X = 21.605; 161 controlPoint2X = 21.605;
165 controlPoint2Y = 24.602; 162 controlPoint2Y = 24.602;
166 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 163 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
167 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 164 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
168 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 165 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
169 pointX = 21.651; 166 pointX = 21.651;
170 pointY = 29.156; 167 pointY = 29.156;
171 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 168 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
172 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 169 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
173 controlPoint1X = 21.651; 170 controlPoint1X = 21.651;
174 controlPoint1Y = 25.752; 171 controlPoint1Y = 25.752;
175 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 172 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
176 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 173 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
177 controlPoint2X = 21.651; 174 controlPoint2X = 21.651;
178 controlPoint2Y = 27.592; 175 controlPoint2Y = 27.592;
179 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 176 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
180 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 177 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
181 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 178 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
182 pointX = 21.605; 179 pointX = 21.605;
183 pointY = 35.228; 180 pointY = 35.228;
184 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 181 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
185 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 182 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
186 controlPoint1X = 21.651; 183 controlPoint1X = 21.651;
187 controlPoint1Y = 31.364; 184 controlPoint1Y = 31.364;
188 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 185 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
189 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 186 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
190 controlPoint2X = 21.651; 187 controlPoint2X = 21.651;
191 controlPoint2Y = 34.216; 188 controlPoint2Y = 34.216;
192 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 189 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
193 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 190 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
194 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 191 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
195 pointX = 20.823; 192 pointX = 20.823;
196 pointY = 37.022; 193 pointY = 37.022;
197 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 194 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
198 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 195 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
199 controlPoint1X = 21.559; 196 controlPoint1X = 21.559;
200 controlPoint1Y = 36.332; 197 controlPoint1Y = 36.332;
201 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 198 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
202 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 199 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
203 controlPoint2X = 21.467; 200 controlPoint2X = 21.467;
204 controlPoint2Y = 36.838; 201 controlPoint2Y = 36.838;
205 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 202 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
206 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 203 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
207 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 204 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
208 pointX = 19.121; 205 pointX = 19.121;
209 pointY = 37.436; 206 pointY = 37.436;
210 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 207 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
211 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 208 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
212 controlPoint1X = 20.363; 209 controlPoint1X = 20.363;
213 controlPoint1Y = 37.206; 210 controlPoint1Y = 37.206;
214 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 211 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
215 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 212 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
216 controlPoint2X = 19.857; 213 controlPoint2X = 19.857;
217 controlPoint2Y = 37.298; 214 controlPoint2Y = 37.298;
218 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 215 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
219 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 216 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
220 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 217 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
221 pointX = 19.121; 218 pointX = 19.121;
222 pointY = 39.0; 219 pointY = 39.0;
223 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 220 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
224 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 221 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
225 controlPoint1X = 18.937; 222 controlPoint1X = 18.937;
226 controlPoint1Y = 37.62; 223 controlPoint1Y = 37.62;
227 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 224 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
228 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 225 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
229 controlPoint2X = 18.983; 226 controlPoint2X = 18.983;
230 controlPoint2Y = 38.77; 227 controlPoint2Y = 38.77;
231 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 228 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
232 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 229 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
233 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 230 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
234 pointX = 24.503; 231 pointX = 24.503;
235 pointY = 38.862; 232 pointY = 38.862;
236 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 233 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
237 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 234 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
238 controlPoint1X = 20.271; 235 controlPoint1X = 20.271;
239 controlPoint1Y = 39.0; 236 controlPoint1Y = 39.0;
240 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 237 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
241 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 238 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
242 controlPoint2X = 21.927; 239 controlPoint2X = 21.927;
243 controlPoint2Y = 38.862; 240 controlPoint2Y = 38.862;
244 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 241 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
245 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 242 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
246 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 243 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
247 pointX = 30.023; 244 pointX = 30.023;
248 pointY = 39.0; 245 pointY = 39.0;
249 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 246 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
250 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 247 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
251 controlPoint1X = 27.401; 248 controlPoint1X = 27.401;
252 controlPoint1Y = 38.862; 249 controlPoint1Y = 38.862;
253 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 250 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
254 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 251 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
255 controlPoint2X = 29.149; 252 controlPoint2X = 29.149;
256 controlPoint2Y = 39.0; 253 controlPoint2Y = 39.0;
257 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 254 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
258 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 255 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
259 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 256 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
260 pointX = 30.253; 257 pointX = 30.253;
261 pointY = 37.436; 258 pointY = 37.436;
262 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 259 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
263 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 260 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
264 controlPoint1X = 30.299; 261 controlPoint1X = 30.299;
265 controlPoint1Y = 38.77; 262 controlPoint1Y = 38.77;
266 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 263 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
267 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 264 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
268 controlPoint2X = 30.391; 265 controlPoint2X = 30.391;
269 controlPoint2Y = 37.62; 266 controlPoint2Y = 37.62;
270 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 267 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
271 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 268 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
272 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 269 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
273 pointX = 30.253; 270 pointX = 30.253;
274 pointY = 37.436; 271 pointY = 37.436;
275 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 272 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
276 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 273 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
277 context.lineTo(pointX, pointY); 274 context.lineTo(pointX, pointY);
278 context.closePath(); 275 context.closePath();
279 pointX = 27.493; 276 pointX = 27.493;
280 pointY = 13.976; 277 pointY = 13.976;
281 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 278 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
282 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 279 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
283 context.moveTo(pointX, pointY); 280 context.moveTo(pointX, pointY);
284 pointX = 27.125; 281 pointX = 27.125;
285 pointY = 12.228; 282 pointY = 12.228;
286 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 283 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
287 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 284 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
288 controlPoint1X = 27.493; 285 controlPoint1X = 27.493;
289 controlPoint1Y = 13.608; 286 controlPoint1Y = 13.608;
290 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 287 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
291 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 288 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
292 controlPoint2X = 27.401; 289 controlPoint2X = 27.401;
293 controlPoint2Y = 12.688; 290 controlPoint2Y = 12.688;
294 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 291 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
295 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 292 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
296 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 293 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
297 pointX = 24.963; 294 pointX = 24.963;
298 pointY = 11.63; 295 pointY = 11.63;
299 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 296 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
300 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 297 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
301 controlPoint1X = 26.849; 298 controlPoint1X = 26.849;
302 controlPoint1Y = 11.998; 299 controlPoint1Y = 11.998;
303 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 300 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
304 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 301 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
305 controlPoint2X = 26.113; 302 controlPoint2X = 26.113;
306 controlPoint2Y = 11.63; 303 controlPoint2Y = 11.63;
307 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 304 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
308 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 305 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
309 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 306 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
310 pointX = 21.513; 307 pointX = 21.513;
311 pointY = 12.688; 308 pointY = 12.688;
312 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 309 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
313 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 310 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
314 controlPoint1X = 23.767; 311 controlPoint1X = 23.767;
315 controlPoint1Y = 11.63; 312 controlPoint1Y = 11.63;
316 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 313 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
317 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 314 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
318 controlPoint2X = 22.203; 315 controlPoint2X = 22.203;
319 controlPoint2Y = 12.09; 316 controlPoint2Y = 12.09;
320 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 317 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
321 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 318 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
322 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 319 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
323 pointX = 21.283; 320 pointX = 21.283;
324 pointY = 14.942; 321 pointY = 14.942;
325 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 322 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
326 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 323 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
327 controlPoint1X = 21.145; 324 controlPoint1X = 21.145;
328 controlPoint1Y = 13.148; 325 controlPoint1Y = 13.148;
329 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 326 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
330 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 327 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
331 controlPoint2X = 21.145; 328 controlPoint2X = 21.145;
332 controlPoint2Y = 14.436; 329 controlPoint2Y = 14.436;
333 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 330 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
334 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 331 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
335 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 332 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
336 pointX = 22.801; 333 pointX = 22.801;
337 pointY = 17.012; 334 pointY = 17.012;
338 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 335 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
339 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 336 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
340 controlPoint1X = 21.513; 337 controlPoint1X = 21.513;
341 controlPoint1Y = 15.908; 338 controlPoint1Y = 15.908;
342 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 339 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
343 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 340 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
344 controlPoint2X = 21.973; 341 controlPoint2X = 21.973;
345 controlPoint2Y = 16.69; 342 controlPoint2Y = 16.69;
346 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 343 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
347 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 344 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
348 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 345 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
349 pointX = 26.205; 346 pointX = 26.205;
350 pointY = 16.69; 347 pointY = 16.69;
351 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 348 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
352 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 349 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
353 controlPoint1X = 23.399; 350 controlPoint1X = 23.399;
354 controlPoint1Y = 17.288; 351 controlPoint1Y = 17.288;
355 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 352 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
356 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 353 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
357 controlPoint2X = 25.791; 354 controlPoint2X = 25.791;
358 controlPoint2Y = 17.058; 355 controlPoint2Y = 17.058;
359 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 356 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
360 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 357 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
361 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 358 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
362 pointX = 27.493; 359 pointX = 27.493;
363 pointY = 13.976; 360 pointY = 13.976;
364 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 361 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
365 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 362 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
366 controlPoint1X = 26.941; 363 controlPoint1X = 26.941;
367 controlPoint1Y = 16.046; 364 controlPoint1Y = 16.046;
368 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 365 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
369 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 366 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
370 controlPoint2X = 27.493; 367 controlPoint2X = 27.493;
371 controlPoint2Y = 14.896; 368 controlPoint2Y = 14.896;
372 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 369 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
373 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 370 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
374 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 371 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
375 pointX = 27.493; 372 pointX = 27.493;
376 pointY = 13.976; 373 pointY = 13.976;
377 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 374 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
378 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 375 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
379 context.lineTo(pointX, pointY); 376 context.lineTo(pointX, pointY);
380 context.closePath(); 377 context.closePath();
381 pointX = 30.851; 378 pointX = 30.851;
382 pointY = 38.862; 379 pointY = 38.862;
383 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 380 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
384 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 381 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
385 context.moveTo(pointX, pointY); 382 context.moveTo(pointX, pointY);
386 color = "#FFFFFF"; 383 color = "#FFFFFF";
387 context.fillStyle = color; 384 context.fillStyle = color;
388 context.fill(); 385 context.fill();
389 386
390 context.restore(); 387 context.restore();
391} 388}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/questionMark.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/questionMark.js
index 003c4c2..5842828 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/questionMark.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Marks/questionMark.js
@@ -1,408 +1,405 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //questionMark.js 27 //questionMark.js
31 //? 28 //?
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/7/10 30 //Created by Giulio Cesare Solaroli on 3/7/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Marks_questionMarkWidth = 50.0; 35var kClipperz_PM_UI_Canvas_Marks_questionMarkWidth = 50.0;
39var kClipperz_PM_UI_Canvas_Marks_questionMarkHeight = 50.0; 36var kClipperz_PM_UI_Canvas_Marks_questionMarkHeight = 50.0;
40 37
41function Clipperz_PM_UI_Canvas_Marks_questionMark(canvas, aColor) 38function Clipperz_PM_UI_Canvas_Marks_questionMark(canvas, aColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var path; 43 var path;
47 var pointX; 44 var pointX;
48 var pointY; 45 var pointY;
49 var controlPoint1X; 46 var controlPoint1X;
50 var controlPoint1Y; 47 var controlPoint1Y;
51 var controlPoint2X; 48 var controlPoint2X;
52 var controlPoint2Y; 49 var controlPoint2Y;
53 var color; 50 var color;
54 if (window.devicePixelRatio) 51 if (window.devicePixelRatio)
55 resolution = window.devicePixelRatio; 52 resolution = window.devicePixelRatio;
56 else 53 else
57 resolution = 1.0; 54 resolution = 1.0;
58 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Marks_questionMarkWidth + canvas.height / kClipperz_PM_UI_Canvas_Marks_questionMarkHeight); 55 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Marks_questionMarkWidth + canvas.height / kClipperz_PM_UI_Canvas_Marks_questionMarkHeight);
59 56
60 context.save(); 57 context.save();
61 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Marks_questionMarkWidth, canvas.height / kClipperz_PM_UI_Canvas_Marks_questionMarkHeight); 58 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Marks_questionMarkWidth, canvas.height / kClipperz_PM_UI_Canvas_Marks_questionMarkHeight);
62 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Marks_questionMarkWidth, kClipperz_PM_UI_Canvas_Marks_questionMarkHeight); 59 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Marks_questionMarkWidth, kClipperz_PM_UI_Canvas_Marks_questionMarkHeight);
63 60
64 // Layer 1 61 // Layer 1
65 62
66 alignStroke = 0.0; 63 alignStroke = 0.0;
67 context.beginPath(); 64 context.beginPath();
68 pointX = 24.118; 65 pointX = 24.118;
69 pointY = 24.464; 66 pointY = 24.464;
70 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 67 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
71 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 68 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
72 context.moveTo(pointX, pointY); 69 context.moveTo(pointX, pointY);
73 pointX = 24.854; 70 pointX = 24.854;
74 pointY = 23.406; 71 pointY = 23.406;
75 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 72 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
76 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 73 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
77 controlPoint1X = 24.118; 74 controlPoint1X = 24.118;
78 controlPoint1Y = 24.05; 75 controlPoint1Y = 24.05;
79 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 76 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
80 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 77 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
81 controlPoint2X = 24.44; 78 controlPoint2X = 24.44;
82 controlPoint2Y = 23.636; 79 controlPoint2Y = 23.636;
83 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 80 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
84 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 81 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
85 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 82 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
86 pointX = 29.454; 83 pointX = 29.454;
87 pointY = 20.6; 84 pointY = 20.6;
88 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 85 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
89 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 86 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
90 controlPoint1X = 26.418; 87 controlPoint1X = 26.418;
91 controlPoint1Y = 22.532; 88 controlPoint1Y = 22.532;
92 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 89 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
93 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 90 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
94 controlPoint2X = 28.534; 91 controlPoint2X = 28.534;
95 controlPoint2Y = 21.566; 92 controlPoint2Y = 21.566;
96 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 93 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
97 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 94 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
98 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 95 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
99 pointX = 30.282; 96 pointX = 30.282;
100 pointY = 17.794; 97 pointY = 17.794;
101 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 98 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
102 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 99 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
103 controlPoint1X = 29.868; 100 controlPoint1X = 29.868;
104 controlPoint1Y = 20.232; 101 controlPoint1Y = 20.232;
105 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 102 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
106 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 103 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
107 controlPoint2X = 30.282; 104 controlPoint2X = 30.282;
108 controlPoint2Y = 19.082; 105 controlPoint2Y = 19.082;
109 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 106 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
110 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 107 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
111 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 108 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
112 pointX = 27.2; 109 pointX = 27.2;
113 pointY = 12.688; 110 pointY = 12.688;
114 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 111 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
115 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 112 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
116 controlPoint1X = 30.282; 113 controlPoint1X = 30.282;
117 controlPoint1Y = 16.322; 114 controlPoint1Y = 16.322;
118 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 115 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
119 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 116 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
120 controlPoint2X = 29.454; 117 controlPoint2X = 29.454;
121 controlPoint2Y = 14.344; 118 controlPoint2Y = 14.344;
122 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 119 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
123 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 120 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
124 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 121 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
125 pointX = 21.312; 122 pointX = 21.312;
126 pointY = 10.664; 123 pointY = 10.664;
127 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 124 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
128 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 125 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
129 controlPoint1X = 25.636; 126 controlPoint1X = 25.636;
130 controlPoint1Y = 11.492; 127 controlPoint1Y = 11.492;
131 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 128 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
132 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 129 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
133 controlPoint2X = 23.382; 130 controlPoint2X = 23.382;
134 controlPoint2Y = 10.664; 131 controlPoint2Y = 10.664;
135 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 132 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
136 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 133 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
137 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 134 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
138 pointX = 19.886; 135 pointX = 19.886;
139 pointY = 11.124; 136 pointY = 11.124;
140 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 137 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
141 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 138 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
142 controlPoint1X = 20.898; 139 controlPoint1X = 20.898;
143 controlPoint1Y = 10.664; 140 controlPoint1Y = 10.664;
144 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 141 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
145 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 142 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
146 controlPoint2X = 20.162; 143 controlPoint2X = 20.162;
147 controlPoint2Y = 10.894; 144 controlPoint2Y = 10.894;
148 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 145 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
149 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 146 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
150 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 147 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
151 pointX = 18.0; 148 pointX = 18.0;
152 pointY = 14.666; 149 pointY = 14.666;
153 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 150 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
154 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 151 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
155 controlPoint1X = 19.104; 152 controlPoint1X = 19.104;
156 controlPoint1Y = 11.676; 153 controlPoint1Y = 11.676;
157 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 154 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
158 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 155 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
159 controlPoint2X = 18.0; 156 controlPoint2X = 18.0;
160 controlPoint2Y = 14.068; 157 controlPoint2Y = 14.068;
161 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 158 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
162 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 159 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
163 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 160 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
164 pointX = 18.598; 161 pointX = 18.598;
165 pointY = 15.586; 162 pointY = 15.586;
166 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 163 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
167 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 164 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
168 controlPoint1X = 18.0; 165 controlPoint1X = 18.0;
169 controlPoint1Y = 14.896; 166 controlPoint1Y = 14.896;
170 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 167 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
171 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 168 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
172 controlPoint2X = 18.138; 169 controlPoint2X = 18.138;
173 controlPoint2Y = 15.494; 170 controlPoint2Y = 15.494;
174 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 171 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
175 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 172 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
176 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 173 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
177 pointX = 19.794; 174 pointX = 19.794;
178 pointY = 15.908; 175 pointY = 15.908;
179 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 176 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
180 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 177 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
181 controlPoint1X = 19.012; 178 controlPoint1X = 19.012;
182 controlPoint1Y = 15.678; 179 controlPoint1Y = 15.678;
183 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 180 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
184 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 181 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
185 controlPoint2X = 19.426; 182 controlPoint2X = 19.426;
186 controlPoint2Y = 15.77; 183 controlPoint2Y = 15.77;
187 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 184 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
188 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 185 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
189 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 186 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
190 pointX = 25.36; 187 pointX = 25.36;
191 pointY = 20.002; 188 pointY = 20.002;
192 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 189 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
193 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 190 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
194 controlPoint1X = 22.508; 191 controlPoint1X = 22.508;
195 controlPoint1Y = 16.644; 192 controlPoint1Y = 16.644;
196 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 193 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
197 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 194 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
198 controlPoint2X = 25.36; 195 controlPoint2X = 25.36;
199 controlPoint2Y = 17.886; 196 controlPoint2Y = 17.886;
200 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 197 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
201 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 198 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
202 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 199 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
203 pointX = 24.21; 200 pointX = 24.21;
204 pointY = 21.704; 201 pointY = 21.704;
205 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 202 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
206 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 203 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
207 controlPoint1X = 25.36; 204 controlPoint1X = 25.36;
208 controlPoint1Y = 20.738; 205 controlPoint1Y = 20.738;
209 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 206 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
210 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 207 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
211 controlPoint2X = 25.084; 208 controlPoint2X = 25.084;
212 controlPoint2Y = 21.198; 209 controlPoint2Y = 21.198;
213 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 210 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
214 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 211 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
215 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 212 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
216 pointX = 19.058; 213 pointX = 19.058;
217 pointY = 24.326; 214 pointY = 24.326;
218 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 215 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
219 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 216 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
220 controlPoint1X = 23.106; 217 controlPoint1X = 23.106;
221 controlPoint1Y = 22.348; 218 controlPoint1Y = 22.348;
222 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 219 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
223 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 220 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
224 controlPoint2X = 19.886; 221 controlPoint2X = 19.886;
225 controlPoint2Y = 23.774; 222 controlPoint2Y = 23.774;
226 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 223 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
227 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 224 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
228 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 225 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
229 pointX = 18.506; 226 pointX = 18.506;
230 pointY = 25.936; 227 pointY = 25.936;
231 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 228 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
232 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 229 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
233 controlPoint1X = 18.736; 230 controlPoint1X = 18.736;
234 controlPoint1Y = 24.556; 231 controlPoint1Y = 24.556;
235 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 232 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
236 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 233 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
237 controlPoint2X = 18.506; 234 controlPoint2X = 18.506;
238 controlPoint2Y = 25.338; 235 controlPoint2Y = 25.338;
239 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 236 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
240 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 237 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
241 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 238 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
242 pointX = 20.898; 239 pointX = 20.898;
243 pointY = 29.064; 240 pointY = 29.064;
244 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 241 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
245 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 242 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
246 controlPoint1X = 18.506; 243 controlPoint1X = 18.506;
247 controlPoint1Y = 26.948; 244 controlPoint1Y = 26.948;
248 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 245 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
249 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 246 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
250 controlPoint2X = 19.334; 247 controlPoint2X = 19.334;
251 controlPoint2Y = 28.42; 248 controlPoint2Y = 28.42;
252 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 249 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
253 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 250 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
254 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 251 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
255 pointX = 22.048; 252 pointX = 22.048;
256 pointY = 29.156; 253 pointY = 29.156;
257 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 254 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
258 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 255 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
259 controlPoint1X = 21.22; 256 controlPoint1X = 21.22;
260 controlPoint1Y = 29.156; 257 controlPoint1Y = 29.156;
261 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 258 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
262 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 259 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
263 controlPoint2X = 21.726; 260 controlPoint2X = 21.726;
264 controlPoint2Y = 29.202; 261 controlPoint2Y = 29.202;
265 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 262 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
266 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 263 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
267 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 264 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
268 pointX = 25.268; 265 pointX = 25.268;
269 pointY = 27.592; 266 pointY = 27.592;
270 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 267 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
271 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 268 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
272 controlPoint1X = 22.508; 269 controlPoint1X = 22.508;
273 controlPoint1Y = 29.064; 270 controlPoint1Y = 29.064;
274 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 271 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
275 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 272 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
276 controlPoint2X = 24.9; 273 controlPoint2X = 24.9;
277 controlPoint2Y = 27.96; 274 controlPoint2Y = 27.96;
278 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 275 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
279 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 276 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
280 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 277 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
281 pointX = 25.406; 278 pointX = 25.406;
282 pointY = 26.856; 279 pointY = 26.856;
283 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 280 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
284 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 281 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
285 controlPoint1X = 25.406; 282 controlPoint1X = 25.406;
286 controlPoint1Y = 27.454; 283 controlPoint1Y = 27.454;
287 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 284 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
288 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 285 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
289 controlPoint2X = 25.544; 286 controlPoint2X = 25.544;
290 controlPoint2Y = 26.994; 287 controlPoint2Y = 26.994;
291 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 288 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
292 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 289 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
293 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 290 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
294 pointX = 24.118; 291 pointX = 24.118;
295 pointY = 24.464; 292 pointY = 24.464;
296 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 293 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
297 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 294 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
298 controlPoint1X = 24.578; 295 controlPoint1X = 24.578;
299 controlPoint1Y = 25.936; 296 controlPoint1Y = 25.936;
300 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 297 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
301 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 298 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
302 controlPoint2X = 24.118; 299 controlPoint2X = 24.118;
303 controlPoint2Y = 24.786; 300 controlPoint2Y = 24.786;
304 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 301 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
305 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 302 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
306 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 303 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
307 pointX = 24.118; 304 pointX = 24.118;
308 pointY = 24.464; 305 pointY = 24.464;
309 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 306 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
310 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 307 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
311 context.lineTo(pointX, pointY); 308 context.lineTo(pointX, pointY);
312 context.closePath(); 309 context.closePath();
313 pointX = 23.06; 310 pointX = 23.06;
314 pointY = 31.962; 311 pointY = 31.962;
315 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 312 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
316 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 313 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
317 context.moveTo(pointX, pointY); 314 context.moveTo(pointX, pointY);
318 pointX = 20.53; 315 pointX = 20.53;
319 pointY = 32.928; 316 pointY = 32.928;
320 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 317 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
321 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 318 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
322 controlPoint1X = 22.186; 319 controlPoint1X = 22.186;
323 controlPoint1Y = 31.962; 320 controlPoint1Y = 31.962;
324 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 321 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
325 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 322 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
326 controlPoint2X = 21.22; 323 controlPoint2X = 21.22;
327 controlPoint2Y = 32.33; 324 controlPoint2Y = 32.33;
328 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 325 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
329 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 326 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
330 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 327 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
331 pointX = 19.426; 328 pointX = 19.426;
332 pointY = 35.458; 329 pointY = 35.458;
333 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 330 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
334 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 331 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
335 controlPoint1X = 19.794; 332 controlPoint1X = 19.794;
336 controlPoint1Y = 33.618; 333 controlPoint1Y = 33.618;
337 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 334 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
338 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 335 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
339 controlPoint2X = 19.426; 336 controlPoint2X = 19.426;
340 controlPoint2Y = 34.538; 337 controlPoint2Y = 34.538;
341 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 338 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
342 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 339 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
343 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 340 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
344 pointX = 20.392; 341 pointX = 20.392;
345 pointY = 38.08; 342 pointY = 38.08;
346 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 343 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
347 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 344 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
348 controlPoint1X = 19.426; 345 controlPoint1X = 19.426;
349 controlPoint1Y = 36.47; 346 controlPoint1Y = 36.47;
350 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 347 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
351 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 348 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
352 controlPoint2X = 19.702; 349 controlPoint2X = 19.702;
353 controlPoint2Y = 37.344; 350 controlPoint2Y = 37.344;
354 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 351 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
355 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 352 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
356 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 353 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
357 pointX = 22.738; 354 pointX = 22.738;
358 pointY = 39.0; 355 pointY = 39.0;
359 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 356 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
360 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 357 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
361 controlPoint1X = 21.128; 358 controlPoint1X = 21.128;
362 controlPoint1Y = 38.77; 359 controlPoint1Y = 38.77;
363 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 360 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
364 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 361 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
365 controlPoint2X = 22.048; 362 controlPoint2X = 22.048;
366 controlPoint2Y = 39.0; 363 controlPoint2Y = 39.0;
367 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 364 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
368 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 365 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
369 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 366 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
370 pointX = 25.544; 367 pointX = 25.544;
371 pointY = 38.034; 368 pointY = 38.034;
372 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 369 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
373 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 370 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
374 controlPoint1X = 23.796; 371 controlPoint1X = 23.796;
375 controlPoint1Y = 39.0; 372 controlPoint1Y = 39.0;
376 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 373 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
377 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 374 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
378 controlPoint2X = 24.854; 375 controlPoint2X = 24.854;
379 controlPoint2Y = 38.724; 376 controlPoint2Y = 38.724;
380 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 377 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
381 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 378 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
382 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 379 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
383 pointX = 26.556; 380 pointX = 26.556;
384 pointY = 35.55; 381 pointY = 35.55;
385 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 382 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
386 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 383 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
387 controlPoint1X = 26.188; 384 controlPoint1X = 26.188;
388 controlPoint1Y = 37.344; 385 controlPoint1Y = 37.344;
389 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 386 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
390 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 387 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
391 controlPoint2X = 26.556; 388 controlPoint2X = 26.556;
392 controlPoint2Y = 36.194; 389 controlPoint2Y = 36.194;
393 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 390 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
394 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 391 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
395 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 392 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
396 pointX = 25.452; 393 pointX = 25.452;
397 pointY = 32.744; 394 pointY = 32.744;
398 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 395 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
399 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 396 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
400 controlPoint1X = 26.556; 397 controlPoint1X = 26.556;
401 controlPoint1Y = 34.676; 398 controlPoint1Y = 34.676;
402 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 399 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
403 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 400 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
404 controlPoint2X = 26.326; 401 controlPoint2X = 26.326;
405 controlPoint2Y = 33.618; 402 controlPoint2Y = 33.618;
406 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 403 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
407 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 404 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
408 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 405 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/RegisterButton/normal.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/RegisterButton/normal.js
index 288e0be..2462d0e 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/RegisterButton/normal.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/RegisterButton/normal.js
@@ -1,403 +1,400 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //normal.js 27 //normal.js
31 //normal 28 //normal
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/24/10 30 //Created by Giulio Cesare Solaroli on 3/24/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_RegisterButton_normalWidth = 282.0; 35var kClipperz_PM_UI_Canvas_RegisterButton_normalWidth = 282.0;
39var kClipperz_PM_UI_Canvas_RegisterButton_normalHeight = 93.0; 36var kClipperz_PM_UI_Canvas_RegisterButton_normalHeight = 93.0;
40 37
41function Clipperz_PM_UI_Canvas_RegisterButton_normal(canvas, aBackgroundColor, aDarkBackgroundColor, aLightColor, aDarkColor, aStarColor) 38function Clipperz_PM_UI_Canvas_RegisterButton_normal(canvas, aBackgroundColor, aDarkBackgroundColor, aLightColor, aDarkColor, aStarColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var path; 43 var path;
47 var pointX; 44 var pointX;
48 var pointY; 45 var pointY;
49 var controlPoint1X; 46 var controlPoint1X;
50 var controlPoint1Y; 47 var controlPoint1Y;
51 var controlPoint2X; 48 var controlPoint2X;
52 var controlPoint2Y; 49 var controlPoint2Y;
53 var gradient; 50 var gradient;
54 var color; 51 var color;
55 if (window.devicePixelRatio) 52 if (window.devicePixelRatio)
56 resolution = window.devicePixelRatio; 53 resolution = window.devicePixelRatio;
57 else 54 else
58 resolution = 1.0; 55 resolution = 1.0;
59 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_RegisterButton_normalWidth + canvas.height / kClipperz_PM_UI_Canvas_RegisterButton_normalHeight); 56 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_RegisterButton_normalWidth + canvas.height / kClipperz_PM_UI_Canvas_RegisterButton_normalHeight);
60 57
61 context.save(); 58 context.save();
62 context.scale(canvas.width / kClipperz_PM_UI_Canvas_RegisterButton_normalWidth, canvas.height / kClipperz_PM_UI_Canvas_RegisterButton_normalHeight); 59 context.scale(canvas.width / kClipperz_PM_UI_Canvas_RegisterButton_normalWidth, canvas.height / kClipperz_PM_UI_Canvas_RegisterButton_normalHeight);
63 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_RegisterButton_normalWidth, kClipperz_PM_UI_Canvas_RegisterButton_normalHeight); 60 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_RegisterButton_normalWidth, kClipperz_PM_UI_Canvas_RegisterButton_normalHeight);
64 61
65 // background 62 // background
66 63
67 alignStroke = 0.0; 64 alignStroke = 0.0;
68 context.beginPath(); 65 context.beginPath();
69 pointX = 241.0; 66 pointX = 241.0;
70 pointY = 80.0; 67 pointY = 80.0;
71 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 68 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
72 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 69 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
73 context.moveTo(pointX, pointY); 70 context.moveTo(pointX, pointY);
74 pointX = 274.0; 71 pointX = 274.0;
75 pointY = 47.0; 72 pointY = 47.0;
76 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 73 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
77 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 74 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
78 controlPoint1X = 259.103; 75 controlPoint1X = 259.103;
79 controlPoint1Y = 80.0; 76 controlPoint1Y = 80.0;
80 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 77 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
81 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 78 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
82 controlPoint2X = 274.0; 79 controlPoint2X = 274.0;
83 controlPoint2Y = 65.103; 80 controlPoint2Y = 65.103;
84 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 81 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
85 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 82 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
86 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 83 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
87 pointX = 274.0; 84 pointX = 274.0;
88 pointY = 45.0; 85 pointY = 45.0;
89 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 86 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
90 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 87 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
91 context.lineTo(pointX, pointY); 88 context.lineTo(pointX, pointY);
92 pointX = 241.0; 89 pointX = 241.0;
93 pointY = 12.0; 90 pointY = 12.0;
94 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 91 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
95 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 92 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
96 controlPoint1X = 274.0; 93 controlPoint1X = 274.0;
97 controlPoint1Y = 26.897; 94 controlPoint1Y = 26.897;
98 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 95 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
99 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 96 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
100 controlPoint2X = 259.103; 97 controlPoint2X = 259.103;
101 controlPoint2Y = 12.0; 98 controlPoint2Y = 12.0;
102 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 99 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
103 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 100 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
104 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 101 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
105 pointX = 60.0; 102 pointX = 60.0;
106 pointY = 12.0; 103 pointY = 12.0;
107 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 104 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
108 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 105 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
109 context.lineTo(pointX, pointY); 106 context.lineTo(pointX, pointY);
110 pointX = 27.0; 107 pointX = 27.0;
111 pointY = 45.0; 108 pointY = 45.0;
112 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 109 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
113 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 110 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
114 controlPoint1X = 41.897; 111 controlPoint1X = 41.897;
115 controlPoint1Y = 12.0; 112 controlPoint1Y = 12.0;
116 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 113 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
117 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 114 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
118 controlPoint2X = 27.0; 115 controlPoint2X = 27.0;
119 controlPoint2Y = 26.897; 116 controlPoint2Y = 26.897;
120 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 117 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
121 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 118 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
122 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 119 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
123 pointX = 27.0; 120 pointX = 27.0;
124 pointY = 47.0; 121 pointY = 47.0;
125 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 122 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
126 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 123 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
127 context.lineTo(pointX, pointY); 124 context.lineTo(pointX, pointY);
128 pointX = 60.0; 125 pointX = 60.0;
129 pointY = 80.0; 126 pointY = 80.0;
130 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 127 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
131 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 128 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
132 controlPoint1X = 27.0; 129 controlPoint1X = 27.0;
133 controlPoint1Y = 65.103; 130 controlPoint1Y = 65.103;
134 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 131 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
135 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 132 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
136 controlPoint2X = 41.897; 133 controlPoint2X = 41.897;
137 controlPoint2Y = 80.0; 134 controlPoint2Y = 80.0;
138 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 135 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
139 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 136 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
140 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 137 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
141 pointX = 241.0; 138 pointX = 241.0;
142 pointY = 80.0; 139 pointY = 80.0;
143 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 140 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
144 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 141 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
145 context.lineTo(pointX, pointY); 142 context.lineTo(pointX, pointY);
146 context.closePath(); 143 context.closePath();
147 gradient = context.createLinearGradient(150.5, 12.0, 150.5, 80.0); 144 gradient = context.createLinearGradient(150.5, 12.0, 150.5, 80.0);
148 gradient.addColorStop(0.0, aBackgroundColor); 145 gradient.addColorStop(0.0, aBackgroundColor);
149 gradient.addColorStop(1.0, aDarkBackgroundColor); 146 gradient.addColorStop(1.0, aDarkBackgroundColor);
150 context.fillStyle = gradient; 147 context.fillStyle = gradient;
151 context.fill(); 148 context.fill();
152 149
153 // round 150 // round
154 151
155 alignStroke = 0.0; 152 alignStroke = 0.0;
156 context.beginPath(); 153 context.beginPath();
157 pointX = 44.103; 154 pointX = 44.103;
158 pointY = 4.014; 155 pointY = 4.014;
159 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 156 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
160 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 157 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
161 context.moveTo(pointX, pointY); 158 context.moveTo(pointX, pointY);
162 pointX = 65.629; 159 pointX = 65.629;
163 pointY = 10.515; 160 pointY = 10.515;
164 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 161 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
165 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 162 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
166 controlPoint1X = 51.706; 163 controlPoint1X = 51.706;
167 controlPoint1Y = 4.217; 164 controlPoint1Y = 4.217;
168 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 165 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
169 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 166 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
170 controlPoint2X = 59.185; 167 controlPoint2X = 59.185;
171 controlPoint2Y = 6.475; 168 controlPoint2Y = 6.475;
172 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 169 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
173 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 170 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
174 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 171 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
175 pointX = 78.65; 172 pointX = 78.65;
176 pointY = 70.918; 173 pointY = 70.918;
177 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 174 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
178 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 175 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
179 context.lineTo(pointX, pointY); 176 context.lineTo(pointX, pointY);
180 pointX = 43.0; 177 pointX = 43.0;
181 pointY = 90.0; 178 pointY = 90.0;
182 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 179 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
183 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 180 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
184 controlPoint1X = 70.676; 181 controlPoint1X = 70.676;
185 controlPoint1Y = 82.788; 182 controlPoint1Y = 82.788;
186 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 183 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
187 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 184 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
188 controlPoint2X = 57.23; 185 controlPoint2X = 57.23;
189 controlPoint2Y = 89.817; 186 controlPoint2Y = 89.817;
190 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 187 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
191 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 188 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
192 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 189 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
193 pointX = 0.056; 190 pointX = 0.056;
194 pointY = 44.801; 191 pointY = 44.801;
195 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 192 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
196 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 193 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
197 controlPoint1X = 18.834; 194 controlPoint1X = 18.834;
198 controlPoint1Y = 90.07; 195 controlPoint1Y = 90.07;
199 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 196 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
200 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 197 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
201 controlPoint2X = -1.18; 198 controlPoint2X = -1.18;
202 controlPoint2Y = 68.879; 199 controlPoint2Y = 68.879;
203 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 200 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
204 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 201 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
205 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 202 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
206 pointX = 44.103; 203 pointX = 44.103;
207 pointY = 4.014; 204 pointY = 4.014;
208 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 205 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
209 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 206 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
210 controlPoint1X = 1.242; 207 controlPoint1X = 1.242;
211 controlPoint1Y = 21.708; 208 controlPoint1Y = 21.708;
212 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 209 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
213 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 210 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
214 controlPoint2X = 21.202; 211 controlPoint2X = 21.202;
215 controlPoint2Y = 3.72; 212 controlPoint2Y = 3.72;
216 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 213 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
217 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 214 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
218 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 215 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
219 pointX = 44.103; 216 pointX = 44.103;
220 pointY = 4.014; 217 pointY = 4.014;
221 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 218 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
222 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 219 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
223 context.lineTo(pointX, pointY); 220 context.lineTo(pointX, pointY);
224 context.closePath(); 221 context.closePath();
225 gradient = context.createLinearGradient(39.326, 90, 39.326, 4.011); 222 gradient = context.createLinearGradient(39.326, 90, 39.326, 4.011);
226 gradient.addColorStop(0.0, aDarkColor); 223 gradient.addColorStop(0.0, aDarkColor);
227 gradient.addColorStop(1.0, aLightColor); 224 gradient.addColorStop(1.0, aLightColor);
228 context.fillStyle = gradient; 225 context.fillStyle = gradient;
229 context.fill(); 226 context.fill();
230 227
231 // * 228 // *
232 229
233 alignStroke = 0.0; 230 alignStroke = 0.0;
234 context.beginPath(); 231 context.beginPath();
235 pointX = 23.983; 232 pointX = 23.983;
236 pointY = 35.944; 233 pointY = 35.944;
237 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 234 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
238 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 235 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
239 context.moveTo(pointX, pointY); 236 context.moveTo(pointX, pointY);
240 pointX = 37.25; 237 pointX = 37.25;
241 pointY = 40.261; 238 pointY = 40.261;
242 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 239 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
243 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 240 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
244 context.lineTo(pointX, pointY); 241 context.lineTo(pointX, pointY);
245 pointX = 37.25; 242 pointX = 37.25;
246 pointY = 24.963; 243 pointY = 24.963;
247 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 244 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
248 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 245 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
249 context.lineTo(pointX, pointY); 246 context.lineTo(pointX, pointY);
250 pointX = 48.231; 247 pointX = 48.231;
251 pointY = 24.963; 248 pointY = 24.963;
252 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 249 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
253 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 250 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
254 context.lineTo(pointX, pointY); 251 context.lineTo(pointX, pointY);
255 pointX = 48.231; 252 pointX = 48.231;
256 pointY = 40.261; 253 pointY = 40.261;
257 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 254 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
258 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 255 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
259 context.lineTo(pointX, pointY); 256 context.lineTo(pointX, pointY);
260 pointX = 61.498; 257 pointX = 61.498;
261 pointY = 35.944; 258 pointY = 35.944;
262 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 259 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
263 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 260 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
264 context.lineTo(pointX, pointY); 261 context.lineTo(pointX, pointY);
265 pointX = 64.481; 262 pointX = 64.481;
266 pointY = 45.402; 263 pointY = 45.402;
267 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 264 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
268 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 265 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
269 context.lineTo(pointX, pointY); 266 context.lineTo(pointX, pointY);
270 pointX = 50.961; 267 pointX = 50.961;
271 pointY = 49.592; 268 pointY = 49.592;
272 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 269 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
273 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 270 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
274 context.lineTo(pointX, pointY); 271 context.lineTo(pointX, pointY);
275 pointX = 59.784; 272 pointX = 59.784;
276 pointY = 62.224; 273 pointY = 62.224;
277 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 274 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
278 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 275 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
279 context.lineTo(pointX, pointY); 276 context.lineTo(pointX, pointY);
280 pointX = 51.659; 277 pointX = 51.659;
281 pointY = 68.0; 278 pointY = 68.0;
282 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 279 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
283 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 280 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
284 context.lineTo(pointX, pointY); 281 context.lineTo(pointX, pointY);
285 pointX = 42.836; 282 pointX = 42.836;
286 pointY = 56.066; 283 pointY = 56.066;
287 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 284 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
288 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 285 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
289 context.lineTo(pointX, pointY); 286 context.lineTo(pointX, pointY);
290 pointX = 33.759; 287 pointX = 33.759;
291 pointY = 68.0; 288 pointY = 68.0;
292 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 289 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
293 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 290 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
294 context.lineTo(pointX, pointY); 291 context.lineTo(pointX, pointY);
295 pointX = 25.634; 292 pointX = 25.634;
296 pointY = 62.224; 293 pointY = 62.224;
297 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 294 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
298 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 295 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
299 context.lineTo(pointX, pointY); 296 context.lineTo(pointX, pointY);
300 pointX = 34.521; 297 pointX = 34.521;
301 pointY = 49.592; 298 pointY = 49.592;
302 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 299 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
303 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 300 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
304 context.lineTo(pointX, pointY); 301 context.lineTo(pointX, pointY);
305 pointX = 21.0; 302 pointX = 21.0;
306 pointY = 45.402; 303 pointY = 45.402;
307 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 304 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
308 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 305 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
309 context.lineTo(pointX, pointY); 306 context.lineTo(pointX, pointY);
310 pointX = 23.983; 307 pointX = 23.983;
311 pointY = 35.944; 308 pointY = 35.944;
312 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 309 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
313 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 310 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
314 context.lineTo(pointX, pointY); 311 context.lineTo(pointX, pointY);
315 context.closePath(); 312 context.closePath();
316 pointX = 68.607; 313 pointX = 68.607;
317 pointY = 119.099; 314 pointY = 119.099;
318 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 315 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
319 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 316 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
320 context.moveTo(pointX, pointY); 317 context.moveTo(pointX, pointY);
321 context.fillStyle = aStarColor; 318 context.fillStyle = aStarColor;
322 context.fill(); 319 context.fill();
323 320
324 alignStroke = 0.0; 321 alignStroke = 0.0;
325 context.beginPath(); 322 context.beginPath();
326 pointX = 212.0; 323 pointX = 212.0;
327 pointY = 125.0; 324 pointY = 125.0;
328 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 325 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
329 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 326 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
330 context.moveTo(pointX, pointY); 327 context.moveTo(pointX, pointY);
331 pointX = 213.0; 328 pointX = 213.0;
332 pointY = 125.0; 329 pointY = 125.0;
333 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 330 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
334 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 331 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
335 context.lineTo(pointX, pointY); 332 context.lineTo(pointX, pointY);
336 pointX = 212.5; 333 pointX = 212.5;
337 pointY = 124.0; 334 pointY = 124.0;
338 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 335 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
339 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 336 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
340 context.lineTo(pointX, pointY); 337 context.lineTo(pointX, pointY);
341 pointX = 212.0; 338 pointX = 212.0;
342 pointY = 125.0; 339 pointY = 125.0;
343 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 340 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
344 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 341 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
345 context.lineTo(pointX, pointY); 342 context.lineTo(pointX, pointY);
346 context.closePath(); 343 context.closePath();
347 gradient = context.createLinearGradient(212.5, 125.0, 212.5, 124.0); 344 gradient = context.createLinearGradient(212.5, 125.0, 212.5, 124.0);
348 color = "#FFFFFF"; 345 color = "#FFFFFF";
349 gradient.addColorStop(0.0, color); 346 gradient.addColorStop(0.0, color);
350 color = "#A9A9A9"; 347 color = "#A9A9A9";
351 gradient.addColorStop(1.0, color); 348 gradient.addColorStop(1.0, color);
352 context.fillStyle = gradient; 349 context.fillStyle = gradient;
353 context.fill(); 350 context.fill();
354 351
355 // flip 352 // flip
356 353
357 // Setup for Shadow Effect 354 // Setup for Shadow Effect
358 color = "rgba(0.0%, 0.0%, 0.0%, 0.5)"; 355 color = "rgba(0.0%, 0.0%, 0.0%, 0.5)";
359 context.save(); 356 context.save();
360 context.shadowColor = color; 357 context.shadowColor = color;
361 context.shadowBlur = 0.0; 358 context.shadowBlur = 0.0;
362 context.shadowOffsetX = 2.0 * Math.cos(8.377) * resolution; 359 context.shadowOffsetX = 2.0 * Math.cos(8.377) * resolution;
363 context.shadowOffsetY = 2.0 * Math.sin(8.377) * resolution; 360 context.shadowOffsetY = 2.0 * Math.sin(8.377) * resolution;
364 361
365 // round 362 // round
366 363
367 alignStroke = 0.0; 364 alignStroke = 0.0;
368 context.beginPath(); 365 context.beginPath();
369 pointX = 78.506; 366 pointX = 78.506;
370 pointY = 70.251; 367 pointY = 70.251;
371 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 368 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
372 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 369 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
373 context.moveTo(pointX, pointY); 370 context.moveTo(pointX, pointY);
374 pointX = 66.155; 371 pointX = 66.155;
375 pointY = 12.954; 372 pointY = 12.954;
376 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 373 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
377 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 374 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
378 controlPoint1X = 59.899; 375 controlPoint1X = 59.899;
379 controlPoint1Y = 57.427; 376 controlPoint1Y = 57.427;
380 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 377 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
381 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 378 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
382 controlPoint2X = 54.678; 379 controlPoint2X = 54.678;
383 controlPoint2Y = 32.277; 380 controlPoint2Y = 32.277;
384 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 381 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
385 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 382 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
386 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 383 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
387 pointX = 78.506; 384 pointX = 78.506;
388 pointY = 70.251; 385 pointY = 70.251;
389 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 386 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
390 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 387 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
391 context.lineTo(pointX, pointY); 388 context.lineTo(pointX, pointY);
392 context.closePath(); 389 context.closePath();
393 gradient = context.createLinearGradient(69.301, 70.251, 69.301, 12.954); 390 gradient = context.createLinearGradient(69.301, 70.251, 69.301, 12.954);
394 gradient.addColorStop(0.0, aDarkColor); 391 gradient.addColorStop(0.0, aDarkColor);
395 gradient.addColorStop(1.0, aLightColor); 392 gradient.addColorStop(1.0, aLightColor);
396 context.fillStyle = gradient; 393 context.fillStyle = gradient;
397 context.fill(); 394 context.fill();
398 395
399 // Shadow Effect 396 // Shadow Effect
400 context.restore(); 397 context.restore();
401 398
402 context.restore(); 399 context.restore();
403} 400}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Star/normal.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Star/normal.js
index e70e3b5..cf475c6 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Star/normal.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Star/normal.js
@@ -1,153 +1,150 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //normal.js 27 //normal.js
31 //normal 28 //normal
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/15/10 30 //Created by Giulio Cesare Solaroli on 3/15/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Star_normalWidth = 46.0; 35var kClipperz_PM_UI_Canvas_Star_normalWidth = 46.0;
39var kClipperz_PM_UI_Canvas_Star_normalHeight = 46.0; 36var kClipperz_PM_UI_Canvas_Star_normalHeight = 46.0;
40 37
41function Clipperz_PM_UI_Canvas_Star_normal(canvas, aColor) 38function Clipperz_PM_UI_Canvas_Star_normal(canvas, aColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var path; 43 var path;
47 var pointX; 44 var pointX;
48 var pointY; 45 var pointY;
49 if (window.devicePixelRatio) 46 if (window.devicePixelRatio)
50 resolution = window.devicePixelRatio; 47 resolution = window.devicePixelRatio;
51 else 48 else
52 resolution = 1.0; 49 resolution = 1.0;
53 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Star_normalWidth + canvas.height / kClipperz_PM_UI_Canvas_Star_normalHeight); 50 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Star_normalWidth + canvas.height / kClipperz_PM_UI_Canvas_Star_normalHeight);
54 51
55 context.save(); 52 context.save();
56 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Star_normalWidth, canvas.height / kClipperz_PM_UI_Canvas_Star_normalHeight); 53 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Star_normalWidth, canvas.height / kClipperz_PM_UI_Canvas_Star_normalHeight);
57 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Star_normalWidth, kClipperz_PM_UI_Canvas_Star_normalHeight); 54 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Star_normalWidth, kClipperz_PM_UI_Canvas_Star_normalHeight);
58 55
59 // * 56 // *
60 57
61 alignStroke = 0.0; 58 alignStroke = 0.0;
62 context.beginPath(); 59 context.beginPath();
63 pointX = 8.613; 60 pointX = 8.613;
64 pointY = 15.583; 61 pointY = 15.583;
65 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 62 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
66 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 63 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
67 context.moveTo(pointX, pointY); 64 context.moveTo(pointX, pointY);
68 pointX = 18.563; 65 pointX = 18.563;
69 pointY = 18.821; 66 pointY = 18.821;
70 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 67 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
71 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 68 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
72 context.lineTo(pointX, pointY); 69 context.lineTo(pointX, pointY);
73 pointX = 18.563; 70 pointX = 18.563;
74 pointY = 7.347; 71 pointY = 7.347;
75 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 72 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
76 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 73 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
77 context.lineTo(pointX, pointY); 74 context.lineTo(pointX, pointY);
78 pointX = 26.799; 75 pointX = 26.799;
79 pointY = 7.347; 76 pointY = 7.347;
80 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 77 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
81 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 78 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
82 context.lineTo(pointX, pointY); 79 context.lineTo(pointX, pointY);
83 pointX = 26.799; 80 pointX = 26.799;
84 pointY = 18.821; 81 pointY = 18.821;
85 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 82 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
86 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 83 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
87 context.lineTo(pointX, pointY); 84 context.lineTo(pointX, pointY);
88 pointX = 36.749; 85 pointX = 36.749;
89 pointY = 15.583; 86 pointY = 15.583;
90 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 87 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
91 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 88 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
92 context.lineTo(pointX, pointY); 89 context.lineTo(pointX, pointY);
93 pointX = 38.986; 90 pointX = 38.986;
94 pointY = 22.677; 91 pointY = 22.677;
95 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 92 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
96 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 93 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
97 context.lineTo(pointX, pointY); 94 context.lineTo(pointX, pointY);
98 pointX = 28.846; 95 pointX = 28.846;
99 pointY = 25.819; 96 pointY = 25.819;
100 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 97 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
101 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 98 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
102 context.lineTo(pointX, pointY); 99 context.lineTo(pointX, pointY);
103 pointX = 35.463; 100 pointX = 35.463;
104 pointY = 35.293; 101 pointY = 35.293;
105 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 102 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
106 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 103 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
107 context.lineTo(pointX, pointY); 104 context.lineTo(pointX, pointY);
108 pointX = 29.369; 105 pointX = 29.369;
109 pointY = 39.625; 106 pointY = 39.625;
110 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 107 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
111 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 108 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
112 context.lineTo(pointX, pointY); 109 context.lineTo(pointX, pointY);
113 pointX = 22.752; 110 pointX = 22.752;
114 pointY = 30.675; 111 pointY = 30.675;
115 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 112 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
116 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 113 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
117 context.lineTo(pointX, pointY); 114 context.lineTo(pointX, pointY);
118 pointX = 15.944; 115 pointX = 15.944;
119 pointY = 39.625; 116 pointY = 39.625;
120 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 117 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
121 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 118 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
122 context.lineTo(pointX, pointY); 119 context.lineTo(pointX, pointY);
123 pointX = 9.85; 120 pointX = 9.85;
124 pointY = 35.293; 121 pointY = 35.293;
125 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 122 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
126 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 123 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
127 context.lineTo(pointX, pointY); 124 context.lineTo(pointX, pointY);
128 pointX = 16.515; 125 pointX = 16.515;
129 pointY = 25.819; 126 pointY = 25.819;
130 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 127 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
131 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 128 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
132 context.lineTo(pointX, pointY); 129 context.lineTo(pointX, pointY);
133 pointX = 6.375; 130 pointX = 6.375;
134 pointY = 22.677; 131 pointY = 22.677;
135 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 132 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
136 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 133 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
137 context.lineTo(pointX, pointY); 134 context.lineTo(pointX, pointY);
138 pointX = 8.613; 135 pointX = 8.613;
139 pointY = 15.583; 136 pointY = 15.583;
140 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 137 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
141 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 138 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
142 context.lineTo(pointX, pointY); 139 context.lineTo(pointX, pointY);
143 context.closePath(); 140 context.closePath();
144 pointX = 42.081; 141 pointX = 42.081;
145 pointY = 77.949; 142 pointY = 77.949;
146 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 143 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
147 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 144 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
148 context.moveTo(pointX, pointY); 145 context.moveTo(pointX, pointY);
149 context.fillStyle = aColor; 146 context.fillStyle = aColor;
150 context.fill(); 147 context.fill();
151 148
152 context.restore(); 149 context.restore();
153} 150}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Tips/close.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Tips/close.js
index 216fd24..cd7ed90 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Tips/close.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Tips/close.js
@@ -1,156 +1,153 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //close.js 27 //close.js
31 //close 28 //close
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/14/10 30 //Created by Giulio Cesare Solaroli on 3/14/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Tips_closeWidth = 310.0; 35var kClipperz_PM_UI_Canvas_Tips_closeWidth = 310.0;
39var kClipperz_PM_UI_Canvas_Tips_closeHeight = 6.0; 36var kClipperz_PM_UI_Canvas_Tips_closeHeight = 6.0;
40 37
41function Clipperz_PM_UI_Canvas_Tips_close(canvas, aColor, aBackgroundColor) 38function Clipperz_PM_UI_Canvas_Tips_close(canvas, aColor, aBackgroundColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var path; 43 var path;
47 var pointX; 44 var pointX;
48 var pointY; 45 var pointY;
49 if (window.devicePixelRatio) 46 if (window.devicePixelRatio)
50 resolution = window.devicePixelRatio; 47 resolution = window.devicePixelRatio;
51 else 48 else
52 resolution = 1.0; 49 resolution = 1.0;
53 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Tips_closeWidth + canvas.height / kClipperz_PM_UI_Canvas_Tips_closeHeight); 50 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Tips_closeWidth + canvas.height / kClipperz_PM_UI_Canvas_Tips_closeHeight);
54 51
55 context.save(); 52 context.save();
56 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Tips_closeWidth, canvas.height / kClipperz_PM_UI_Canvas_Tips_closeHeight); 53 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Tips_closeWidth, canvas.height / kClipperz_PM_UI_Canvas_Tips_closeHeight);
57 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Tips_closeWidth, kClipperz_PM_UI_Canvas_Tips_closeHeight); 54 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Tips_closeWidth, kClipperz_PM_UI_Canvas_Tips_closeHeight);
58 55
59 // background 56 // background
60 57
61 alignStroke = 0.0; 58 alignStroke = 0.0;
62 context.beginPath(); 59 context.beginPath();
63 pointX = 310.0; 60 pointX = 310.0;
64 pointY = 6.0; 61 pointY = 6.0;
65 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 62 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
66 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 63 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
67 context.moveTo(pointX, pointY); 64 context.moveTo(pointX, pointY);
68 pointX = 310.0; 65 pointX = 310.0;
69 pointY = 0.0; 66 pointY = 0.0;
70 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 67 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
71 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 68 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
72 context.lineTo(pointX, pointY); 69 context.lineTo(pointX, pointY);
73 pointX = 0.0; 70 pointX = 0.0;
74 pointY = 0.0; 71 pointY = 0.0;
75 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 72 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
76 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 73 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
77 context.lineTo(pointX, pointY); 74 context.lineTo(pointX, pointY);
78 pointX = 0.0; 75 pointX = 0.0;
79 pointY = 6.0; 76 pointY = 6.0;
80 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 77 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
81 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 78 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
82 context.lineTo(pointX, pointY); 79 context.lineTo(pointX, pointY);
83 pointX = 310.0; 80 pointX = 310.0;
84 pointY = 6.0; 81 pointY = 6.0;
85 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 82 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
86 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 83 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
87 context.lineTo(pointX, pointY); 84 context.lineTo(pointX, pointY);
88 context.closePath(); 85 context.closePath();
89 context.fillStyle = aBackgroundColor; 86 context.fillStyle = aBackgroundColor;
90 context.fill(); 87 context.fill();
91 88
92 // grid 89 // grid
93 90
94 // background 91 // background
95 92
96 alignStroke = 0.0; 93 alignStroke = 0.0;
97 context.beginPath(); 94 context.beginPath();
98 pointX = 310.0; 95 pointX = 310.0;
99 pointY = 6.0; 96 pointY = 6.0;
100 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 97 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
101 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 98 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
102 context.moveTo(pointX, pointY); 99 context.moveTo(pointX, pointY);
103 pointX = 310.0; 100 pointX = 310.0;
104 pointY = 0.0; 101 pointY = 0.0;
105 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 102 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
106 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 103 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
107 context.lineTo(pointX, pointY); 104 context.lineTo(pointX, pointY);
108 pointX = 0.0; 105 pointX = 0.0;
109 pointY = 0.0; 106 pointY = 0.0;
110 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 107 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
111 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 108 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
112 context.lineTo(pointX, pointY); 109 context.lineTo(pointX, pointY);
113 pointX = 0.0; 110 pointX = 0.0;
114 pointY = 6.0; 111 pointY = 6.0;
115 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 112 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
116 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 113 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
117 context.lineTo(pointX, pointY); 114 context.lineTo(pointX, pointY);
118 pointX = 310.0; 115 pointX = 310.0;
119 pointY = 6.0; 116 pointY = 6.0;
120 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 117 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
121 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 118 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
122 context.lineTo(pointX, pointY); 119 context.lineTo(pointX, pointY);
123 context.closePath(); 120 context.closePath();
124 context.fillStyle = aBackgroundColor; 121 context.fillStyle = aBackgroundColor;
125 context.fill(); 122 context.fill();
126 123
127 // toggle 124 // toggle
128 125
129 alignStroke = 0.0; 126 alignStroke = 0.0;
130 context.beginPath(); 127 context.beginPath();
131 pointX = 149.0; 128 pointX = 149.0;
132 pointY = 6.0; 129 pointY = 6.0;
133 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 130 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
134 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 131 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
135 context.moveTo(pointX, pointY); 132 context.moveTo(pointX, pointY);
136 pointX = 161.0; 133 pointX = 161.0;
137 pointY = 6.0; 134 pointY = 6.0;
138 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 135 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
139 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 136 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
140 context.lineTo(pointX, pointY); 137 context.lineTo(pointX, pointY);
141 pointX = 155.0; 138 pointX = 155.0;
142 pointY = 0.0; 139 pointY = 0.0;
143 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 140 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
144 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 141 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
145 context.lineTo(pointX, pointY); 142 context.lineTo(pointX, pointY);
146 pointX = 149.0; 143 pointX = 149.0;
147 pointY = 6.0; 144 pointY = 6.0;
148 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 145 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
149 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 146 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
150 context.lineTo(pointX, pointY); 147 context.lineTo(pointX, pointY);
151 context.closePath(); 148 context.closePath();
152 context.fillStyle = aColor; 149 context.fillStyle = aColor;
153 context.fill(); 150 context.fill();
154 151
155 context.restore(); 152 context.restore();
156} 153}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Tips/open.js b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Tips/open.js
index f1bdaa9..30c1c69 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Canvas/Tips/open.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Canvas/Tips/open.js
@@ -1,163 +1,160 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29// 26//
30 //open.js 27 //open.js
31 //open 28 //open
32// 29//
33 //Created by Giulio Cesare Solaroli on 3/14/10 30 //Created by Giulio Cesare Solaroli on 3/14/10
34 //Copyright 2010 Clipperz 31 //Copyright 2010 Clipperz
35 //This code was generated by Opacity. You may use or modify it in any way. 32 //This code was generated by Opacity. You may use or modify it in any way.
36// 33//
37 34
38var kClipperz_PM_UI_Canvas_Tips_openWidth = 310.0; 35var kClipperz_PM_UI_Canvas_Tips_openWidth = 310.0;
39var kClipperz_PM_UI_Canvas_Tips_openHeight = 6.0; 36var kClipperz_PM_UI_Canvas_Tips_openHeight = 6.0;
40 37
41function Clipperz_PM_UI_Canvas_Tips_open(canvas, aColor, aBackgroundColor) 38function Clipperz_PM_UI_Canvas_Tips_open(canvas, aColor, aBackgroundColor)
42{ 39{
43 var context = canvas.getContext("2d"); 40 var context = canvas.getContext("2d");
44 var alignStroke; 41 var alignStroke;
45 var resolution; 42 var resolution;
46 var path; 43 var path;
47 var pointX; 44 var pointX;
48 var pointY; 45 var pointY;
49 var color; 46 var color;
50 if (window.devicePixelRatio) 47 if (window.devicePixelRatio)
51 resolution = window.devicePixelRatio; 48 resolution = window.devicePixelRatio;
52 else 49 else
53 resolution = 1.0; 50 resolution = 1.0;
54 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Tips_openWidth + canvas.height / kClipperz_PM_UI_Canvas_Tips_openHeight); 51 resolution *= 0.5 * (canvas.width / kClipperz_PM_UI_Canvas_Tips_openWidth + canvas.height / kClipperz_PM_UI_Canvas_Tips_openHeight);
55 52
56 context.save(); 53 context.save();
57 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Tips_openWidth, canvas.height / kClipperz_PM_UI_Canvas_Tips_openHeight); 54 context.scale(canvas.width / kClipperz_PM_UI_Canvas_Tips_openWidth, canvas.height / kClipperz_PM_UI_Canvas_Tips_openHeight);
58 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Tips_openWidth, kClipperz_PM_UI_Canvas_Tips_openHeight); 55 context.clearRect(0.0, 0.0, kClipperz_PM_UI_Canvas_Tips_openWidth, kClipperz_PM_UI_Canvas_Tips_openHeight);
59 56
60 // background 57 // background
61 58
62 alignStroke = 0.0; 59 alignStroke = 0.0;
63 context.beginPath(); 60 context.beginPath();
64 pointX = 310.0; 61 pointX = 310.0;
65 pointY = 6.0; 62 pointY = 6.0;
66 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 63 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
67 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 64 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
68 context.moveTo(pointX, pointY); 65 context.moveTo(pointX, pointY);
69 pointX = 310.0; 66 pointX = 310.0;
70 pointY = 0.0; 67 pointY = 0.0;
71 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 68 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
72 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 69 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
73 context.lineTo(pointX, pointY); 70 context.lineTo(pointX, pointY);
74 pointX = 0.0; 71 pointX = 0.0;
75 pointY = 0.0; 72 pointY = 0.0;
76 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 73 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
77 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 74 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
78 context.lineTo(pointX, pointY); 75 context.lineTo(pointX, pointY);
79 pointX = 0.0; 76 pointX = 0.0;
80 pointY = 6.0; 77 pointY = 6.0;
81 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 78 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
82 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 79 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
83 context.lineTo(pointX, pointY); 80 context.lineTo(pointX, pointY);
84 pointX = 310.0; 81 pointX = 310.0;
85 pointY = 6.0; 82 pointY = 6.0;
86 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 83 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
87 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 84 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
88 context.lineTo(pointX, pointY); 85 context.lineTo(pointX, pointY);
89 context.closePath(); 86 context.closePath();
90 context.fillStyle = aBackgroundColor; 87 context.fillStyle = aBackgroundColor;
91 context.fill(); 88 context.fill();
92 89
93 // grid 90 // grid
94 91
95 // background 92 // background
96 93
97 alignStroke = 0.0; 94 alignStroke = 0.0;
98 context.beginPath(); 95 context.beginPath();
99 pointX = 310.0; 96 pointX = 310.0;
100 pointY = 6.0; 97 pointY = 6.0;
101 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 98 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
102 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 99 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
103 context.moveTo(pointX, pointY); 100 context.moveTo(pointX, pointY);
104 pointX = 310.0; 101 pointX = 310.0;
105 pointY = 0.0; 102 pointY = 0.0;
106 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 103 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
107 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 104 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
108 context.lineTo(pointX, pointY); 105 context.lineTo(pointX, pointY);
109 pointX = 0.0; 106 pointX = 0.0;
110 pointY = 0.0; 107 pointY = 0.0;
111 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 108 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
112 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 109 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
113 context.lineTo(pointX, pointY); 110 context.lineTo(pointX, pointY);
114 pointX = 0.0; 111 pointX = 0.0;
115 pointY = 6.0; 112 pointY = 6.0;
116 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 113 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
117 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 114 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
118 context.lineTo(pointX, pointY); 115 context.lineTo(pointX, pointY);
119 pointX = 310.0; 116 pointX = 310.0;
120 pointY = 6.0; 117 pointY = 6.0;
121 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 118 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
122 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 119 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
123 context.lineTo(pointX, pointY); 120 context.lineTo(pointX, pointY);
124 context.closePath(); 121 context.closePath();
125 context.fillStyle = aBackgroundColor; 122 context.fillStyle = aBackgroundColor;
126 context.fill(); 123 context.fill();
127 124
128 // Layer 1 125 // Layer 1
129 126
130 alignStroke = 0.0; 127 alignStroke = 0.0;
131 context.save(); 128 context.save();
132 context.translate(155.0, 3.0); 129 context.translate(155.0, 3.0);
133 context.rotate(-3.142); 130 context.rotate(-3.142);
134 context.translate(-155.0, -3.0); 131 context.translate(-155.0, -3.0);
135 context.beginPath(); 132 context.beginPath();
136 pointX = 149.0; 133 pointX = 149.0;
137 pointY = 6.0; 134 pointY = 6.0;
138 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 135 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
139 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 136 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
140 context.moveTo(pointX, pointY); 137 context.moveTo(pointX, pointY);
141 pointX = 161.0; 138 pointX = 161.0;
142 pointY = 6.0; 139 pointY = 6.0;
143 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 140 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
144 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 141 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
145 context.lineTo(pointX, pointY); 142 context.lineTo(pointX, pointY);
146 pointX = 155.0; 143 pointX = 155.0;
147 pointY = 0.0; 144 pointY = 0.0;
148 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 145 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
149 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 146 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
150 context.lineTo(pointX, pointY); 147 context.lineTo(pointX, pointY);
151 pointX = 149.0; 148 pointX = 149.0;
152 pointY = 6.0; 149 pointY = 6.0;
153 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 150 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
154 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 151 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
155 context.lineTo(pointX, pointY); 152 context.lineTo(pointX, pointY);
156 context.closePath(); 153 context.closePath();
157 color = "#FFFFFF"; 154 color = "#FFFFFF";
158 context.fillStyle = color; 155 context.fillStyle = color;
159 context.fill(); 156 context.fill();
160 context.restore(); 157 context.restore();
161 158
162 context.restore(); 159 context.restore();
163} 160}
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/BaseComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/BaseComponent.js
index 26f2fc4..2a03fdf 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/BaseComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/BaseComponent.js
@@ -1,408 +1,405 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31//############################################################################# 28//#############################################################################
32 29
33var _Clipperz_PM_Components_base_id_ = 0; 30var _Clipperz_PM_Components_base_id_ = 0;
34 31
35//############################################################################# 32//#############################################################################
36 33
37Clipperz.PM.UI.Common.Components.BaseComponent = function(args) { 34Clipperz.PM.UI.Common.Components.BaseComponent = function(args) {
38 args = args || {}; 35 args = args || {};
39 Clipperz.PM.UI.Common.Components.BaseComponent.superclass.constructor.call(this, args); 36 Clipperz.PM.UI.Common.Components.BaseComponent.superclass.constructor.call(this, args);
40 37
41 this._element = args.element || null; 38 this._element = args.element || null;
42 this._ids = {}; 39 this._ids = {};
43 40
44 this._slots = {}; 41 this._slots = {};
45 this._slotComponents = {}; 42 this._slotComponents = {};
46 43
47 this._components = {}; 44 this._components = {};
48 45
49 this._cachedSlots = {}; 46 this._cachedSlots = {};
50 47
51 this._isModal = false; 48 this._isModal = false;
52 49
53 this._isActive = false; 50 this._isActive = false;
54 this._elementUsedToEnterModalState; 51 this._elementUsedToEnterModalState;
55 52
56 this._isFullyRendered = false; 53 this._isFullyRendered = false;
57 this._renderingWaitingQueue = []; 54 this._renderingWaitingQueue = [];
58 55
59 //this._slots = { 56 //this._slots = {
60 // 'header':'header', 57 // 'header':'header',
61 // 'body': 'body', 58 // 'body': 'body',
62 // 'footer':'footer' 59 // 'footer':'footer'
63 //}; 60 //};
64 61
65 return this; 62 return this;
66} 63}
67 64
68//============================================================================= 65//=============================================================================
69 66
70//TODO get back to MochiKit.Base.update as we are not extending anything 67//TODO get back to MochiKit.Base.update as we are not extending anything
71//MochiKit.Base.update(Clipperz.PM.UI.Common.Components.BaseComponent.prototype, { 68//MochiKit.Base.update(Clipperz.PM.UI.Common.Components.BaseComponent.prototype, {
72Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.BaseComponent, /*Ext.Component*/ Object, { 69Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.BaseComponent, /*Ext.Component*/ Object, {
73 70
74 'isClipperzPMComponent': true, 71 'isClipperzPMComponent': true,
75 72
76 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
77 74
78 'toString': function () { 75 'toString': function () {
79 return "Clipperz.PM.UI.Common.Components.BaseComponent component"; 76 return "Clipperz.PM.UI.Common.Components.BaseComponent component";
80 }, 77 },
81 78
82 'componentId': function () { 79 'componentId': function () {
83 return this.getId('_id_'); 80 return this.getId('_id_');
84 }, 81 },
85 82
86 //------------------------------------------------------------------------- 83 //-------------------------------------------------------------------------
87/* 84/*
88 'slots': function() { 85 'slots': function() {
89 return this._slots; 86 return this._slots;
90 }, 87 },
91*/ 88*/
92 'slotComponents': function() { 89 'slotComponents': function() {
93 return this._slotComponents; 90 return this._slotComponents;
94 }, 91 },
95 92
96 //------------------------------------------------------------------------- 93 //-------------------------------------------------------------------------
97 94
98 'components': function () { 95 'components': function () {
99 return this._components; 96 return this._components;
100 }, 97 },
101 98
102 'addComponent': function (aComponent) { 99 'addComponent': function (aComponent) {
103 this.components()[aComponent.componentId()] = aComponent; 100 this.components()[aComponent.componentId()] = aComponent;
104 }, 101 },
105 102
106 'removeComponent': function (aComponent) { 103 'removeComponent': function (aComponent) {
107 var componentId; 104 var componentId;
108 105
109 componentId = aComponent.componentId(); 106 componentId = aComponent.componentId();
110 this.components()[componentId].remove(); 107 this.components()[componentId].remove();
111 delete this.components()[componentId]; 108 delete this.components()[componentId];
112 }, 109 },
113 110
114 //------------------------------------------------------------------------- 111 //-------------------------------------------------------------------------
115/* 112/*
116 'domHelper': function() { 113 'domHelper': function() {
117 return Clipperz.YUI.DomHelper; 114 return Clipperz.YUI.DomHelper;
118 }, 115 },
119 */ 116 */
120 //------------------------------------------------------------------------- 117 //-------------------------------------------------------------------------
121/* 118/*
122 'domHelperAppend': function(aValue) { 119 'domHelperAppend': function(aValue) {
123 Clipperz.YUI.DomHelper.append(this.element().dom, aValue); 120 Clipperz.YUI.DomHelper.append(this.element().dom, aValue);
124 }, 121 },
125 */ 122 */
126 //------------------------------------------------------------------------- 123 //-------------------------------------------------------------------------
127 124
128 'element': function() { 125 'element': function() {
129//MochiKit.Logging.logDebug(">>> BaseComponent.element"); 126//MochiKit.Logging.logDebug(">>> BaseComponent.element");
130 return MochiKit.DOM.getElement(this._element); 127 return MochiKit.DOM.getElement(this._element);
131 }, 128 },
132 129
133 'setElement': function(aNode) { 130 'setElement': function(aNode) {
134 this._element = aNode; 131 this._element = aNode;
135 }, 132 },
136 133
137 //----------------------------------------------------- 134 //-----------------------------------------------------
138 135
139 'displayElement': function() { 136 'displayElement': function() {
140 return this.element(); 137 return this.element();
141 }, 138 },
142 139
143 //------------------------------------------------------------------------- 140 //-------------------------------------------------------------------------
144 141
145 'renderInNode': function(aDomNode) { 142 'renderInNode': function(aDomNode) {
146 this.setElement(aDomNode); 143 this.setElement(aDomNode);
147 this.render(); 144 this.render();
148 }, 145 },
149 146
150 'render': function() { 147 'render': function() {
151 this.clear(); 148 this.clear();
152 this.renderSelf(); 149 this.renderSelf();
153 this.renderComponents(); 150 this.renderComponents();
154 if (this.shouldShowTranslationHints()) { 151 if (this.shouldShowTranslationHints()) {
155 this.renderTranslationHints(); 152 this.renderTranslationHints();
156 } 153 }
157 if (this.shouldShowElementWhileRendering()) { 154 if (this.shouldShowElementWhileRendering()) {
158 MochiKit.Style.showElement(this.displayElement()); 155 MochiKit.Style.showElement(this.displayElement());
159 }; 156 };
160 157
161 this._isFullyRendered = true; 158 this._isFullyRendered = true;
162 159
163 MochiKit.Iter.forEach(this.renderingWaitingQueue(), MochiKit.Base.methodcaller('callback')); 160 MochiKit.Iter.forEach(this.renderingWaitingQueue(), MochiKit.Base.methodcaller('callback'));
164 this.resetRenderingWaitingQueue(); 161 this.resetRenderingWaitingQueue();
165 }, 162 },
166 163
167 'renderSelf': function() { 164 'renderSelf': function() {
168 throw Clipperz.Base.exception.AbstractMethod; 165 throw Clipperz.Base.exception.AbstractMethod;
169 }, 166 },
170 167
171 'renderComponents': function() { 168 'renderComponents': function() {
172 varslotName; 169 varslotName;
173 170
174 for (slotName in this.slotComponents()) { 171 for (slotName in this.slotComponents()) {
175 this.slotComponents()[slotName].renderInNode(this.elementForSlotNamed(slotName)); 172 this.slotComponents()[slotName].renderInNode(this.elementForSlotNamed(slotName));
176 } 173 }
177 }, 174 },
178 175
179 //......................................................................... 176 //.........................................................................
180 177
181 'isFullyRendered': function () { 178 'isFullyRendered': function () {
182 return this._isFullyRendered; 179 return this._isFullyRendered;
183 }, 180 },
184 181
185 //......................................................................... 182 //.........................................................................
186 183
187 'renderingWaitingQueue': function () { 184 'renderingWaitingQueue': function () {
188 return this._renderingWaitingQueue; 185 return this._renderingWaitingQueue;
189 }, 186 },
190 187
191 'resetRenderingWaitingQueue': function () { 188 'resetRenderingWaitingQueue': function () {
192 this._renderingWaitingQueue = []; 189 this._renderingWaitingQueue = [];
193 }, 190 },
194 191
195 //......................................................................... 192 //.........................................................................
196 193
197 'waitUntilFullyRendered': function () { 194 'waitUntilFullyRendered': function () {
198 var deferredResult; 195 var deferredResult;
199 196
200 if (this.isFullyRendered() == true) { 197 if (this.isFullyRendered() == true) {
201 deferredResult = MochiKit.Async.succeed 198 deferredResult = MochiKit.Async.succeed
202 } else { 199 } else {
203 deferredResult = new Clipperz.Async.Deferred("BaseComponent.waitUntilFullyRendered", {trace:false}); 200 deferredResult = new Clipperz.Async.Deferred("BaseComponent.waitUntilFullyRendered", {trace:false});
204 this.renderingWaitingQueue().push(deferredResult); 201 this.renderingWaitingQueue().push(deferredResult);
205 } 202 }
206 203
207 return deferredResult; 204 return deferredResult;
208 }, 205 },
209 206
210 //----------------------------------------------------- 207 //-----------------------------------------------------
211 208
212 'renderTranslationHints': function () { 209 'renderTranslationHints': function () {
213 vartranslatableItems; 210 vartranslatableItems;
214 211
215 translatableItems = MochiKit.Selector.findChildElements(this.displayElement(), ['[stringID]']); 212 translatableItems = MochiKit.Selector.findChildElements(this.displayElement(), ['[stringID]']);
216 MochiKit.Iter.forEach(translatableItems, MochiKit.Base.method(this, 'enhanceTranslatableElement')) 213 MochiKit.Iter.forEach(translatableItems, MochiKit.Base.method(this, 'enhanceTranslatableElement'))
217 }, 214 },
218 215
219 'enhanceTranslatableElement': function (anElement) { 216 'enhanceTranslatableElement': function (anElement) {
220//Clipperz.log(">>> enhanceTranslatableElement", anElement); 217//Clipperz.log(">>> enhanceTranslatableElement", anElement);
221 // new Clipperz.PM.UI.Common.Components.TranslatorWidget({ 218 // new Clipperz.PM.UI.Common.Components.TranslatorWidget({
222 // 'element':anElement 219 // 'element':anElement
223 // }); 220 // });
224 221
225 MochiKit.Signal.connect(anElement, 'onmouseenter', MochiKit.Base.partial(Clipperz.PM.UI.Common.Components.TranslatorWidget.show, anElement, MochiKit.DOM.getNodeAttribute(anElement, 'stringID'))); 222 MochiKit.Signal.connect(anElement, 'onmouseenter', MochiKit.Base.partial(Clipperz.PM.UI.Common.Components.TranslatorWidget.show, anElement, MochiKit.DOM.getNodeAttribute(anElement, 'stringID')));
226 MochiKit.Signal.connect(anElement, 'onmouseleave', Clipperz.PM.UI.Common.Components.TranslatorWidget.hide); 223 MochiKit.Signal.connect(anElement, 'onmouseleave', Clipperz.PM.UI.Common.Components.TranslatorWidget.hide);
227//Clipperz.log("<<< enhanceTranslatableElement"); 224//Clipperz.log("<<< enhanceTranslatableElement");
228 }, 225 },
229 226
230 //----------------------------------------------------- 227 //-----------------------------------------------------
231 228
232 'update': function(args) { 229 'update': function(args) {
233 throw Clipperz.Base.exception.AbstractMethod; 230 throw Clipperz.Base.exception.AbstractMethod;
234 }, 231 },
235 232
236 'updateSelf': function(args) { 233 'updateSelf': function(args) {
237 throw Clipperz.Base.exception.AbstractMethod; 234 throw Clipperz.Base.exception.AbstractMethod;
238 }, 235 },
239 236
240 'updateComponents': function(args) { 237 'updateComponents': function(args) {
241 throw Clipperz.Base.exception.AbstractMethod; 238 throw Clipperz.Base.exception.AbstractMethod;
242 }, 239 },
243 240
244 //----------------------------------------------------- 241 //-----------------------------------------------------
245 242
246 'refresh': function() { 243 'refresh': function() {
247 throw Clipperz.Base.exception.AbstractMethod; 244 throw Clipperz.Base.exception.AbstractMethod;
248 }, 245 },
249 246
250 'refreshSelf': function() { 247 'refreshSelf': function() {
251 throw Clipperz.Base.exception.AbstractMethod; 248 throw Clipperz.Base.exception.AbstractMethod;
252 }, 249 },
253 250
254 'refreshComponents': function(args) { 251 'refreshComponents': function(args) {
255 throw Clipperz.Base.exception.AbstractMethod; 252 throw Clipperz.Base.exception.AbstractMethod;
256 }, 253 },
257 254
258 //----------------------------------------------------- 255 //-----------------------------------------------------
259 256
260 'checkSlotNamed': function(aSlotName) { 257 'checkSlotNamed': function(aSlotName) {
261 if (typeof(this._slots[aSlotName]) == 'undefined') { 258 if (typeof(this._slots[aSlotName]) == 'undefined') {
262 throw new Error("undefined slot"); 259 throw new Error("undefined slot");
263 }; 260 };
264 }, 261 },
265 262
266 //----------------------------------------------------- 263 //-----------------------------------------------------
267 264
268 'cachedSlots': function() { 265 'cachedSlots': function() {
269 return this._cachedSlots; 266 return this._cachedSlots;
270 }, 267 },
271 268
272 'slotNamed': function(aSlotName) { 269 'slotNamed': function(aSlotName) {
273 var result; 270 var result;
274 271
275 this.checkSlotNamed(aSlotName); 272 this.checkSlotNamed(aSlotName);
276 if (typeof(this.cachedSlots()[aSlotName]) == 'undefined') { 273 if (typeof(this.cachedSlots()[aSlotName]) == 'undefined') {
277 this.cachedSlots()[aSlotName] = new Clipperz.PM.UI.Common.Components.ComponentSlot(this,aSlotName); 274 this.cachedSlots()[aSlotName] = new Clipperz.PM.UI.Common.Components.ComponentSlot(this,aSlotName);
278 } 275 }
279 276
280 result = this.cachedSlots()[aSlotName]; 277 result = this.cachedSlots()[aSlotName];
281 278
282 return result; 279 return result;
283 }, 280 },
284 281
285 //----------------------------------------------------- 282 //-----------------------------------------------------
286 283
287 'elementForSlotNamed': function(aSlotName) { 284 'elementForSlotNamed': function(aSlotName) {
288 return MochiKit.DOM.getElement(this._slots[aSlotName]); 285 return MochiKit.DOM.getElement(this._slots[aSlotName]);
289 }, 286 },
290 287
291 //----------------------------------------------------- 288 //-----------------------------------------------------
292 289
293 'componentForSlotNamed': function(aSlotName) { 290 'componentForSlotNamed': function(aSlotName) {
294 return this.slotComponents()[aSlotName]; 291 return this.slotComponents()[aSlotName];
295 }, 292 },
296 293
297 'setComponentForSlotNamed': function(aComponent, aSlotName) { 294 'setComponentForSlotNamed': function(aComponent, aSlotName) {
298 var domNode; 295 var domNode;
299 296
300 this.checkSlotNamed(aSlotName); 297 this.checkSlotNamed(aSlotName);
301 298
302 if (this.slotComponents()[aSlotName] != null) { 299 if (this.slotComponents()[aSlotName] != null) {
303 this.slotComponents()[aSlotName].remove(); 300 this.slotComponents()[aSlotName].remove();
304 } 301 }
305 302
306 this.slotComponents()[aSlotName] = aComponent; 303 this.slotComponents()[aSlotName] = aComponent;
307 304
308 // domNode = MochiKit.DOM.getElement(this.slotNamed(aSlotName)); 305 // domNode = MochiKit.DOM.getElement(this.slotNamed(aSlotName));
309 domNode = this.elementForSlotNamed(aSlotName); 306 domNode = this.elementForSlotNamed(aSlotName);
310 307
311 if (domNode != null) { 308 if (domNode != null) {
312 aComponent.renderInNode(domNode); 309 aComponent.renderInNode(domNode);
313 } 310 }
314 }, 311 },
315 312
316 //----------------------------------------------------- 313 //-----------------------------------------------------
317/* 314/*
318 'purgeListeners': function() { 315 'purgeListeners': function() {
319//MochiKit.Logging.logDebug(">>> Clipperz.PM.UI.Common.Components.BaseComponent.purgeListeners [" + this + "]"); 316//MochiKit.Logging.logDebug(">>> Clipperz.PM.UI.Common.Components.BaseComponent.purgeListeners [" + this + "]");
320//MochiKit.Logging.logDebug("--- " + this + ".purgeListeners"); 317//MochiKit.Logging.logDebug("--- " + this + ".purgeListeners");
321 Clipperz.NotificationCenter.unregister(this); 318 Clipperz.NotificationCenter.unregister(this);
322 MochiKit.Signal.disconnectAllTo(this); 319 MochiKit.Signal.disconnectAllTo(this);
323//MochiKit.Logging.logDebug("<<< Clipperz.PM.UI.Common.Components.BaseComponent.purgeListeners"); 320//MochiKit.Logging.logDebug("<<< Clipperz.PM.UI.Common.Components.BaseComponent.purgeListeners");
324 }, 321 },
325 */ 322 */
326 //----------------------------------------------------- 323 //-----------------------------------------------------
327 324
328 'clear': function() { 325 'clear': function() {
329 varslotName; 326 varslotName;
330 var componentId; 327 var componentId;
331 328
332 MochiKit.Signal.disconnectAllTo(this); 329 MochiKit.Signal.disconnectAllTo(this);
333 330
334 for (slotName in this.slotComponents()) { 331 for (slotName in this.slotComponents()) {
335 this.slotComponents()[slotName].clear(); 332 this.slotComponents()[slotName].clear();
336 } 333 }
337 334
338 for (componentId in this.components()) { 335 for (componentId in this.components()) {
339 this.components()[componentId].clear(); 336 this.components()[componentId].clear();
340 } 337 }
341 338
342 // if (this.element() != null) { 339 // if (this.element() != null) {
343 // this.element().innerHTML = ""; 340 // this.element().innerHTML = "";
344 // } 341 // }
345 342
346 if (this.displayElement() != null) { 343 if (this.displayElement() != null) {
347 if (this.element() != this.displayElement()) { 344 if (this.element() != this.displayElement()) {
348 MochiKit.DOM.removeElement(this.displayElement()); 345 MochiKit.DOM.removeElement(this.displayElement());
349 } else { 346 } else {
350 this.displayElement().innerHTML = ""; 347 this.displayElement().innerHTML = "";
351 } 348 }
352 } 349 }
353 350
354 if (this.isModal()) { 351 if (this.isModal()) {
355 //TODO: cleanup when the closed element was shown modally. 352 //TODO: cleanup when the closed element was shown modally.
356 } 353 }
357 }, 354 },
358 355
359 356
360 'remove': function() { 357 'remove': function() {
361 varslotName; 358 varslotName;
362 var componentId; 359 var componentId;
363 360
364 for (slotName in this.slotComponents()) { 361 for (slotName in this.slotComponents()) {
365 this.slotComponents()[slotName].remove(); 362 this.slotComponents()[slotName].remove();
366 delete this.slotComponents()[slotName]; 363 delete this.slotComponents()[slotName];
367 } 364 }
368 365
369 for (componentId in this.components()) { 366 for (componentId in this.components()) {
370 this.components()[componentId].remove(); 367 this.components()[componentId].remove();
371 delete this.components()[componentId]; 368 delete this.components()[componentId];
372 } 369 }
373 370
374 this.clear(); 371 this.clear();
375 MochiKit.Signal.disconnectAll(this); 372 MochiKit.Signal.disconnectAll(this);
376 }, 373 },
377 374
378 'append': function(aNode, aValue) { 375 'append': function(aNode, aValue) {
379 return Clipperz.DOM.Helper.append(aNode, aValue); 376 return Clipperz.DOM.Helper.append(aNode, aValue);
380 }, 377 },
381 378
382 'insertBefore': function (aNode, aValue) { 379 'insertBefore': function (aNode, aValue) {
383 return Clipperz.DOM.Helper.insertBefore(aNode, aValue); 380 return Clipperz.DOM.Helper.insertBefore(aNode, aValue);
384 }, 381 },
385 382
386 'insertAfter': function (aNode, aValue) { 383 'insertAfter': function (aNode, aValue) {
387 return Clipperz.DOM.Helper.insertAfter(aNode, aValue); 384 return Clipperz.DOM.Helper.insertAfter(aNode, aValue);
388 }, 385 },
389 386
390 //------------------------------------------------------------------------- 387 //-------------------------------------------------------------------------
391 388
392 'getId': function(aValue) { 389 'getId': function(aValue) {
393 varresult; 390 varresult;
394 391
395 if (typeof(aValue) != 'undefined') { 392 if (typeof(aValue) != 'undefined') {
396 result = this._ids[aValue]; 393 result = this._ids[aValue];
397 394
398 if (typeof(result) == 'undefined') { 395 if (typeof(result) == 'undefined') {
399 _Clipperz_PM_Components_base_id_ ++; 396 _Clipperz_PM_Components_base_id_ ++;
400 397
401 result = "Clipperz_PM_Components_" + aValue + "_" + _Clipperz_PM_Components_base_id_; 398 result = "Clipperz_PM_Components_" + aValue + "_" + _Clipperz_PM_Components_base_id_;
402 this._ids[aValue] = result; 399 this._ids[aValue] = result;
403 } 400 }
404 } else { 401 } else {
405 // result = Clipperz.PM.UI.Common.Components.BaseComponent.superclass.getId.call(this); 402 // result = Clipperz.PM.UI.Common.Components.BaseComponent.superclass.getId.call(this);
406 throw "call to BaseComponent.getId with an undefined value"; 403 throw "call to BaseComponent.getId with an undefined value";
407 } 404 }
408 405
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Button.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Button.js
index b2761ea..716d851 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Button.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Button.js
@@ -1,108 +1,105 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31Clipperz.PM.UI.Common.Components.Button = function(args) { 28Clipperz.PM.UI.Common.Components.Button = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Common.Components.Button.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Common.Components.Button.superclass.constructor.apply(this, arguments);
35 32
36 this._element = args.element || Clipperz.Base.exception.raise('MandatoryParameter'); 33 this._element = args.element || Clipperz.Base.exception.raise('MandatoryParameter');
37 this._text = args.text || Clipperz.Base.exception.raise('MandatoryParameter'); 34 this._text = args.text || Clipperz.Base.exception.raise('MandatoryParameter');
38 this._isDefault = args.isDefault|| false; 35 this._isDefault = args.isDefault|| false;
39 36
40 this.render(); 37 this.render();
41 38
42 return this; 39 return this;
43} 40}
44 41
45//============================================================================= 42//=============================================================================
46 43
47Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.Button, Clipperz.PM.UI.Common.Components.BaseComponent, { 44Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.Button, Clipperz.PM.UI.Common.Components.BaseComponent, {
48 45
49 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
50 47
51 'toString': function () { 48 'toString': function () {
52 return "Clipperz.PM.UI.Common.Components.Button component"; 49 return "Clipperz.PM.UI.Common.Components.Button component";
53 }, 50 },
54 51
55 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
56 53
57 'text': function () { 54 'text': function () {
58 return this._text; 55 return this._text;
59 }, 56 },
60 57
61 'isDefault': function () { 58 'isDefault': function () {
62 return this._isDefault; 59 return this._isDefault;
63 }, 60 },
64 61
65 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
66 63
67 'renderSelf': function () { 64 'renderSelf': function () {
68 this.append(this.element(), {tag:'div', id:this.getId('wrapper'), cls:'button_wrapper', children:[ 65 this.append(this.element(), {tag:'div', id:this.getId('wrapper'), cls:'button_wrapper', children:[
69 {tag:'div', id:this.getId('bodyWrapper'), cls:'button_bodyWrapper', children:[ 66 {tag:'div', id:this.getId('bodyWrapper'), cls:'button_bodyWrapper', children:[
70 {tag:'div', id:this.getId('body'), cls:'button_body', children:[ 67 {tag:'div', id:this.getId('body'), cls:'button_body', children:[
71 {tag:'span', html:this.text()} 68 {tag:'span', html:this.text()}
72 ]}, 69 ]},
73 {tag:'div', id:this.getId('footer'), cls:'button_footer'} 70 {tag:'div', id:this.getId('footer'), cls:'button_footer'}
74 ]} 71 ]}
75 ]}); 72 ]});
76 73
77 if (this.isDefault()) { 74 if (this.isDefault()) {
78 MochiKit.DOM.addElementClass(this.getId('wrapper'), 'default'); 75 MochiKit.DOM.addElementClass(this.getId('wrapper'), 'default');
79 } 76 }
80 77
81 MochiKit.Signal.connect(this.getId('wrapper'), 'onmouseenter',this, 'handleOnMouseEnter'); 78 MochiKit.Signal.connect(this.getId('wrapper'), 'onmouseenter',this, 'handleOnMouseEnter');
82 MochiKit.Signal.connect(this.getId('wrapper'), 'onmouseleave',this, 'handleOnMouseLeave'); 79 MochiKit.Signal.connect(this.getId('wrapper'), 'onmouseleave',this, 'handleOnMouseLeave');
83 MochiKit.Signal.connect(this.getId('wrapper'), 'onmousedown',this, 'handleOnMouseDown'); 80 MochiKit.Signal.connect(this.getId('wrapper'), 'onmousedown',this, 'handleOnMouseDown');
84 MochiKit.Signal.connect(this.getId('wrapper'), 'onclick', this, 'handleOnClick'); 81 MochiKit.Signal.connect(this.getId('wrapper'), 'onclick', this, 'handleOnClick');
85 }, 82 },
86 83
87 //------------------------------------------------------------------------- 84 //-------------------------------------------------------------------------
88 85
89 'handleOnMouseEnter': function (anEvent) { 86 'handleOnMouseEnter': function (anEvent) {
90 MochiKit.DOM.addElementClass(this.getId('wrapper'), 'hover'); 87 MochiKit.DOM.addElementClass(this.getId('wrapper'), 'hover');
91 }, 88 },
92 89
93 'handleOnMouseLeave': function (anEvent) { 90 'handleOnMouseLeave': function (anEvent) {
94 MochiKit.DOM.removeElementClass(this.getId('wrapper'), 'hover'); 91 MochiKit.DOM.removeElementClass(this.getId('wrapper'), 'hover');
95 MochiKit.DOM.removeElementClass(this.getId('wrapper'), 'clicked'); 92 MochiKit.DOM.removeElementClass(this.getId('wrapper'), 'clicked');
96 }, 93 },
97 94
98 'handleOnMouseDown': function (anEvent) { 95 'handleOnMouseDown': function (anEvent) {
99 MochiKit.DOM.addElementClass(this.getId('wrapper'), 'clicked'); 96 MochiKit.DOM.addElementClass(this.getId('wrapper'), 'clicked');
100 }, 97 },
101 98
102 'handleOnClick': function (anEvent) { 99 'handleOnClick': function (anEvent) {
103 MochiKit.Signal.signal(this, 'onclick', anEvent); 100 MochiKit.Signal.signal(this, 'onclick', anEvent);
104 }, 101 },
105 102
106 //------------------------------------------------------------------------- 103 //-------------------------------------------------------------------------
107 __syntaxFix__: "syntax fix" 104 __syntaxFix__: "syntax fix"
108}); 105});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/ComponentSlot.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/ComponentSlot.js
index 0c6e221..7f56c1e 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/ComponentSlot.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/ComponentSlot.js
@@ -1,64 +1,61 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31//############################################################################# 28//#############################################################################
32 29
33 30
34Clipperz.PM.UI.Common.Components.ComponentSlot = function(aComponent, aSlotName) { 31Clipperz.PM.UI.Common.Components.ComponentSlot = function(aComponent, aSlotName) {
35 this._component = aComponent; 32 this._component = aComponent;
36 this._slotName = aSlotName; 33 this._slotName = aSlotName;
37 34
38 return this; 35 return this;
39} 36}
40 37
41//============================================================================= 38//=============================================================================
42 39
43Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.ComponentSlot, Object, { 40Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.ComponentSlot, Object, {
44 41
45 //------------------------------------------------------------------------- 42 //-------------------------------------------------------------------------
46 43
47 'slotName': function() { 44 'slotName': function() {
48 return this._slotName; 45 return this._slotName;
49 }, 46 },
50 47
51 'component': function() { 48 'component': function() {
52 return this._component; 49 return this._component;
53 }, 50 },
54 51
55 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
56 53
57 'setContent': function(aComponent) { 54 'setContent': function(aComponent) {
58 this.component().setComponentForSlotNamed(aComponent, this.slotName()); 55 this.component().setComponentForSlotNamed(aComponent, this.slotName());
59 }, 56 },
60 57
61 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
62 __syntaxFix__: "syntax fix" 59 __syntaxFix__: "syntax fix"
63 60
64}); 61});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/FaviconComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/FaviconComponent.js
index 4735f5c..2db2489 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/FaviconComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/FaviconComponent.js
@@ -1,91 +1,88 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31Clipperz.PM.UI.Common.Components.FaviconComponent = function(args) { 28Clipperz.PM.UI.Common.Components.FaviconComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Common.Components.FaviconComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Common.Components.FaviconComponent.superclass.constructor.apply(this, arguments);
35 32
36 this.render(); 33 this.render();
37 this.setSrc(args.src); 34 this.setSrc(args.src);
38 35
39 return this; 36 return this;
40} 37}
41 38
42//============================================================================= 39//=============================================================================
43 40
44Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.FaviconComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 41Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.FaviconComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
45 42
46 //------------------------------------------------------------------------- 43 //-------------------------------------------------------------------------
47 44
48 'toString': function () { 45 'toString': function () {
49 return "Clipperz.PM.UI.Common.Components.FaviconComponent component"; 46 return "Clipperz.PM.UI.Common.Components.FaviconComponent component";
50 }, 47 },
51 48
52 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
53 50
54 'src': function () { 51 'src': function () {
55 return this.element().src; 52 return this.element().src;
56 }, 53 },
57 54
58 'setSrc': function (aValue) { 55 'setSrc': function (aValue) {
59 this.element().src = (aValue || Clipperz.PM.Strings.getValue('defaultFaviconUrl')); 56 this.element().src = (aValue || Clipperz.PM.Strings.getValue('defaultFaviconUrl'));
60 }, 57 },
61 58
62 //------------------------------------------------------------------------- 59 //-------------------------------------------------------------------------
63 60
64 'clear': function () {}, 61 'clear': function () {},
65 62
66 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
67 64
68 'renderSelf': function () { 65 'renderSelf': function () {
69 MochiKit.Signal.connect(this.element(), 'onerror',this, 'setDefaultFavicon'); 66 MochiKit.Signal.connect(this.element(), 'onerror',this, 'setDefaultFavicon');
70 MochiKit.Signal.connect(this.element(), 'onabort',this, 'setDefaultFavicon'); 67 MochiKit.Signal.connect(this.element(), 'onabort',this, 'setDefaultFavicon');
71 MochiKit.Signal.connect(this.element(), 'onload',this, 'handleOnLoad'); 68 MochiKit.Signal.connect(this.element(), 'onload',this, 'handleOnLoad');
72 }, 69 },
73 70
74 //------------------------------------------------------------------------- 71 //-------------------------------------------------------------------------
75 72
76 'setDefaultFavicon': function (anEvent) { 73 'setDefaultFavicon': function (anEvent) {
77 MochiKit.Signal.disconnectAll(anEvent.src()); 74 MochiKit.Signal.disconnectAll(anEvent.src());
78 this.setSrc(null); 75 this.setSrc(null);
79 }, 76 },
80 77
81 'handleOnLoad': function (anEvent) { 78 'handleOnLoad': function (anEvent) {
82 MochiKit.Signal.disconnectAll(anEvent.src()); 79 MochiKit.Signal.disconnectAll(anEvent.src());
83//console.log("HANDLE ON LOAD", anEvent, anEvent.src().src); 80//console.log("HANDLE ON LOAD", anEvent, anEvent.src().src);
84 if (anEvent.src().complete == false) { 81 if (anEvent.src().complete == false) {
85 this.setSrc(null); 82 this.setSrc(null);
86 } 83 }
87 }, 84 },
88 85
89 //------------------------------------------------------------------------- 86 //-------------------------------------------------------------------------
90 __syntaxFix__: "syntax fix" 87 __syntaxFix__: "syntax fix"
91}); 88});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js
index 275bbed..2788b79 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/MessagePanelWithProgressBar.js
@@ -1,164 +1,161 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar = function(args) { 28Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar.superclass.constructor.apply(this, arguments);
35 32
36 // this._openFromElement = args.openFromElement || null; 33 // this._openFromElement = args.openFromElement || null;
37 this._onOkCloseToElement = args.onOkCloseToElement || null; 34 this._onOkCloseToElement = args.onOkCloseToElement || null;
38 this._onCancelCloseToElement = args.onCancelCloseToElement|| null; 35 this._onCancelCloseToElement = args.onCancelCloseToElement|| null;
39 36
40 this._canCancelWhileProcessing= ((typeof(args.canCancelWhileProcessing) == 'undefined') ? true : args.canCancelWhileProcessing); 37 this._canCancelWhileProcessing= ((typeof(args.canCancelWhileProcessing) == 'undefined') ? true : args.canCancelWhileProcessing);
41 38
42 return this; 39 return this;
43} 40}
44 41
45//============================================================================= 42//=============================================================================
46 43
47Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar, Clipperz.PM.UI.Common.Components.SimpleMessagePanel, { 44Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar, Clipperz.PM.UI.Common.Components.SimpleMessagePanel, {
48 45
49 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
50 47
51 'toString': function () { 48 'toString': function () {
52 return "Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar component"; 49 return "Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar component";
53 }, 50 },
54 51
55 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
56/* 53/*
57 'openFromElement': function () { 54 'openFromElement': function () {
58 return this._openFromElement; 55 return this._openFromElement;
59 }, 56 },
60*/ 57*/
61 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
62 59
63 'onOkCloseToElement': function () { 60 'onOkCloseToElement': function () {
64 return this._onOkCloseToElement; 61 return this._onOkCloseToElement;
65 }, 62 },
66 63
67 'setOnOkCloseToElement': function (anElement) { 64 'setOnOkCloseToElement': function (anElement) {
68 this._onOkCloseToElement = anElement; 65 this._onOkCloseToElement = anElement;
69 }, 66 },
70 67
71 //------------------------------------------------------------------------- 68 //-------------------------------------------------------------------------
72 69
73 'onCancelCloseToElement': function () { 70 'onCancelCloseToElement': function () {
74 return this._onCancelCloseToElement; 71 return this._onCancelCloseToElement;
75 }, 72 },
76 73
77 'setOnCancelCloseToElement': function (anElement) { 74 'setOnCancelCloseToElement': function (anElement) {
78 this._onCancelCloseToElement = anElement; 75 this._onCancelCloseToElement = anElement;
79 }, 76 },
80 77
81 //------------------------------------------------------------------------- 78 //-------------------------------------------------------------------------
82 79
83 'canCancelWhileProcessing': function () { 80 'canCancelWhileProcessing': function () {
84 return this._canCancelWhileProcessing; 81 return this._canCancelWhileProcessing;
85 }, 82 },
86 83
87 //------------------------------------------------------------------------- 84 //-------------------------------------------------------------------------
88 85
89 'deferredShowModal': function (someArgs, aResult) { 86 'deferredShowModal': function (someArgs, aResult) {
90 if (someArgs['onOkCloseToElement'] != null) { 87 if (someArgs['onOkCloseToElement'] != null) {
91 this.setOnOkCloseToElement(someArgs['onOkCloseToElement']); 88 this.setOnOkCloseToElement(someArgs['onOkCloseToElement']);
92 } 89 }
93 90
94 if (someArgs['onCancelCloseToElement'] != null) { 91 if (someArgs['onCancelCloseToElement'] != null) {
95 this.setOnCancelCloseToElement(someArgs['onCancelCloseToElement']); 92 this.setOnCancelCloseToElement(someArgs['onCancelCloseToElement']);
96 } 93 }
97 94
98 Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar.superclass.deferredShowModal.apply(this, arguments); 95 Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar.superclass.deferredShowModal.apply(this, arguments);
99 return this.deferred(); 96 return this.deferred();
100 }, 97 },
101 98
102 //------------------------------------------------------------------------- 99 //-------------------------------------------------------------------------
103 100
104 'showProgressBar': function () { 101 'showProgressBar': function () {
105 varprogressBarElement; 102 varprogressBarElement;
106 103
107 this.getElement('container').innerHTML = ''; 104 this.getElement('container').innerHTML = '';
108 105
109 progressBarElement = this.append(this.getElement('container'), {tag:'div', cls:'progressBarWrapper'}); 106 progressBarElement = this.append(this.getElement('container'), {tag:'div', cls:'progressBarWrapper'});
110 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':progressBarElement})); 107 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':progressBarElement}));
111 108
112 if (this.canCancelWhileProcessing() == true) { 109 if (this.canCancelWhileProcessing() == true) {
113 this.setButtons([{text:"Cancel", result:'CANCEL'}]); 110 this.setButtons([{text:"Cancel", result:'CANCEL'}]);
114 } else { 111 } else {
115 this.setButtons([]); 112 this.setButtons([]);
116 } 113 }
117 }, 114 },
118 115
119 //------------------------------------------------------------------------- 116 //-------------------------------------------------------------------------
120 117
121 'showFailure': function (someParameters) { 118 'showFailure': function (someParameters) {
122 // this.setType('ALERT'); 119 // this.setType('ALERT');
123 this.setType(someParameters['type']); 120 this.setType(someParameters['type']);
124 // this.setTitle("Login failed"); 121 // this.setTitle("Login failed");
125 this.setTitle(someParameters['title']); 122 this.setTitle(someParameters['title']);
126 // this.setText("Wrong passphrase; the unlock has failed."); 123 // this.setText("Wrong passphrase; the unlock has failed.");
127 this.setText(someParameters['text']); 124 this.setText(someParameters['text']);
128 // this.getElement('container').innerHTML = ''; 125 // this.getElement('container').innerHTML = '';
129 this.getElement('container').innerHTML = ''; 126 this.getElement('container').innerHTML = '';
130 // this.setButtons([{text:"Close", result:'CANCEL', isDefault:true}]); 127 // this.setButtons([{text:"Close", result:'CANCEL', isDefault:true}]);
131 this.setButtons(someParameters['buttons']); 128 this.setButtons(someParameters['buttons']);
132 }, 129 },
133 130
134 //------------------------------------------------------------------------- 131 //-------------------------------------------------------------------------
135 132
136 'closeOk': function () { 133 'closeOk': function () {
137//console.log("=== closeOk"); 134//console.log("=== closeOk");
138 this.showProgressBar(); 135 this.showProgressBar();
139 MochiKit.Async.callLater(0.5, MochiKit.Base.method(this.deferred(), 'callback')); 136 MochiKit.Async.callLater(0.5, MochiKit.Base.method(this.deferred(), 'callback'));
140 this._deferred = null; 137 this._deferred = null;
141 }, 138 },
142 139
143 'closeCancel': function () { 140 'closeCancel': function () {
144//console.log("=== closeCancel"); 141//console.log("=== closeCancel");
145 this.deferredHideModal({closeToElement:this.onCancelCloseToElement()}); 142 this.deferredHideModal({closeToElement:this.onCancelCloseToElement()});
146 this.deferred().cancel(); 143 this.deferred().cancel();
147 this._deferred = null; 144 this._deferred = null;
148 }, 145 },
149 146
150 //------------------------------------------------------------------------- 147 //-------------------------------------------------------------------------
151 148
152 'deferredDone': function () { 149 'deferredDone': function () {
153//console.log("=== deferredDone"); 150//console.log("=== deferredDone");
154 return this.deferredHideModal({closeToElement:this.onOkCloseToElement()}); 151 return this.deferredHideModal({closeToElement:this.onOkCloseToElement()});
155 }, 152 },
156 153
157 'deferredError': function (someParameters) { 154 'deferredError': function (someParameters) {
158//console.log("=== deferredError"); 155//console.log("=== deferredError");
159 this.showFailure(someParameters); 156 this.showFailure(someParameters);
160 }, 157 },
161 158
162 //------------------------------------------------------------------------- 159 //-------------------------------------------------------------------------
163 __syntaxFix__: "syntax fix" 160 __syntaxFix__: "syntax fix"
164}); 161});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/PasswordEntropyDisplay.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/PasswordEntropyDisplay.js
index c1b4f13..089e3d4 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/PasswordEntropyDisplay.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/PasswordEntropyDisplay.js
@@ -1,140 +1,137 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31Clipperz.PM.UI.Common.Components.PasswordEntropyDisplay = function(anElement, args) { 28Clipperz.PM.UI.Common.Components.PasswordEntropyDisplay = function(anElement, args) {
32 args = args || {}; 29 args = args || {};
33 30
34//MochiKit.Logging.logDebug(">>> new TextFormField"); 31//MochiKit.Logging.logDebug(">>> new TextFormField");
35 Clipperz.PM.UI.Common.Components.PasswordEntropyDisplay.superclass.constructor.call(this, anElement, args); 32 Clipperz.PM.UI.Common.Components.PasswordEntropyDisplay.superclass.constructor.call(this, anElement, args);
36 33
37 this._wrapperElement = null; 34 this._wrapperElement = null;
38 this._entropyElement = null; 35 this._entropyElement = null;
39 36
40 this.render(); 37 this.render();
41//MochiKit.Logging.logDebug("<<< new TextFormField"); 38//MochiKit.Logging.logDebug("<<< new TextFormField");
42 39
43 return this; 40 return this;
44}; 41};
45 42
46Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.PasswordEntropyDisplay, Clipperz.PM.UI.Common.Components.BaseComponent, { 43Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.PasswordEntropyDisplay, Clipperz.PM.UI.Common.Components.BaseComponent, {
47 44
48 'toString': function() { 45 'toString': function() {
49 return "Clipperz.PM.UI.Common.Components.PasswordEntropyDisplay"; 46 return "Clipperz.PM.UI.Common.Components.PasswordEntropyDisplay";
50 }, 47 },
51 48
52 //----------------------------------------------------- 49 //-----------------------------------------------------
53 50
54 'wrapperElement': function() { 51 'wrapperElement': function() {
55 return this._wrapperElement; 52 return this._wrapperElement;
56 }, 53 },
57 54
58 'setWrapperElement': function(aValue) { 55 'setWrapperElement': function(aValue) {
59 this._wrapperElement = aValue; 56 this._wrapperElement = aValue;
60 }, 57 },
61 58
62 //----------------------------------------------------- 59 //-----------------------------------------------------
63 60
64 'passwordElement': function() { 61 'passwordElement': function() {
65 return this.element(); 62 return this.element();
66 }, 63 },
67 64
68 //----------------------------------------------------- 65 //-----------------------------------------------------
69 66
70 'entropyElement': function() { 67 'entropyElement': function() {
71 return this._entropyElement; 68 return this._entropyElement;
72 }, 69 },
73 70
74 'setEntropyElement': function(aValue) { 71 'setEntropyElement': function(aValue) {
75 this._entropyElement = aValue; 72 this._entropyElement = aValue;
76 }, 73 },
77 74
78 //----------------------------------------------------- 75 //-----------------------------------------------------
79 76
80 'render': function() { 77 'render': function() {
81/* 78/*
82 MochiKit.Signal.disconnectAllTo(this); 79 MochiKit.Signal.disconnectAllTo(this);
83 80
84 this.setWrapperElement(this.element().wrap({tag:'div'})); 81 this.setWrapperElement(this.element().wrap({tag:'div'}));
85 this.setEntropyElement(Clipperz.DOM.Helper.append(this.wrapperElement().dom, {tag:'div', cls:'passwordEntropy', html:"&nbsp;"}, true)); 82 this.setEntropyElement(Clipperz.DOM.Helper.append(this.wrapperElement().dom, {tag:'div', cls:'passwordEntropy', html:"&nbsp;"}, true));
86 // this.setEntropyElement(Clipperz.DOM.Helper.insertBefore(this.element(), {tag:'div', cls:'passwordEntropy', html:"&nbsp;"}, true)); 83 // this.setEntropyElement(Clipperz.DOM.Helper.insertBefore(this.element(), {tag:'div', cls:'passwordEntropy', html:"&nbsp;"}, true));
87 this.entropyElement().wrap({tag:'div', cls:'passwordEntropyWrapper'}); 84 this.entropyElement().wrap({tag:'div', cls:'passwordEntropyWrapper'});
88 85
89 this.updateEntropyElement(); 86 this.updateEntropyElement();
90 87
91 this.connect('onkeyup', 'updateEntropyElement'); 88 this.connect('onkeyup', 'updateEntropyElement');
92 this.connect('onchange', 'updateEntropyElement'); 89 this.connect('onchange', 'updateEntropyElement');
93 this.connect('onblur', 'updateEntropyElement'); 90 this.connect('onblur', 'updateEntropyElement');
94*/ 91*/
95 MochiKit.Signal.disconnectAllTo(this); 92 MochiKit.Signal.disconnectAllTo(this);
96 93
97 this.setEntropyElement(this.element()); 94 this.setEntropyElement(this.element());
98 this.entropyElement().addClass("entropyLevelIndicator"); 95 this.entropyElement().addClass("entropyLevelIndicator");
99 96
100 this.updateEntropyElement(); 97 this.updateEntropyElement();
101 98
102 this.connect('onkeyup', 'updateEntropyElement'); 99 this.connect('onkeyup', 'updateEntropyElement');
103 this.connect('onchange', 'updateEntropyElement'); 100 this.connect('onchange', 'updateEntropyElement');
104 this.connect('onblur', 'updateEntropyElement'); 101 this.connect('onblur', 'updateEntropyElement');
105 }, 102 },
106 103
107 //----------------------------------------------------- 104 //-----------------------------------------------------
108 105
109 'computeEntropyForString': function(aValue) { 106 'computeEntropyForString': function(aValue) {
110 return Clipperz.PM.Crypto.passwordEntropy(aValue); 107 return Clipperz.PM.Crypto.passwordEntropy(aValue);
111 }, 108 },
112 109
113 //----------------------------------------------------- 110 //-----------------------------------------------------
114 111
115 'updateEntropyElement': function(anEvent) { 112 'updateEntropyElement': function(anEvent) {
116/* 113/*
117//MochiKit.Logging.logDebug(">>> PasswordEntropyDisplay.updateEntropyElement"); 114//MochiKit.Logging.logDebug(">>> PasswordEntropyDisplay.updateEntropyElement");
118 varmaxExtent; 115 varmaxExtent;
119 varentropy; 116 varentropy;
120 117
121 entropy = Math.min(128, this.computeEntropyForString(this.passwordElement().dom.value)); 118 entropy = Math.min(128, this.computeEntropyForString(this.passwordElement().dom.value));
122//MochiKit.Logging.logDebug("--- PasswordEntropyDisplay.updateEntropyElement - entropy: " + entropy); 119//MochiKit.Logging.logDebug("--- PasswordEntropyDisplay.updateEntropyElement - entropy: " + entropy);
123 this.entropyElement().setStyle('background-position', "0px " + -entropy + "px"); 120 this.entropyElement().setStyle('background-position', "0px " + -entropy + "px");
124 this.entropyElement().setWidth(this.passwordElement().getWidth() * (entropy/128)); 121 this.entropyElement().setWidth(this.passwordElement().getWidth() * (entropy/128));
125//MochiKit.Logging.logDebug("<<< PasswordEntropyDisplay.updateEntropyElement"); 122//MochiKit.Logging.logDebug("<<< PasswordEntropyDisplay.updateEntropyElement");
126*/ 123*/
127 varentropy; 124 varentropy;
128 125
129 entropy = Math.min(128, this.computeEntropyForString(this.passwordElement().dom.value)); 126 entropy = Math.min(128, this.computeEntropyForString(this.passwordElement().dom.value));
130 127
131 if (entropy == 0) { 128 if (entropy == 0) {
132 this.entropyElement().setStyle('background-position', "0px 26px"); 129 this.entropyElement().setStyle('background-position', "0px 26px");
133 } else { 130 } else {
134 this.entropyElement().setStyle('background-position', "0px -" + (128-entropy)*26 + "px"); 131 this.entropyElement().setStyle('background-position', "0px -" + (128-entropy)*26 + "px");
135 } 132 }
136 }, 133 },
137 134
138 //----------------------------------------------------- 135 //-----------------------------------------------------
139 __syntaxFix__: '__syntaxFix__' 136 __syntaxFix__: '__syntaxFix__'
140}); 137});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/ProgressBar.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/ProgressBar.js
index 7e7f8fe..5991530 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/ProgressBar.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/ProgressBar.js
@@ -1,73 +1,70 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31Clipperz.PM.UI.Common.Components.ProgressBar = function(args) { 28Clipperz.PM.UI.Common.Components.ProgressBar = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Common.Components.ProgressBar.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Common.Components.ProgressBar.superclass.constructor.apply(this, arguments);
35 32
36 this._element = args.element|| Clipperz.Base.exception.raise('MandatoryParameter'); 33 this._element = args.element|| Clipperz.Base.exception.raise('MandatoryParameter');
37 34
38 this.renderSelf(); 35 this.renderSelf();
39 36
40 MochiKit.Signal.connect(Clipperz.PM.UI.Common.Controllers.ProgressBarController.defaultController, 'updateProgress', this, 'updateProgressHandler') 37 MochiKit.Signal.connect(Clipperz.PM.UI.Common.Controllers.ProgressBarController.defaultController, 'updateProgress', this, 'updateProgressHandler')
41 38
42 return this; 39 return this;
43} 40}
44 41
45//============================================================================= 42//=============================================================================
46 43
47Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.ProgressBar, Clipperz.PM.UI.Common.Components.BaseComponent, { 44Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.ProgressBar, Clipperz.PM.UI.Common.Components.BaseComponent, {
48 45
49 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
50 47
51 'toString': function () { 48 'toString': function () {
52 return "Clipperz.PM.UI.Common.Components.ProgressBar component"; 49 return "Clipperz.PM.UI.Common.Components.ProgressBar component";
53 }, 50 },
54 51
55 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
56 53
57 'renderSelf': function() { 54 'renderSelf': function() {
58 this.append(this.element(), {tag:'div', cls:'loadingBar', children:[ 55 this.append(this.element(), {tag:'div', cls:'loadingBar', children:[
59 {tag:'div', cls:'loadingBarProgressBox', children:[ 56 {tag:'div', cls:'loadingBarProgressBox', children:[
60 {tag:'div', id:this.getId('loadingBarProgress'), cls:'loadingBarProgress'} 57 {tag:'div', id:this.getId('loadingBarProgress'), cls:'loadingBarProgress'}
61 ]} 58 ]}
62 ]}); 59 ]});
63 }, 60 },
64 61
65 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
66 63
67 'updateProgressHandler': function (anEvent) { 64 'updateProgressHandler': function (anEvent) {
68 MochiKit.Style.setElementDimensions(this.getId('loadingBarProgress'), {w:anEvent}, '%'); 65 MochiKit.Style.setElementDimensions(this.getId('loadingBarProgress'), {w:anEvent}, '%');
69 }, 66 },
70 67
71 //------------------------------------------------------------------------- 68 //-------------------------------------------------------------------------
72 __syntaxFix__: "syntax fix" 69 __syntaxFix__: "syntax fix"
73}); 70});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js
index b9bb850..1992154 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/SimpleMessagePanel.js
@@ -1,282 +1,279 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Common.Components.SimpleMessagePanel = function(args) { 28Clipperz.PM.UI.Common.Components.SimpleMessagePanel = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Common.Components.SimpleMessagePanel.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Common.Components.SimpleMessagePanel.superclass.constructor.apply(this, arguments);
35 32
36 this._title = args.title || Clipperz.Base.exception.raise('MandatoryParameter'); 33 this._title = args.title || Clipperz.Base.exception.raise('MandatoryParameter');
37 this._text = args.text || Clipperz.Base.exception.raise('MandatoryParameter'); 34 this._text = args.text || Clipperz.Base.exception.raise('MandatoryParameter');
38 this._type = args.type || Clipperz.Base.exception.raise('MandatoryParameter'); //ALERT, INFO, ERROR 35 this._type = args.type || Clipperz.Base.exception.raise('MandatoryParameter'); //ALERT, INFO, ERROR
39 this._buttons = args.buttons || Clipperz.Base.exception.raise('MandatoryParameter'); 36 this._buttons = args.buttons || Clipperz.Base.exception.raise('MandatoryParameter');
40 37
41 this._buttonComponents = []; 38 this._buttonComponents = [];
42 this._deferred = null; 39 this._deferred = null;
43 40
44 this.renderModalMask(); 41 this.renderModalMask();
45 42
46 return this; 43 return this;
47} 44}
48 45
49//============================================================================= 46//=============================================================================
50 47
51Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.SimpleMessagePanel, Clipperz.PM.UI.Common.Components.BaseComponent, { 48Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.SimpleMessagePanel, Clipperz.PM.UI.Common.Components.BaseComponent, {
52 49
53 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
54 51
55 'toString': function () { 52 'toString': function () {
56 return "Clipperz.PM.UI.Common.Components.SimpleMessagePanel component"; 53 return "Clipperz.PM.UI.Common.Components.SimpleMessagePanel component";
57 }, 54 },
58 55
59 //------------------------------------------------------------------------- 56 //-------------------------------------------------------------------------
60 57
61 'deferred': function() { 58 'deferred': function() {
62 if (this._deferred == null) { 59 if (this._deferred == null) {
63 this._deferred = new Clipperz.Async.Deferred("SimpleMessagePanel.deferred", {trace:false}); 60 this._deferred = new Clipperz.Async.Deferred("SimpleMessagePanel.deferred", {trace:false});
64 } 61 }
65 62
66 return this._deferred; 63 return this._deferred;
67 }, 64 },
68 65
69 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
70 67
71 'title': function () { 68 'title': function () {
72 return this._title; 69 return this._title;
73 }, 70 },
74 71
75 'setTitle': function (aValue) { 72 'setTitle': function (aValue) {
76 this._title = aValue; 73 this._title = aValue;
77 74
78 if (this.getElement('title') != null) { 75 if (this.getElement('title') != null) {
79 this.getElement('title').innerHTML = aValue; 76 this.getElement('title').innerHTML = aValue;
80 } 77 }
81 }, 78 },
82 79
83 //------------------------------------------------------------------------- 80 //-------------------------------------------------------------------------
84 81
85 'text': function () { 82 'text': function () {
86 return this._text; 83 return this._text;
87 }, 84 },
88 85
89 'setText': function (aValue) { 86 'setText': function (aValue) {
90 this._text = aValue; 87 this._text = aValue;
91 88
92 if (this.getElement('text') != null) { 89 if (this.getElement('text') != null) {
93 this.getElement('text').innerHTML = aValue; 90 this.getElement('text').innerHTML = aValue;
94 } 91 }
95 }, 92 },
96 93
97 //------------------------------------------------------------------------- 94 //-------------------------------------------------------------------------
98 95
99 'type': function () { 96 'type': function () {
100 return this._type; 97 return this._type;
101 }, 98 },
102 99
103 'setType': function (aValue) { 100 'setType': function (aValue) {
104 if (this.getElement('icon') != null) { 101 if (this.getElement('icon') != null) {
105 MochiKit.DOM.removeElementClass(this.getId('icon'), this._type); 102 MochiKit.DOM.removeElementClass(this.getId('icon'), this._type);
106 MochiKit.DOM.addElementClass(this.getId('icon'), aValue); 103 MochiKit.DOM.addElementClass(this.getId('icon'), aValue);
107 } 104 }
108 105
109 this._type = aValue; 106 this._type = aValue;
110 }, 107 },
111 108
112 //------------------------------------------------------------------------- 109 //-------------------------------------------------------------------------
113 110
114 'buttons': function () { 111 'buttons': function () {
115 return this._buttons; 112 return this._buttons;
116 }, 113 },
117 114
118 'setButtons': function (someValues) { 115 'setButtons': function (someValues) {
119 MochiKit.Iter.forEach(this.buttonComponents(), MochiKit.Base.methodcaller('clear')); 116 MochiKit.Iter.forEach(this.buttonComponents(), MochiKit.Base.methodcaller('clear'));
120 117
121 this._buttons = someValues; 118 this._buttons = someValues;
122 119
123 if (this.getElement('buttonArea') != null) { 120 if (this.getElement('buttonArea') != null) {
124 this.renderButtons(); 121 this.renderButtons();
125 } 122 }
126 }, 123 },
127 124
128 //......................................................................... 125 //.........................................................................
129 126
130 'buttonComponents': function () { 127 'buttonComponents': function () {
131 return this._buttonComponents; 128 return this._buttonComponents;
132 }, 129 },
133 130
134 //------------------------------------------------------------------------- 131 //-------------------------------------------------------------------------
135 132
136 'renderSelf': function() { 133 'renderSelf': function() {
137 this.append(this.element(), {tag:'div', cls:'SimpleMessagePanel', id:this.getId('panel'), children: [ 134 this.append(this.element(), {tag:'div', cls:'SimpleMessagePanel', id:this.getId('panel'), children: [
138 {tag:'div', cls:'header', children:[]}, 135 {tag:'div', cls:'header', children:[]},
139 {tag:'div', cls:'body', children:[ 136 {tag:'div', cls:'body', children:[
140 {tag:'div', id:this.getId('icon'),cls:'img ' + this.type(), children:[{tag:'div'}]}, 137 {tag:'div', id:this.getId('icon'),cls:'img ' + this.type(), children:[{tag:'div'}]},
141 {tag:'h3', id:this.getId('title'),html:this.title()}, 138 {tag:'h3', id:this.getId('title'),html:this.title()},
142 {tag:'p', id:this.getId('text'),html:this.text()}, 139 {tag:'p', id:this.getId('text'),html:this.text()},
143 {tag:'div', id:this.getId('container')}, 140 {tag:'div', id:this.getId('container')},
144 {tag:'div', id:this.getId('buttonArea'), cls:'buttonArea', children:[]} 141 {tag:'div', id:this.getId('buttonArea'), cls:'buttonArea', children:[]}
145 ]}, 142 ]},
146 {tag:'div', cls:'footer', children:[]} 143 {tag:'div', cls:'footer', children:[]}
147 ]}); 144 ]});
148 145
149 MochiKit.Signal.connect(this.getId('panel'), 'onkeydown', this, 'keyDownHandler'); 146 MochiKit.Signal.connect(this.getId('panel'), 'onkeydown', this, 'keyDownHandler');
150 147
151 this.renderButtons(); 148 this.renderButtons();
152 }, 149 },
153 150
154 //------------------------------------------------------------------------- 151 //-------------------------------------------------------------------------
155 152
156 'renderButtons': function () { 153 'renderButtons': function () {
157 this.getElement('buttonArea').innerHTML = ''; 154 this.getElement('buttonArea').innerHTML = '';
158 155
159 MochiKit.Base.map(MochiKit.Base.bind(function (aButton) { 156 MochiKit.Base.map(MochiKit.Base.bind(function (aButton) {
160 var buttonElement; 157 var buttonElement;
161 var buttonComponent; 158 var buttonComponent;
162 159
163 // element = this.append(this.getElement('buttonArea'), {tag:'div', cls:'button' + (aButton['isDefault'] === true ? ' default' : ''), children:[ 160 // element = this.append(this.getElement('buttonArea'), {tag:'div', cls:'button' + (aButton['isDefault'] === true ? ' default' : ''), children:[
164 // {tag:'a', href:'#'/*, id:this.getId('buttonLink')*/, html:aButton['text']} 161 // {tag:'a', href:'#'/*, id:this.getId('buttonLink')*/, html:aButton['text']}
165 // ]}); 162 // ]});
166 163
167 buttonElement = this.append(this.getElement('buttonArea'), {tag:'div'}); 164 buttonElement = this.append(this.getElement('buttonArea'), {tag:'div'});
168 buttonComponent = new Clipperz.PM.UI.Common.Components.Button({'element':buttonElement, 'text':aButton['text'], 'isDefault':aButton['isDefault']}); 165 buttonComponent = new Clipperz.PM.UI.Common.Components.Button({'element':buttonElement, 'text':aButton['text'], 'isDefault':aButton['isDefault']});
169 this.buttonComponents().push(buttonComponent); 166 this.buttonComponents().push(buttonComponent);
170 167
171 MochiKit.Signal.connect(buttonComponent, 'onclick', MochiKit.Base.method(this, 'buttonEventHandler', aButton)); 168 MochiKit.Signal.connect(buttonComponent, 'onclick', MochiKit.Base.method(this, 'buttonEventHandler', aButton));
172 }, this), MochiKit.Iter.reversed(this.buttons())); 169 }, this), MochiKit.Iter.reversed(this.buttons()));
173 }, 170 },
174 171
175 //------------------------------------------------------------------------- 172 //-------------------------------------------------------------------------
176 173
177 'displayElement': function() { 174 'displayElement': function() {
178 return this.getElement('panel'); 175 return this.getElement('panel');
179 }, 176 },
180 177
181 //------------------------------------------------------------------------- 178 //-------------------------------------------------------------------------
182 179
183 'closeOk': function () { 180 'closeOk': function () {
184 this.deferred().callback(); 181 this.deferred().callback();
185 this._deferred = null; 182 this._deferred = null;
186 }, 183 },
187 184
188 'closeCancel': function () { 185 'closeCancel': function () {
189 this.deferred().cancel(); 186 this.deferred().cancel();
190 this._deferred = null; 187 this._deferred = null;
191 }, 188 },
192 189
193 'closeError': function () { 190 'closeError': function () {
194 this.deferred().errback(); 191 this.deferred().errback();
195 this._deferred = null; 192 this._deferred = null;
196 }, 193 },
197 194
198 //------------------------------------------------------------------------- 195 //-------------------------------------------------------------------------
199 196
200 'buttonEventHandler': function(aButton, anEvent) { 197 'buttonEventHandler': function(aButton, anEvent) {
201 anEvent.preventDefault(); 198 anEvent.preventDefault();
202 199
203 // MochiKit.Signal.signal(this, 'cancelEvent'); 200 // MochiKit.Signal.signal(this, 'cancelEvent');
204 switch (aButton['result']) { 201 switch (aButton['result']) {
205 case 'OK': 202 case 'OK':
206//console.log("==> OK"); 203//console.log("==> OK");
207 this.closeOk(); 204 this.closeOk();
208 break; 205 break;
209 case 'CANCEL': 206 case 'CANCEL':
210//console.log("==> CANCEL"); 207//console.log("==> CANCEL");
211 this.closeCancel(); 208 this.closeCancel();
212 break; 209 break;
213 default: 210 default:
214//console.log("==> ????"); 211//console.log("==> ????");
215 this.closeError(); 212 this.closeError();
216 break; 213 break;
217 } 214 }
218//console.log("<=="); 215//console.log("<==");
219 }, 216 },
220 217
221 //------------------------------------------------------------------------- 218 //-------------------------------------------------------------------------
222 219
223 'deferredShow': function (someArgs, aResult) { 220 'deferredShow': function (someArgs, aResult) {
224 this.deferredShowModal(someArgs); 221 this.deferredShowModal(someArgs);
225 222
226 this.deferred().addMethod(this, 'deferredHideModal', {closeToElement:someArgs.onOkCloseToElement }); 223 this.deferred().addMethod(this, 'deferredHideModal', {closeToElement:someArgs.onOkCloseToElement });
227 this.deferred().addErrback (MochiKit.Base.method(this, 'deferredHideModal', {closeToElement:someArgs.onCancelCloseToElement })); 224 this.deferred().addErrback (MochiKit.Base.method(this, 'deferredHideModal', {closeToElement:someArgs.onCancelCloseToElement }));
228 this.deferred().addCallback(MochiKit.Async.succeed, aResult); 225 this.deferred().addCallback(MochiKit.Async.succeed, aResult);
229 226
230 return this.deferred(); 227 return this.deferred();
231 }, 228 },
232 229
233 //------------------------------------------------------------------------- 230 //-------------------------------------------------------------------------
234 231
235 'modalDialogMask': function () { 232 'modalDialogMask': function () {
236 return this.getId('modalDialogMask'); 233 return this.getId('modalDialogMask');
237 }, 234 },
238 235
239 'modalDialog': function () { 236 'modalDialog': function () {
240 return this.getId('modalDialog'); 237 return this.getId('modalDialog');
241 }, 238 },
242 239
243 'modalDialogFrame': function() { 240 'modalDialogFrame': function() {
244 return this.getId('modalDialogFrame'); 241 return this.getId('modalDialogFrame');
245 }, 242 },
246 243
247 //------------------------------------------------------------------------- 244 //-------------------------------------------------------------------------
248 245
249 'renderModalMask': function () { 246 'renderModalMask': function () {
250 Clipperz.DOM.Helper.append(MochiKit.DOM.currentDocument().body, 247 Clipperz.DOM.Helper.append(MochiKit.DOM.currentDocument().body,
251 {tag:'div', id:this.getId('modalDialogWrapper'), cls:'modalDialogWrapper simpleMessagePanelMask', children:[ 248 {tag:'div', id:this.getId('modalDialogWrapper'), cls:'modalDialogWrapper simpleMessagePanelMask', children:[
252 {tag:'div', id:this.getId('modalDialogMask'), cls:'modalDialogMask simpleMessagePanelMask'}, 249 {tag:'div', id:this.getId('modalDialogMask'), cls:'modalDialogMask simpleMessagePanelMask'},
253 {tag:'div', id:this.getId('modalDialogFrame'), cls:'modalDialogFrame simpleMessagePanelMask'}, 250 {tag:'div', id:this.getId('modalDialogFrame'), cls:'modalDialogFrame simpleMessagePanelMask'},
254 {tag:'div', id:this.getId('modalDialog'), cls:'modalDialog simpleMessagePanelMask'} 251 {tag:'div', id:this.getId('modalDialog'), cls:'modalDialog simpleMessagePanelMask'}
255 ]} 252 ]}
256 ); 253 );
257 254
258 MochiKit.Style.hideElement(this.getId('modalDialogMask')); 255 MochiKit.Style.hideElement(this.getId('modalDialogMask'));
259 MochiKit.Style.hideElement(this.getId('modalDialogFrame')); 256 MochiKit.Style.hideElement(this.getId('modalDialogFrame'));
260 }, 257 },
261 258
262 //------------------------------------------------------------------------- 259 //-------------------------------------------------------------------------
263 260
264 'keyDownHandler': function (anEvent) { 261 'keyDownHandler': function (anEvent) {
265 if (anEvent.key().string == 'KEY_ENTER') { 262 if (anEvent.key().string == 'KEY_ENTER') {
266 anEvent.preventDefault(); 263 anEvent.preventDefault();
267//console.log("13 - RETURN ?", this); 264//console.log("13 - RETURN ?", this);
268 this.closeOk(); 265 this.closeOk();
269//console.log('<<< 13') 266//console.log('<<< 13')
270 } 267 }
271 268
272 if (anEvent.key().string == 'KEY_ESCAPE') { 269 if (anEvent.key().string == 'KEY_ESCAPE') {
273 anEvent.preventDefault(); 270 anEvent.preventDefault();
274//console.log("27 - ESC ?", this); 271//console.log("27 - ESC ?", this);
275 this.closeCancel(); 272 this.closeCancel();
276//console.log("<<< 27"); 273//console.log("<<< 27");
277 } 274 }
278 }, 275 },
279 276
280 //------------------------------------------------------------------------- 277 //-------------------------------------------------------------------------
281 __syntaxFix__: "syntax fix" 278 __syntaxFix__: "syntax fix"
282}); 279});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/TabPanelComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/TabPanelComponent.js
index afb3bf9..936514a 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/TabPanelComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/TabPanelComponent.js
@@ -1,69 +1,66 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31Clipperz.PM.UI.Common.Components.TabPanelComponent = function(args) { 28Clipperz.PM.UI.Common.Components.TabPanelComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 Clipperz.PM.UI.Common.Components.TabPanelComponent.superclass.constructor.call(this, args); 30 Clipperz.PM.UI.Common.Components.TabPanelComponent.superclass.constructor.call(this, args);
34 31
35 this._tabPanelController = null; 32 this._tabPanelController = null;
36 33
37 return this; 34 return this;
38} 35}
39 36
40//============================================================================= 37//=============================================================================
41 38
42Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.TabPanelComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 39Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.TabPanelComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
43 40
44 'toString': function () { 41 'toString': function () {
45 return "Clipperz.PM.UI.Common.Components.TabPanelComponent component"; 42 return "Clipperz.PM.UI.Common.Components.TabPanelComponent component";
46 }, 43 },
47 44
48 //------------------------------------------------------------------------- 45 //-------------------------------------------------------------------------
49 46
50 'tabPanelControllerConfiguration': function() { 47 'tabPanelControllerConfiguration': function() {
51 return this._tabPanelControllerConfiguration; 48 return this._tabPanelControllerConfiguration;
52 }, 49 },
53 50
54 'tabPanelController': function() { 51 'tabPanelController': function() {
55 if (this._tabPanelController == null) { 52 if (this._tabPanelController == null) {
56 this._tabPanelController = new Clipperz.PM.UI.Common.Controllers.TabPanelController({component:this, configuration:this.tabPanelControllerConfiguration()}); 53 this._tabPanelController = new Clipperz.PM.UI.Common.Controllers.TabPanelController({component:this, configuration:this.tabPanelControllerConfiguration()});
57 } 54 }
58 55
59 return this._tabPanelController; 56 return this._tabPanelController;
60 }, 57 },
61 58
62 'initiallySelectedTab': function() { 59 'initiallySelectedTab': function() {
63 return this._initiallySelectedTab; 60 return this._initiallySelectedTab;
64 }, 61 },
65 62
66 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
67 __syntaxFix__: "syntax fix" 64 __syntaxFix__: "syntax fix"
68 65
69}); 66});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Tooltip.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Tooltip.js
index 7507b86..095e8ed 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Tooltip.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/Tooltip.js
@@ -1,216 +1,213 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31Clipperz.PM.UI.Common.Components.Tooltip = function(args) { 28Clipperz.PM.UI.Common.Components.Tooltip = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Common.Components.Tooltip.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Common.Components.Tooltip.superclass.constructor.apply(this, arguments);
35 32
36 this._element = args.element|| Clipperz.Base.exception.raise('MandatoryParameter'); 33 this._element = args.element|| Clipperz.Base.exception.raise('MandatoryParameter');
37 this._text = args.text || Clipperz.Base.exception.raise('MandatoryParameter'); 34 this._text = args.text || Clipperz.Base.exception.raise('MandatoryParameter');
38 this._position = args.position || 'BELOW'; //'BELOW', 'ABOVE', 'LEFT', 'RIGHT' 35 this._position = args.position || 'BELOW'; //'BELOW', 'ABOVE', 'LEFT', 'RIGHT'
39 36
40 this._boxDimensions = null; 37 this._boxDimensions = null;
41 this._enabled = (typeof(args.enabled) == 'undefined' ? true : args.enabled); 38 this._enabled = (typeof(args.enabled) == 'undefined' ? true : args.enabled);
42 this._isVisible = false; 39 this._isVisible = false;
43 40
44 this.renderSelf(); 41 this.renderSelf();
45 42
46 return this; 43 return this;
47} 44}
48 45
49//============================================================================= 46//=============================================================================
50 47
51Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.Tooltip, Clipperz.PM.UI.Common.Components.BaseComponent, { 48Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.Tooltip, Clipperz.PM.UI.Common.Components.BaseComponent, {
52 49
53 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
54 51
55 'toString': function () { 52 'toString': function () {
56 return "Clipperz.PM.UI.Common.Components.Tooltip component"; 53 return "Clipperz.PM.UI.Common.Components.Tooltip component";
57 }, 54 },
58 55
59 //------------------------------------------------------------------------- 56 //-------------------------------------------------------------------------
60 57
61 'text': function () { 58 'text': function () {
62 return this._text; 59 return this._text;
63 }, 60 },
64 61
65 'setText': function (aValue) { 62 'setText': function (aValue) {
66 this._text = aValue; 63 this._text = aValue;
67 }, 64 },
68 65
69 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
70 67
71 'position': function () { 68 'position': function () {
72 return this._position; 69 return this._position;
73 }, 70 },
74 71
75 'setPosition': function (aValue) { 72 'setPosition': function (aValue) {
76 this._position = aValue; 73 this._position = aValue;
77 }, 74 },
78 75
79 //------------------------------------------------------------------------- 76 //-------------------------------------------------------------------------
80 77
81 'enabled': function () { 78 'enabled': function () {
82 return this._enabled; 79 return this._enabled;
83 }, 80 },
84 81
85 'setIsEnabled': function (aValue) { 82 'setIsEnabled': function (aValue) {
86 this._enabled = aValue; 83 this._enabled = aValue;
87 }, 84 },
88 85
89 //------------------------------------------------------------------------- 86 //-------------------------------------------------------------------------
90 87
91 'isVisible': function () { 88 'isVisible': function () {
92 return this._isVisible; 89 return this._isVisible;
93 }, 90 },
94 91
95 'setIsVisible': function (aValue) { 92 'setIsVisible': function (aValue) {
96 this._isVisible = aValue; 93 this._isVisible = aValue;
97 }, 94 },
98 95
99 //------------------------------------------------------------------------- 96 //-------------------------------------------------------------------------
100 97
101 'renderSelf': function() { 98 'renderSelf': function() {
102 // this.append(this.element(), {tag:'div', id:this.getId('tooltip'), cls:'tooltip ' + this.position(), children:[ 99 // this.append(this.element(), {tag:'div', id:this.getId('tooltip'), cls:'tooltip ' + this.position(), children:[
103 // this.append(MochiKit.DOM.currentDocument().body, {tag:'div', id:this.getId('tooltip'), cls:'tooltip ' + this.position(), children:[ 100 // this.append(MochiKit.DOM.currentDocument().body, {tag:'div', id:this.getId('tooltip'), cls:'tooltip ' + this.position(), children:[
104 this.append(MochiKit.DOM.getElement('Clipperz_PM_UI_Common_Components_Tooltip_wrapperNode'), {tag:'div', id:this.getId('tooltip'), cls:'tooltip ' + this.position(), children:[ 101 this.append(MochiKit.DOM.getElement('Clipperz_PM_UI_Common_Components_Tooltip_wrapperNode'), {tag:'div', id:this.getId('tooltip'), cls:'tooltip ' + this.position(), children:[
105 {tag:'div', id:this.getId('body'), cls:'tooltip_body', children:[ 102 {tag:'div', id:this.getId('body'), cls:'tooltip_body', children:[
106 {tag:'div', cls:'tooltip_text', children:[ 103 {tag:'div', cls:'tooltip_text', children:[
107 {tag:'span', html:this.text()} 104 {tag:'span', html:this.text()}
108 ]}, 105 ]},
109 {tag:'div', id:this.getId('footer'), cls:'tooltip_footer'} 106 {tag:'div', id:this.getId('footer'), cls:'tooltip_footer'}
110 ]}, 107 ]},
111 {tag:'div', id:this.getId('arrow'), cls:'tooltip_arrow'} 108 {tag:'div', id:this.getId('arrow'), cls:'tooltip_arrow'}
112 ]}); 109 ]});
113 110
114 this._boxDimensions = MochiKit.Style.getElementDimensions(this.getId('body')); 111 this._boxDimensions = MochiKit.Style.getElementDimensions(this.getId('body'));
115 // this._boxDimensions.h += MochiKit.Style.getElementDimensions(this.getId('footer')).h; 112 // this._boxDimensions.h += MochiKit.Style.getElementDimensions(this.getId('footer')).h;
116 113
117 MochiKit.Style.hideElement(this.displayElement()); 114 MochiKit.Style.hideElement(this.displayElement());
118 MochiKit.Signal.connect(this.element(), 'onmouseenter', this, 'show'); 115 MochiKit.Signal.connect(this.element(), 'onmouseenter', this, 'show');
119 MochiKit.Signal.connect(this.element(), 'onmouseleave', this, 'hide'); 116 MochiKit.Signal.connect(this.element(), 'onmouseleave', this, 'hide');
120 }, 117 },
121 118
122 //----------------------------------------------------- 119 //-----------------------------------------------------
123 120
124 'displayElement': function() { 121 'displayElement': function() {
125 return this.getElement('tooltip'); 122 return this.getElement('tooltip');
126 }, 123 },
127 124
128 //------------------------------------------------------------------------- 125 //-------------------------------------------------------------------------
129 126
130 'boxDimensions': function () { 127 'boxDimensions': function () {
131 return this._boxDimensions; 128 return this._boxDimensions;
132 }, 129 },
133 130
134 //------------------------------------------------------------------------- 131 //-------------------------------------------------------------------------
135 132
136 'show': function () { 133 'show': function () {
137 var elementSizeAndPosition; 134 var elementSizeAndPosition;
138 var arrowPosition; 135 var arrowPosition;
139 var bodyPosition; 136 var bodyPosition;
140 137
141 if (this.isVisible() == false) { 138 if (this.isVisible() == false) {
142 arrowPosition = {}; 139 arrowPosition = {};
143 bodyPosition = {}; 140 bodyPosition = {};
144 141
145 this.setIsVisible(true); 142 this.setIsVisible(true);
146 elementSizeAndPosition = Clipperz.Style.getSizeAndPosition(this.element()); 143 elementSizeAndPosition = Clipperz.Style.getSizeAndPosition(this.element());
147//console.log("ELEMENT SIZE AND POSITION", Clipperz.Base.serializeJSON(elementSizeAndPosition)); 144//console.log("ELEMENT SIZE AND POSITION", Clipperz.Base.serializeJSON(elementSizeAndPosition));
148//console.log("BOX DIMENSIONS", Clipperz.Base.serializeJSON(this.boxDimensions())); 145//console.log("BOX DIMENSIONS", Clipperz.Base.serializeJSON(this.boxDimensions()));
149 switch (this.position()) { 146 switch (this.position()) {
150 case 'ABOVE': 147 case 'ABOVE':
151//console.log("ABOVE"); 148//console.log("ABOVE");
152 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px'); 149 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px');
153 bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2); 150 bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2);
154 bodyPosition.y = elementSizeAndPosition.position.y - this.boxDimensions().h - 13; 151 bodyPosition.y = elementSizeAndPosition.position.y - this.boxDimensions().h - 13;
155 152
156 arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2); 153 arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2);
157 arrowPosition.y = elementSizeAndPosition.position.y - 13; 154 arrowPosition.y = elementSizeAndPosition.position.y - 13;
158 break; 155 break;
159 case 'BELOW': 156 case 'BELOW':
160//console.log("BELOW"); 157//console.log("BELOW");
161 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px'); 158 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px');
162 bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2); 159 bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2);
163 bodyPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h + 13; 160 bodyPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h + 13;
164 161
165 arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2); 162 arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2);
166 arrowPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h; 163 arrowPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h;
167 break; 164 break;
168 case 'LEFT': 165 case 'LEFT':
169//console.log("LEFT"); 166//console.log("LEFT");
170 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px'); 167 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px');
171 bodyPosition.x = elementSizeAndPosition.position.x - this.boxDimensions().w - 13; 168 bodyPosition.x = elementSizeAndPosition.position.x - this.boxDimensions().w - 13;
172 bodyPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - this.boxDimensions().h/2); 169 bodyPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - this.boxDimensions().h/2);
173 170
174 arrowPosition.x = elementSizeAndPosition.position.x -13; 171 arrowPosition.x = elementSizeAndPosition.position.x -13;
175 arrowPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - 36/2); 172 arrowPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - 36/2);
176 break; 173 break;
177 case 'RIGHT': 174 case 'RIGHT':
178//console.log("RIGHT"); 175//console.log("RIGHT");
179 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px'); 176 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px');
180 bodyPosition.x = elementSizeAndPosition.position.x + elementSizeAndPosition.dimensions.w + 13; 177 bodyPosition.x = elementSizeAndPosition.position.x + elementSizeAndPosition.dimensions.w + 13;
181 bodyPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - this.boxDimensions().h/2); 178 bodyPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - this.boxDimensions().h/2);
182 179
183 arrowPosition.x = elementSizeAndPosition.position.x + elementSizeAndPosition.dimensions.w; 180 arrowPosition.x = elementSizeAndPosition.position.x + elementSizeAndPosition.dimensions.w;
184 arrowPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - 36/2); 181 arrowPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - 36/2);
185 break; 182 break;
186 } 183 }
187//console.log("X: " + bodyPosition.x + ", Y: " + bodyPosition.y); 184//console.log("X: " + bodyPosition.x + ", Y: " + bodyPosition.y);
188 185
189 MochiKit.Style.setElementPosition(this.getId('body'), bodyPosition); 186 MochiKit.Style.setElementPosition(this.getId('body'), bodyPosition);
190 MochiKit.Style.setElementPosition(this.getId('arrow'), arrowPosition); 187 MochiKit.Style.setElementPosition(this.getId('arrow'), arrowPosition);
191 MochiKit.Visual.appear(this.displayElement(), {duration:0.4}); 188 MochiKit.Visual.appear(this.displayElement(), {duration:0.4});
192 } 189 }
193 }, 190 },
194 191
195 'hide': function () { 192 'hide': function () {
196 if (this.isVisible() == true) { 193 if (this.isVisible() == true) {
197 MochiKit.Visual.fade(this.displayElement(), {duration:0.4}); 194 MochiKit.Visual.fade(this.displayElement(), {duration:0.4});
198 this.setIsVisible(false); 195 this.setIsVisible(false);
199 } 196 }
200 }, 197 },
201 198
202 //------------------------------------------------------------------------- 199 //-------------------------------------------------------------------------
203/* 200/*
204 'shouldRemoveElementWhenClearningUp': function () { 201 'shouldRemoveElementWhenClearningUp': function () {
205 return false; 202 return false;
206 }, 203 },
207*/ 204*/
208 //------------------------------------------------------------------------- 205 //-------------------------------------------------------------------------
209 __syntaxFix__: "syntax fix" 206 __syntaxFix__: "syntax fix"
210}); 207});
211 208
212Clipperz.PM.UI.Common.Components.Tooltip.initTooltips = function () { 209Clipperz.PM.UI.Common.Components.Tooltip.initTooltips = function () {
213 Clipperz.DOM.Helper.insertBefore(MochiKit.DOM.currentDocument().body.childNodes[0], {tag:'div', id:'Clipperz_PM_UI_Common_Components_Tooltip_wrapperNode'}); 210 Clipperz.DOM.Helper.insertBefore(MochiKit.DOM.currentDocument().body.childNodes[0], {tag:'div', id:'Clipperz_PM_UI_Common_Components_Tooltip_wrapperNode'});
214} 211}
215 212
216MochiKit.DOM.addLoadEvent(Clipperz.PM.UI.Common.Components.Tooltip.initTooltips); 213MochiKit.DOM.addLoadEvent(Clipperz.PM.UI.Common.Components.Tooltip.initTooltips);
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/TranslatorWidget.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/TranslatorWidget.js
index c31969e..c41fc7c 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Components/TranslatorWidget.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Components/TranslatorWidget.js
@@ -1,170 +1,167 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31Clipperz.PM.UI.Common.Components.TranslatorWidget = function(args) { 28Clipperz.PM.UI.Common.Components.TranslatorWidget = function(args) {
32Clipperz.log(">>> TranslatorWidget.new"); 29Clipperz.log(">>> TranslatorWidget.new");
33 args = args || {}; 30 args = args || {};
34 31
35 Clipperz.PM.UI.Common.Components.TranslatorWidget.superclass.constructor.apply(this, arguments); 32 Clipperz.PM.UI.Common.Components.TranslatorWidget.superclass.constructor.apply(this, arguments);
36 33
37 // this._element = args.element|| Clipperz.Base.exception.raise('MandatoryParameter'); 34 // this._element = args.element|| Clipperz.Base.exception.raise('MandatoryParameter');
38 // this._stringID = args.stringID || MochiKit.DOM.getNodeAttribute(this.element(), 'stringID')|| Clipperz.Base.exception.raise('MandatoryParameter'); 35 // this._stringID = args.stringID || MochiKit.DOM.getNodeAttribute(this.element(), 'stringID')|| Clipperz.Base.exception.raise('MandatoryParameter');
39 36
40 //MochiKit.Signal.connect(this.element(), 'onmouseenter', this, 'show'); 37 //MochiKit.Signal.connect(this.element(), 'onmouseenter', this, 'show');
41 //MochiKit.Signal.connect(this.element(), 'onmouseleave', this, 'hide'); 38 //MochiKit.Signal.connect(this.element(), 'onmouseleave', this, 'hide');
42 39
43Clipperz.log("<<< TranslatorWidget.new"); 40Clipperz.log("<<< TranslatorWidget.new");
44 return this; 41 return this;
45} 42}
46 43
47//============================================================================= 44//=============================================================================
48 45
49Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.TranslatorWidget, Clipperz.PM.UI.Common.Components.BaseComponent, { 46Clipperz.Base.extend(Clipperz.PM.UI.Common.Components.TranslatorWidget, Clipperz.PM.UI.Common.Components.BaseComponent, {
50 47
51 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
52 49
53 'toString': function () { 50 'toString': function () {
54 return "Clipperz.PM.UI.Common.Components.TranslatorWidget component"; 51 return "Clipperz.PM.UI.Common.Components.TranslatorWidget component";
55 }, 52 },
56 53
57 //------------------------------------------------------------------------- 54 //-------------------------------------------------------------------------
58/* 55/*
59 'renderSelf': function() { 56 'renderSelf': function() {
60 this.append(this.element(), {tag:'div', id:this.getId('tooltip'), cls:'tooltip ' + this.position(), children:[ 57 this.append(this.element(), {tag:'div', id:this.getId('tooltip'), cls:'tooltip ' + this.position(), children:[
61 {tag:'div', id:this.getId('body'), cls:'tooltip_body', children:[ 58 {tag:'div', id:this.getId('body'), cls:'tooltip_body', children:[
62 {tag:'div', cls:'tooltip_text', children:[ 59 {tag:'div', cls:'tooltip_text', children:[
63 {tag:'span', html:this.text()} 60 {tag:'span', html:this.text()}
64 ]}, 61 ]},
65 {tag:'div', id:this.getId('footer'), cls:'tooltip_footer'} 62 {tag:'div', id:this.getId('footer'), cls:'tooltip_footer'}
66 ]}, 63 ]},
67 {tag:'div', id:this.getId('arrow'), cls:'tooltip_arrow'} 64 {tag:'div', id:this.getId('arrow'), cls:'tooltip_arrow'}
68 ]}); 65 ]});
69 66
70 this._boxDimensions = MochiKit.Style.getElementDimensions(this.getId('body')); 67 this._boxDimensions = MochiKit.Style.getElementDimensions(this.getId('body'));
71 // this._boxDimensions.h += MochiKit.Style.getElementDimensions(this.getId('footer')).h; 68 // this._boxDimensions.h += MochiKit.Style.getElementDimensions(this.getId('footer')).h;
72 69
73 MochiKit.Style.hideElement(this.displayElement()); 70 MochiKit.Style.hideElement(this.displayElement());
74 MochiKit.Signal.connect(this.element(), 'onmouseenter', this, 'show'); 71 MochiKit.Signal.connect(this.element(), 'onmouseenter', this, 'show');
75 MochiKit.Signal.connect(this.element(), 'onmouseleave', this, 'hide'); 72 MochiKit.Signal.connect(this.element(), 'onmouseleave', this, 'hide');
76 }, 73 },
77*/ 74*/
78 //----------------------------------------------------- 75 //-----------------------------------------------------
79/* 76/*
80 'displayElement': function() { 77 'displayElement': function() {
81 return this.getElement('tooltip'); 78 return this.getElement('tooltip');
82 }, 79 },
83*/ 80*/
84 //------------------------------------------------------------------------- 81 //-------------------------------------------------------------------------
85/* 82/*
86 'boxDimensions': function () { 83 'boxDimensions': function () {
87 return this._boxDimensions; 84 return this._boxDimensions;
88 }, 85 },
89*/ 86*/
90 //------------------------------------------------------------------------- 87 //-------------------------------------------------------------------------
91 88
92 'show': function (anElement, aStringID) { 89 'show': function (anElement, aStringID) {
93 Clipperz.log(">>> Clipperz.PM.UI.Common.Components.TranslatorWidget.show: " + aStringID); 90 Clipperz.log(">>> Clipperz.PM.UI.Common.Components.TranslatorWidget.show: " + aStringID);
94/* 91/*
95 var elementSizeAndPosition; 92 var elementSizeAndPosition;
96 var arrowPosition; 93 var arrowPosition;
97 var bodyPosition; 94 var bodyPosition;
98 95
99 arrowPosition = {}; 96 arrowPosition = {};
100 bodyPosition = {}; 97 bodyPosition = {};
101 98
102 elementSizeAndPosition = Clipperz.Style.getSizeAndPosition(this.element()); 99 elementSizeAndPosition = Clipperz.Style.getSizeAndPosition(this.element());
103 switch (this.position()) { 100 switch (this.position()) {
104 case 'ABOVE': 101 case 'ABOVE':
105 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px'); 102 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px');
106 bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2); 103 bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2);
107 bodyPosition.y = elementSizeAndPosition.position.y - this.boxDimensions().h - 13; 104 bodyPosition.y = elementSizeAndPosition.position.y - this.boxDimensions().h - 13;
108 105
109 arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2); 106 arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2);
110 arrowPosition.y = elementSizeAndPosition.position.y - 13; 107 arrowPosition.y = elementSizeAndPosition.position.y - 13;
111 break; 108 break;
112 case 'BELOW': 109 case 'BELOW':
113 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px'); 110 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px');
114 bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2); 111 bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2);
115 bodyPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h + 13; 112 bodyPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h + 13;
116 113
117 arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2); 114 arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2);
118 arrowPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h; 115 arrowPosition.y = elementSizeAndPosition.position.y + elementSizeAndPosition.dimensions.h;
119 break; 116 break;
120 case 'LEFT': 117 case 'LEFT':
121 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px'); 118 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px');
122 bodyPosition.x = elementSizeAndPosition.position.x - this.boxDimensions().w - 13; 119 bodyPosition.x = elementSizeAndPosition.position.x - this.boxDimensions().w - 13;
123 bodyPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - this.boxDimensions().h/2); 120 bodyPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - this.boxDimensions().h/2);
124 121
125 arrowPosition.x = elementSizeAndPosition.position.x -13; 122 arrowPosition.x = elementSizeAndPosition.position.x -13;
126 arrowPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - 36/2); 123 arrowPosition.y = elementSizeAndPosition.position.y + (elementSizeAndPosition.dimensions.h/2 - 36/2);
127 break; 124 break;
128 case 'RIGHT': 125 case 'RIGHT':
129 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px'); 126 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:13, h:36}, 'px');
130 break; 127 break;
131 } 128 }
132 129
133 // MochiKit.Style.setElementPosition(this.getId('body'), bodyPosition); 130 // MochiKit.Style.setElementPosition(this.getId('body'), bodyPosition);
134 MochiKit.Style.setElementPosition(this.getId('body'), bodyPosition); 131 MochiKit.Style.setElementPosition(this.getId('body'), bodyPosition);
135 MochiKit.Style.setElementPosition(this.getId('arrow'), arrowPosition); 132 MochiKit.Style.setElementPosition(this.getId('arrow'), arrowPosition);
136 MochiKit.Visual.appear(this.displayElement(), {duration:0.4}); 133 MochiKit.Visual.appear(this.displayElement(), {duration:0.4});
137*/ 134*/
138 }, 135 },
139 136
140 //------------------------------------------------------------------------- 137 //-------------------------------------------------------------------------
141 138
142 'hide': function () { 139 'hide': function () {
143 Clipperz.log("<<< Clipperz.PM.UI.Common.Components.TranslatorWidget.hide"); 140 Clipperz.log("<<< Clipperz.PM.UI.Common.Components.TranslatorWidget.hide");
144 // MochiKit.Visual.fade(this.displayElement(), {duration:0.4}); 141 // MochiKit.Visual.fade(this.displayElement(), {duration:0.4});
145 }, 142 },
146 143
147 //------------------------------------------------------------------------- 144 //-------------------------------------------------------------------------
148 __syntaxFix__: "syntax fix" 145 __syntaxFix__: "syntax fix"
149}); 146});
150 147
151//############################################################################# 148//#############################################################################
152 149
153Clipperz.PM.UI.Common.Components.TranslatorWidget._widget = null; 150Clipperz.PM.UI.Common.Components.TranslatorWidget._widget = null;
154 151
155Clipperz.PM.UI.Common.Components.TranslatorWidget.widget = function () { 152Clipperz.PM.UI.Common.Components.TranslatorWidget.widget = function () {
156 if (Clipperz.PM.UI.Common.Components.TranslatorWidget._widget == null) { 153 if (Clipperz.PM.UI.Common.Components.TranslatorWidget._widget == null) {
157 Clipperz.PM.UI.Common.Components.TranslatorWidget._widget = new Clipperz.PM.UI.Common.Components.TranslatorWidget(); 154 Clipperz.PM.UI.Common.Components.TranslatorWidget._widget = new Clipperz.PM.UI.Common.Components.TranslatorWidget();
158 } 155 }
159 156
160 return Clipperz.PM.UI.Common.Components.TranslatorWidget._widget; 157 return Clipperz.PM.UI.Common.Components.TranslatorWidget._widget;
161} 158}
162Clipperz.PM.UI.Common.Components.TranslatorWidget.show = function (anElement, aStringID) { 159Clipperz.PM.UI.Common.Components.TranslatorWidget.show = function (anElement, aStringID) {
163 Clipperz.PM.UI.Common.Components.TranslatorWidget.widget().show(anElement, aStringID); 160 Clipperz.PM.UI.Common.Components.TranslatorWidget.widget().show(anElement, aStringID);
164} 161}
165 162
166Clipperz.PM.UI.Common.Components.TranslatorWidget.hide = function () { 163Clipperz.PM.UI.Common.Components.TranslatorWidget.hide = function () {
167 Clipperz.PM.UI.Common.Components.TranslatorWidget.widget().hide(); 164 Clipperz.PM.UI.Common.Components.TranslatorWidget.widget().hide();
168} 165}
169 166
170//############################################################################# 167//#############################################################################
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js
index e534435..5fd10f9 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js
@@ -1,267 +1,264 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Controllers');
30 27
31Clipperz.PM.UI.Common.Controllers.DirectLoginRunner = function(args) { 28Clipperz.PM.UI.Common.Controllers.DirectLoginRunner = function(args) {
32 this._directLogin = args['directLogin'] || Clipperz.Base.exception.raise('MandatoryParameter'); 29 this._directLogin = args['directLogin'] || Clipperz.Base.exception.raise('MandatoryParameter');
33 this._target = Clipperz.PM.Crypto.randomKey(); 30 this._target = Clipperz.PM.Crypto.randomKey();
34 31
35 return this; 32 return this;
36} 33}
37 34
38MochiKit.Base.update(Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.prototype, { 35MochiKit.Base.update(Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.prototype, {
39 36
40 'toString': function() { 37 'toString': function() {
41 return "Clipperz.PM.UI.Common.Controllers.DirectLoginRunner"; 38 return "Clipperz.PM.UI.Common.Controllers.DirectLoginRunner";
42 }, 39 },
43 40
44 //----------------------------------------------------------------------------- 41 //-----------------------------------------------------------------------------
45 42
46 'directLogin': function () { 43 'directLogin': function () {
47 return this._directLogin; 44 return this._directLogin;
48 }, 45 },
49 46
50 //----------------------------------------------------------------------------- 47 //-----------------------------------------------------------------------------
51 48
52 'target': function () { 49 'target': function () {
53 return this._target; 50 return this._target;
54 }, 51 },
55 52
56 //============================================================================= 53 //=============================================================================
57 54
58 'setWindowTitle': function (aWindow, aTitle) { 55 'setWindowTitle': function (aWindow, aTitle) {
59 aWindow.document.title = aTitle; 56 aWindow.document.title = aTitle;
60 }, 57 },
61 58
62 'setWindowBody': function (aWindow, anHTML) { 59 'setWindowBody': function (aWindow, anHTML) {
63 aWindow.document.body.innerHTML = anHTML; 60 aWindow.document.body.innerHTML = anHTML;
64 }, 61 },
65 62
66 //============================================================================= 63 //=============================================================================
67 64
68 'initialWindowSetup': function (aWindow) { 65 'initialWindowSetup': function (aWindow) {
69 this.setWindowTitle(aWindow, "Loading Clipperz Direct Login"); 66 this.setWindowTitle(aWindow, "Loading Clipperz Direct Login");
70 this.setWindowBody (aWindow, MochiKit.DOM.toHTML(MochiKit.DOM.H3("Loading Clipperz Direct Login ..."))); 67 this.setWindowBody (aWindow, MochiKit.DOM.toHTML(MochiKit.DOM.H3("Loading Clipperz Direct Login ...")));
71 }, 68 },
72 69
73 //----------------------------------------------------------------------------- 70 //-----------------------------------------------------------------------------
74 71
75 'updateWindowWithDirectLoginLabel': function (aWindow, aLabel) { 72 'updateWindowWithDirectLoginLabel': function (aWindow, aLabel) {
76 var titleText; 73 var titleText;
77 var bodyText; 74 var bodyText;
78 75
79 titleText = "Loading '__label__' Direct Login".replace(/__label__/, aLabel) 76 titleText = "Loading '__label__' Direct Login".replace(/__label__/, aLabel)
80 bodyText = "Loading '__label__' Direct Login... ".replace(/__label__/, aLabel) 77 bodyText = "Loading '__label__' Direct Login... ".replace(/__label__/, aLabel)
81 78
82 this.setWindowTitle(aWindow, titleText); 79 this.setWindowTitle(aWindow, titleText);
83 this.setWindowBody (aWindow, MochiKit.DOM.toHTML(MochiKit.DOM.H3(bodyText))); 80 this.setWindowBody (aWindow, MochiKit.DOM.toHTML(MochiKit.DOM.H3(bodyText)));
84 }, 81 },
85 82
86 //----------------------------------------------------------------------------- 83 //-----------------------------------------------------------------------------
87 84
88 'updateWindowWithHTMLContent': function (aWindow, anHtml) { 85 'updateWindowWithHTMLContent': function (aWindow, anHtml) {
89 this.setWindowBody(aWindow, anHtml); 86 this.setWindowBody(aWindow, anHtml);
90 }, 87 },
91 88
92 //============================================================================= 89 //=============================================================================
93 90
94 'submitLoginForm': function(aWindow, aSubmitFunction) { 91 'submitLoginForm': function(aWindow, aSubmitFunction) {
95 MochiKit.DOM.withWindow(aWindow, MochiKit.Base.bind(function () { 92 MochiKit.DOM.withWindow(aWindow, MochiKit.Base.bind(function () {
96 var formElement; 93 var formElement;
97 var submitButtons; 94 var submitButtons;
98 95
99 formElement = MochiKit.DOM.getElement('directLoginForm'); 96 formElement = MochiKit.DOM.getElement('directLoginForm');
100 97
101 submitButtons = MochiKit.Base.filter(function(anInputElement) { 98 submitButtons = MochiKit.Base.filter(function(anInputElement) {
102 return ((anInputElement.tagName.toLowerCase() == 'input') && (anInputElement.getAttribute('type').toLowerCase() == 'submit')); 99 return ((anInputElement.tagName.toLowerCase() == 'input') && (anInputElement.getAttribute('type').toLowerCase() == 'submit'));
103 }, formElement.elements); 100 }, formElement.elements);
104 101
105 if (submitButtons.length == 0) { 102 if (submitButtons.length == 0) {
106 if (typeof(formElement.submit) == 'function') { 103 if (typeof(formElement.submit) == 'function') {
107 formElement.submit(); 104 formElement.submit();
108 } else { 105 } else {
109 aSubmitFunction.apply(formElement); 106 aSubmitFunction.apply(formElement);
110 } 107 }
111/* 108/*
112 varformSubmitFunction; 109 varformSubmitFunction;
113 110
114 formSubmitFunction = MochiKit.Base.method(formElement, 'submit'); 111 formSubmitFunction = MochiKit.Base.method(formElement, 'submit');
115 if (Clipperz_IEisBroken == true) { 112 if (Clipperz_IEisBroken == true) {
116 formElement.submit(); 113 formElement.submit();
117 } else { 114 } else {
118 formSubmitFunction(); 115 formSubmitFunction();
119 } 116 }
120*/ 117*/
121 } else { 118 } else {
122 submitButtons[0].click(); 119 submitButtons[0].click();
123 } 120 }
124 }, this)); 121 }, this));
125 }, 122 },
126 123
127 //------------------------------------------------------------------------- 124 //-------------------------------------------------------------------------
128 125
129 'runSubmitFormDirectLogin': function (aWindow, someAttributes) { 126 'runSubmitFormDirectLogin': function (aWindow, someAttributes) {
130 var html; 127 var html;
131 var formElement; 128 var formElement;
132 var submitFunction; 129 var submitFunction;
133 130
134 formElement = MochiKit.DOM.FORM({ 131 formElement = MochiKit.DOM.FORM({
135 'id':'directLoginForm', 132 'id':'directLoginForm',
136 'method':someAttributes['formAttributes']['method'], 133 'method':someAttributes['formAttributes']['method'],
137 'action':someAttributes['formAttributes']['action'] 134 'action':someAttributes['formAttributes']['action']
138 }); 135 });
139 136
140 submitFunction = formElement.submit; 137 submitFunction = formElement.submit;
141 138
142 MochiKit.DOM.appendChildNodes(formElement, MochiKit.Base.map(function (anInputAttributes) { 139 MochiKit.DOM.appendChildNodes(formElement, MochiKit.Base.map(function (anInputAttributes) {
143 return MochiKit.DOM.INPUT({'type':'hidden', 'name':anInputAttributes[0], 'value':anInputAttributes[1]}); 140 return MochiKit.DOM.INPUT({'type':'hidden', 'name':anInputAttributes[0], 'value':anInputAttributes[1]});
144 }, MochiKit.Base.items(someAttributes['inputValues']))); 141 }, MochiKit.Base.items(someAttributes['inputValues'])));
145 142
146 html =''; 143 html ='';
147 html += '<h3>Loading ' + someAttributes['label'] + ' ...</h3>'; 144 html += '<h3>Loading ' + someAttributes['label'] + ' ...</h3>';
148 html +=MochiKit.DOM.appendChildNodes(MochiKit.DOM.DIV(), MochiKit.DOM.appendChildNodes(MochiKit.DOM.DIV({style:'display:none; visibility:hidden;'}), formElement)).innerHTML; 145 html +=MochiKit.DOM.appendChildNodes(MochiKit.DOM.DIV(), MochiKit.DOM.appendChildNodes(MochiKit.DOM.DIV({style:'display:none; visibility:hidden;'}), formElement)).innerHTML;
149 146
150 this.updateWindowWithHTMLContent(aWindow, html); 147 this.updateWindowWithHTMLContent(aWindow, html);
151 this.submitLoginForm(aWindow, submitFunction); 148 this.submitLoginForm(aWindow, submitFunction);
152 }, 149 },
153 150
154 //------------------------------------------------------------------------- 151 //-------------------------------------------------------------------------
155 152
156 'runHttpAuthDirectLogin': function(aWindow, someAttributes) { 153 'runHttpAuthDirectLogin': function(aWindow, someAttributes) {
157 var completeUrl; 154 var completeUrl;
158 var url; 155 var url;
159 156
160//console.log("runHttpAuthDirectLogin", someAttributes); 157//console.log("runHttpAuthDirectLogin", someAttributes);
161 url = someAttributes['inputValues']['url']; 158 url = someAttributes['inputValues']['url'];
162 159
163 if (/^https?\:\/\//.test(url) == false) { 160 if (/^https?\:\/\//.test(url) == false) {
164 url = 'http://' + url; 161 url = 'http://' + url;
165 } 162 }
166 163
167 if (Clipperz_IEisBroken === true) { 164 if (Clipperz_IEisBroken === true) {
168 completeUrl = url; 165 completeUrl = url;
169 } else { 166 } else {
170 var username; 167 var username;
171 var password; 168 var password;
172 169
173 username = someAttributes['inputValues']['username']; 170 username = someAttributes['inputValues']['username'];
174 password = someAttributes['inputValues']['password']; 171 password = someAttributes['inputValues']['password'];
175 /(^https?\:\/\/)?(.*)/.test(url); 172 /(^https?\:\/\/)?(.*)/.test(url);
176 173
177 completeUrl = RegExp.$1 + username + ':' + password + '@' + RegExp.$2; 174 completeUrl = RegExp.$1 + username + ':' + password + '@' + RegExp.$2;
178 } 175 }
179 176
180 window.open(completeUrl, this.target()); 177 window.open(completeUrl, this.target());
181 }, 178 },
182 179
183 //============================================================================= 180 //=============================================================================
184 181
185 'runDirectLogin': function (aWindow) { 182 'runDirectLogin': function (aWindow) {
186 var deferredResult; 183 var deferredResult;
187 184
188//console.log(">>> runDirectLogin"); 185//console.log(">>> runDirectLogin");
189 deferredResult = new Clipperz.Async.Deferred("DirectLoginRunner.openDirectLogin", {trace:false}); 186 deferredResult = new Clipperz.Async.Deferred("DirectLoginRunner.openDirectLogin", {trace:false});
190 deferredResult.addMethod(this, 'initialWindowSetup', aWindow); 187 deferredResult.addMethod(this, 'initialWindowSetup', aWindow);
191 deferredResult.addMethod(this.directLogin(), 'label'); 188 deferredResult.addMethod(this.directLogin(), 'label');
192 deferredResult.addMethod(this, 'updateWindowWithDirectLoginLabel', aWindow); 189 deferredResult.addMethod(this, 'updateWindowWithDirectLoginLabel', aWindow);
193 deferredResult.collectResults({ 190 deferredResult.collectResults({
194 'type': MochiKit.Base.method(this.directLogin(), 'type'), 191 'type': MochiKit.Base.method(this.directLogin(), 'type'),
195 'label': MochiKit.Base.method(this.directLogin(), 'label'), 192 'label': MochiKit.Base.method(this.directLogin(), 'label'),
196 'formAttributes':MochiKit.Base.method(this.directLogin(), 'formAttributes'), 193 'formAttributes':MochiKit.Base.method(this.directLogin(), 'formAttributes'),
197 'inputValues': MochiKit.Base.method(this.directLogin(), 'inputValues') 194 'inputValues': MochiKit.Base.method(this.directLogin(), 'inputValues')
198 }); 195 });
199//deferredResult.addCallback(function (aValue) { console.log("SOME ATTRIBUTES", aValue); return aValue; }); 196//deferredResult.addCallback(function (aValue) { console.log("SOME ATTRIBUTES", aValue); return aValue; });
200 deferredResult.addCallback(MochiKit.Base.bind(function (someAttributes) { 197 deferredResult.addCallback(MochiKit.Base.bind(function (someAttributes) {
201//console.log("SOME ATTRIBUTES", someAttributes); 198//console.log("SOME ATTRIBUTES", someAttributes);
202 switch (someAttributes['type']) { 199 switch (someAttributes['type']) {
203 case 'http_auth': 200 case 'http_auth':
204 this.runHttpAuthDirectLogin(aWindow, someAttributes); 201 this.runHttpAuthDirectLogin(aWindow, someAttributes);
205 break; 202 break;
206 case 'simple_url': 203 case 'simple_url':
207 this.runSimpleUrlDirectLogin(aWindow, someAttributes); 204 this.runSimpleUrlDirectLogin(aWindow, someAttributes);
208 break; 205 break;
209 default: 206 default:
210 this.runSubmitFormDirectLogin(aWindow, someAttributes); 207 this.runSubmitFormDirectLogin(aWindow, someAttributes);
211 break; 208 break;
212 } 209 }
213 }, this)); 210 }, this));
214 deferredResult.callback(); 211 deferredResult.callback();
215//console.log("<<< runDirectLogin"); 212//console.log("<<< runDirectLogin");
216 213
217 return deferredResult; 214 return deferredResult;
218 }, 215 },
219 216
220 //============================================================================= 217 //=============================================================================
221 218
222 'run': function () { 219 'run': function () {
223 var newWindow; 220 var newWindow;
224 221
225 newWindow = window.open(Clipperz.PM.Strings.getValue('directLoginJumpPageUrl'), this.target()); 222 newWindow = window.open(Clipperz.PM.Strings.getValue('directLoginJumpPageUrl'), this.target());
226 223
227 return this.runDirectLogin(newWindow); 224 return this.runDirectLogin(newWindow);
228 }, 225 },
229 226
230 //============================================================================= 227 //=============================================================================
231 228
232 'test': function () { 229 'test': function () {
233 var iFrame; 230 var iFrame;
234 var newWindow; 231 var newWindow;
235 232
236 iFrame = MochiKit.DOM.createDOM('iframe'); 233 iFrame = MochiKit.DOM.createDOM('iframe');
237 MochiKit.DOM.appendChildNodes(MochiKit.DOM.currentDocument().body, iFrame); 234 MochiKit.DOM.appendChildNodes(MochiKit.DOM.currentDocument().body, iFrame);
238 235
239 newWindow = iFrame.contentWindow; 236 newWindow = iFrame.contentWindow;
240 237
241 return this.runDirectLogin(newWindow); 238 return this.runDirectLogin(newWindow);
242 }, 239 },
243 240
244 //============================================================================= 241 //=============================================================================
245 __syntaxFix__: "syntax fix" 242 __syntaxFix__: "syntax fix"
246}); 243});
247 244
248//----------------------------------------------------------------------------- 245//-----------------------------------------------------------------------------
249 246
250Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.openDirectLogin = function (aDirectLogin) { 247Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.openDirectLogin = function (aDirectLogin) {
251 varrunner; 248 varrunner;
252 249
253 runner = new Clipperz.PM.UI.Common.Controllers.DirectLoginRunner({directLogin:aDirectLogin}); 250 runner = new Clipperz.PM.UI.Common.Controllers.DirectLoginRunner({directLogin:aDirectLogin});
254 return runner.run(); 251 return runner.run();
255}; 252};
256 253
257//----------------------------------------------------------------------------- 254//-----------------------------------------------------------------------------
258 255
259Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.testDirectLogin = function (aDirectLogin) { 256Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.testDirectLogin = function (aDirectLogin) {
260 varrunner; 257 varrunner;
261 258
262//console.log(">>>>>> TESTING DIRECT LOGIN"); 259//console.log(">>>>>> TESTING DIRECT LOGIN");
263 runner = new Clipperz.PM.UI.Common.Controllers.DirectLoginRunner({directLogin:aDirectLogin}); 260 runner = new Clipperz.PM.UI.Common.Controllers.DirectLoginRunner({directLogin:aDirectLogin});
264 return runner.test(); 261 return runner.test();
265}; 262};
266 263
267//----------------------------------------------------------------------------- 264//-----------------------------------------------------------------------------
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/ProgressBarController.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/ProgressBarController.js
index a4fa400..41fe17f 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/ProgressBarController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/ProgressBarController.js
@@ -1,143 +1,140 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Controllers');
30 27
31Clipperz.PM.UI.Common.Controllers.ProgressBarController = function(args) { 28Clipperz.PM.UI.Common.Controllers.ProgressBarController = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 this._numberOfSteps= 0; 31 this._numberOfSteps= 0;
35 this._currentStep= 0; 32 this._currentStep= 0;
36 33
37 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'initProgress', this, 'initProgressHandle'); 34 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'initProgress', this, 'initProgressHandle');
38 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'updateProgress',this, 'updateProgressHandle'); 35 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'updateProgress',this, 'updateProgressHandle');
39 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'advanceProgress',this, 'advanceProgressHandle'); 36 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'advanceProgress',this, 'advanceProgressHandle');
40 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'progressDone', this, 'progressDoneHandle'); 37 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'progressDone', this, 'progressDoneHandle');
41 38
42 return this; 39 return this;
43} 40}
44 41
45MochiKit.Base.update(Clipperz.PM.UI.Common.Controllers.ProgressBarController.prototype, { 42MochiKit.Base.update(Clipperz.PM.UI.Common.Controllers.ProgressBarController.prototype, {
46 43
47 'toString': function() { 44 'toString': function() {
48 return "Clipperz.PM.UI.Common.Controllers.ProgressBarController"; 45 return "Clipperz.PM.UI.Common.Controllers.ProgressBarController";
49 }, 46 },
50 47
51 //----------------------------------------------------------------------------- 48 //-----------------------------------------------------------------------------
52 49
53 'numberOfSteps': function() { 50 'numberOfSteps': function() {
54 return this._numberOfSteps; 51 return this._numberOfSteps;
55 }, 52 },
56 53
57 'setNumberOfSteps': function (aValue) { 54 'setNumberOfSteps': function (aValue) {
58 this._numberOfSteps = aValue; 55 this._numberOfSteps = aValue;
59 }, 56 },
60 57
61 'updateNumberOfSteps': function (aValue) { 58 'updateNumberOfSteps': function (aValue) {
62 this._numberOfSteps += aValue; 59 this._numberOfSteps += aValue;
63 }, 60 },
64 61
65 //----------------------------------------------------------------------------- 62 //-----------------------------------------------------------------------------
66 63
67 'currentStep': function() { 64 'currentStep': function() {
68 return this._currentStep; 65 return this._currentStep;
69 }, 66 },
70 67
71 'advanceCurrentStep': function () { 68 'advanceCurrentStep': function () {
72 this._currentStep ++; 69 this._currentStep ++;
73 }, 70 },
74 71
75 //----------------------------------------------------------------------------- 72 //-----------------------------------------------------------------------------
76 73
77 'completedPercentage': function () { 74 'completedPercentage': function () {
78 var result; 75 var result;
79//Clipperz.log(">>> completedPercentage" + this.currentStep() + "/" + this.numberOfSteps(), this.currentStep() / this.numberOfSteps()); 76//Clipperz.log(">>> completedPercentage" + this.currentStep() + "/" + this.numberOfSteps(), this.currentStep() / this.numberOfSteps());
80 if (this.numberOfSteps() == 0) { 77 if (this.numberOfSteps() == 0) {
81 result = 0; 78 result = 0;
82 } else { 79 } else {
83 result = (Math.min(100, 100 * (this.currentStep() / this.numberOfSteps()))); 80 result = (Math.min(100, 100 * (this.currentStep() / this.numberOfSteps())));
84 } 81 }
85//Clipperz.log("<<< completedPercentage", result); 82//Clipperz.log("<<< completedPercentage", result);
86 return result; 83 return result;
87 }, 84 },
88 85
89 //----------------------------------------------------------------------------- 86 //-----------------------------------------------------------------------------
90 87
91 'resetStatus': function () { 88 'resetStatus': function () {
92 this._numberOfSteps= 0; 89 this._numberOfSteps= 0;
93 this._currentStep= 0; 90 this._currentStep= 0;
94 }, 91 },
95 92
96 //----------------------------------------------------------------------------- 93 //-----------------------------------------------------------------------------
97 94
98 'updateProgress': function () { 95 'updateProgress': function () {
99//Clipperz.log(">>> updateProgress: " + this.completedPercentage() + "%"); 96//Clipperz.log(">>> updateProgress: " + this.completedPercentage() + "%");
100 MochiKit.Signal.signal(this, 'updateProgress', this.completedPercentage()); 97 MochiKit.Signal.signal(this, 'updateProgress', this.completedPercentage());
101 }, 98 },
102 99
103 //============================================================================= 100 //=============================================================================
104 101
105 'initProgressHandle': function (anEvent) { 102 'initProgressHandle': function (anEvent) {
106//Clipperz.log(">>> initProgressHandle - steps: " + (anEvent != null ? anEvent['steps'] : 0)); 103//Clipperz.log(">>> initProgressHandle - steps: " + (anEvent != null ? anEvent['steps'] : 0));
107 this.resetStatus(); 104 this.resetStatus();
108 if (anEvent != null) { 105 if (anEvent != null) {
109 this.setNumberOfSteps(anEvent['steps']); 106 this.setNumberOfSteps(anEvent['steps']);
110 } 107 }
111 MochiKit.Signal.signal(this, 'initProgress'); 108 MochiKit.Signal.signal(this, 'initProgress');
112 this.updateProgress(); 109 this.updateProgress();
113 }, 110 },
114 111
115 //............................................................................. 112 //.............................................................................
116 113
117 'updateProgressHandle': function (anEvent) { 114 'updateProgressHandle': function (anEvent) {
118 this.updateNumberOfSteps(anEvent['extraSteps']); 115 this.updateNumberOfSteps(anEvent['extraSteps']);
119//Clipperz.log("=== updateProgressHandle - steps: " + this.numberOfSteps() + " (extra " + anEvent['extraSteps'] + ")"); 116//Clipperz.log("=== updateProgressHandle - steps: " + this.numberOfSteps() + " (extra " + anEvent['extraSteps'] + ")");
120 this.updateProgress(); 117 this.updateProgress();
121 }, 118 },
122 119
123 //............................................................................. 120 //.............................................................................
124 121
125 'advanceProgressHandle': function (anEvent) { 122 'advanceProgressHandle': function (anEvent) {
126 this.advanceCurrentStep(); 123 this.advanceCurrentStep();
127//Clipperz.log("--- advanceProgressHandle: " + this.currentStep() + "/" + this.numberOfSteps()); 124//Clipperz.log("--- advanceProgressHandle: " + this.currentStep() + "/" + this.numberOfSteps());
128 this.updateProgress(); 125 this.updateProgress();
129 }, 126 },
130 127
131 //............................................................................. 128 //.............................................................................
132 129
133 'progressDoneHandle': function (anEvent) { 130 'progressDoneHandle': function (anEvent) {
134//Clipperz.log("<<< progressDoneHandle: " + this.currentStep() + "/" + this.numberOfSteps()); 131//Clipperz.log("<<< progressDoneHandle: " + this.currentStep() + "/" + this.numberOfSteps());
135 this.resetStatus(); 132 this.resetStatus();
136 MochiKit.Signal.signal(this, 'progressDone'); 133 MochiKit.Signal.signal(this, 'progressDone');
137 }, 134 },
138 135
139 //============================================================================= 136 //=============================================================================
140 __syntaxFix__: "syntax fix" 137 __syntaxFix__: "syntax fix"
141}); 138});
142 139
143Clipperz.PM.UI.Common.Controllers.ProgressBarController.defaultController = new Clipperz.PM.UI.Common.Controllers.ProgressBarController(); 140Clipperz.PM.UI.Common.Controllers.ProgressBarController.defaultController = new Clipperz.PM.UI.Common.Controllers.ProgressBarController();
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/TabPanelController.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/TabPanelController.js
index fbc5929..341fde9 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/TabPanelController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/TabPanelController.js
@@ -1,188 +1,185 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Controllers');
30 27
31Clipperz.PM.UI.Common.Controllers.TabPanelController = function(args) { 28Clipperz.PM.UI.Common.Controllers.TabPanelController = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 this._component = args.component; 31 this._component = args.component;
35 this._configuration = args.configuration; 32 this._configuration = args.configuration;
36 this._isEnabled = args.enabled || true; 33 this._isEnabled = args.enabled || true;
37 34
38 this._selectedTab = null; 35 this._selectedTab = null;
39 return this; 36 return this;
40} 37}
41 38
42MochiKit.Base.update(Clipperz.PM.UI.Common.Controllers.TabPanelController.prototype, { 39MochiKit.Base.update(Clipperz.PM.UI.Common.Controllers.TabPanelController.prototype, {
43 40
44 'toString': function() { 41 'toString': function() {
45 return "Clipperz.PM.UI.Common.Controllers.TabPanelController"; 42 return "Clipperz.PM.UI.Common.Controllers.TabPanelController";
46 }, 43 },
47 44
48 //----------------------------------------------------------------------------- 45 //-----------------------------------------------------------------------------
49 46
50 'component': function() { 47 'component': function() {
51 return this._component; 48 return this._component;
52 }, 49 },
53 50
54 'configuration': function() { 51 'configuration': function() {
55 return this._configuration; 52 return this._configuration;
56 }, 53 },
57 54
58 //----------------------------------------------------------------------------- 55 //-----------------------------------------------------------------------------
59 56
60 'getElement': function(anElementID) { 57 'getElement': function(anElementID) {
61 return this.component().getElement(anElementID); 58 return this.component().getElement(anElementID);
62 }, 59 },
63 60
64 'tabForTabElement': function(anElement) { 61 'tabForTabElement': function(anElement) {
65 varresult; 62 varresult;
66 63
67 for (result in this.configuration()) { 64 for (result in this.configuration()) {
68 if (this.getElement(this.configuration()[result]['tab']) == anElement) { 65 if (this.getElement(this.configuration()[result]['tab']) == anElement) {
69 break; 66 break;
70 } 67 }
71 } 68 }
72 69
73 return result; 70 return result;
74 }, 71 },
75 72
76 //----------------------------------------------------------------------------- 73 //-----------------------------------------------------------------------------
77 74
78 'setupTab': function(aConfiguration) { 75 'setupTab': function(aConfiguration) {
79 vartabElement; 76 vartabElement;
80 77
81 tabElement = this.getElement(aConfiguration['tab']); 78 tabElement = this.getElement(aConfiguration['tab']);
82 79
83 MochiKit.DOM.removeElementClass(tabElement, 'selected'); 80 MochiKit.DOM.removeElementClass(tabElement, 'selected');
84 MochiKit.Signal.connect(tabElement, 'onclick', this, 'handleTabClick') 81 MochiKit.Signal.connect(tabElement, 'onclick', this, 'handleTabClick')
85 }, 82 },
86 83
87 'setupPanel': function(aConfiguration) { 84 'setupPanel': function(aConfiguration) {
88 this.hidePanel(aConfiguration['panel']); 85 this.hidePanel(aConfiguration['panel']);
89 }, 86 },
90 87
91 'setup': function(args) { 88 'setup': function(args) {
92 args = args || {}; 89 args = args || {};
93 90
94 MochiKit.Base.map(MochiKit.Base.method(this, 'setupTab'),MochiKit.Base.values(this.configuration())); 91 MochiKit.Base.map(MochiKit.Base.method(this, 'setupTab'),MochiKit.Base.values(this.configuration()));
95 MochiKit.Base.map(MochiKit.Base.method(this, 'setupPanel'),MochiKit.Base.values(this.configuration())); 92 MochiKit.Base.map(MochiKit.Base.method(this, 'setupPanel'),MochiKit.Base.values(this.configuration()));
96 this.selectTab(args.selected); 93 this.selectTab(args.selected);
97 }, 94 },
98 95
99 //----------------------------------------------------------------------------- 96 //-----------------------------------------------------------------------------
100 97
101 'hidePanel': function(aPanel) { 98 'hidePanel': function(aPanel) {
102 MochiKit.DOM.removeElementClass(this.getElement(aPanel), 'selected'); 99 MochiKit.DOM.removeElementClass(this.getElement(aPanel), 'selected');
103 }, 100 },
104 101
105 'selectTab': function(aTab) { 102 'selectTab': function(aTab) {
106 if ((aTab != this.selectedTab()) && (this.isEnabled())) { 103 if ((aTab != this.selectedTab()) && (this.isEnabled())) {
107 if (this.selectedTab() != null) { 104 if (this.selectedTab() != null) {
108 MochiKit.DOM.removeElementClass(this.getElement(this.configuration()[this.selectedTab()]['tab']),'selected'); 105 MochiKit.DOM.removeElementClass(this.getElement(this.configuration()[this.selectedTab()]['tab']),'selected');
109 MochiKit.DOM.removeElementClass(this.getElement(this.configuration()[this.selectedTab()]['panel']),'selected'); 106 MochiKit.DOM.removeElementClass(this.getElement(this.configuration()[this.selectedTab()]['panel']),'selected');
110 } 107 }
111 108
112 if (aTab != null) { 109 if (aTab != null) {
113 MochiKit.DOM.addElementClass(this.getElement(this.configuration()[aTab]['tab']),'selected'); 110 MochiKit.DOM.addElementClass(this.getElement(this.configuration()[aTab]['tab']),'selected');
114 MochiKit.DOM.addElementClass(this.getElement(this.configuration()[aTab]['panel']),'selected'); 111 MochiKit.DOM.addElementClass(this.getElement(this.configuration()[aTab]['panel']),'selected');
115 } 112 }
116 113
117 this.setSelectedTab(aTab); 114 this.setSelectedTab(aTab);
118 MochiKit.Signal.signal(this, 'tabSelected', aTab); 115 MochiKit.Signal.signal(this, 'tabSelected', aTab);
119 } 116 }
120 }, 117 },
121 118
122 //----------------------------------------------------------------------------- 119 //-----------------------------------------------------------------------------
123 120
124 'selectedTab': function() { 121 'selectedTab': function() {
125 return this._selectedTab; 122 return this._selectedTab;
126 }, 123 },
127 124
128 'setSelectedTab': function(aTab) { 125 'setSelectedTab': function(aTab) {
129 this._selectedTab = aTab; 126 this._selectedTab = aTab;
130 }, 127 },
131 128
132 //----------------------------------------------------------------------------- 129 //-----------------------------------------------------------------------------
133 130
134 'selectedTabElement': function() { 131 'selectedTabElement': function() {
135 var result; 132 var result;
136 133
137 if (this.selectedTab() != null) { 134 if (this.selectedTab() != null) {
138 result = this.getElement(this.configuration()[this.selectedTab()]['tab']); 135 result = this.getElement(this.configuration()[this.selectedTab()]['tab']);
139 } else { 136 } else {
140 result = null; 137 result = null;
141 } 138 }
142 139
143 return null; 140 return null;
144 }, 141 },
145 142
146 'selectedTabPanelElement': function() { 143 'selectedTabPanelElement': function() {
147 var result; 144 var result;
148 145
149 if (this.selectedTab() != null) { 146 if (this.selectedTab() != null) {
150 result = this.getElement(this.configuration()[this.selectedTab()]['panel']); 147 result = this.getElement(this.configuration()[this.selectedTab()]['panel']);
151 } else { 148 } else {
152 result = null; 149 result = null;
153 } 150 }
154 151
155 return result; 152 return result;
156 }, 153 },
157 154
158 //----------------------------------------------------------------------------- 155 //-----------------------------------------------------------------------------
159 156
160 'handleTabClick': function(anEvent) { 157 'handleTabClick': function(anEvent) {
161 this.selectTab(this.tabForTabElement(anEvent.src())); 158 this.selectTab(this.tabForTabElement(anEvent.src()));
162 anEvent.preventDefault(); 159 anEvent.preventDefault();
163 }, 160 },
164 161
165 //============================================================================= 162 //=============================================================================
166 163
167 'isEnabled': function () { 164 'isEnabled': function () {
168 return this._isEnabled; 165 return this._isEnabled;
169 }, 166 },
170 167
171 'enable': function () { 168 'enable': function () {
172 this._isEnabled = true; 169 this._isEnabled = true;
173 MochiKit.Base.map(MochiKit.Base.bind(function (aTabComponentID) { 170 MochiKit.Base.map(MochiKit.Base.bind(function (aTabComponentID) {
174 MochiKit.DOM.removeElementClass(this.getElement(this.configuration()[aTabComponentID]['tab']), 'disabled'); 171 MochiKit.DOM.removeElementClass(this.getElement(this.configuration()[aTabComponentID]['tab']), 'disabled');
175 }, this), MochiKit.Base.keys(this.configuration())); 172 }, this), MochiKit.Base.keys(this.configuration()));
176 }, 173 },
177 174
178 'disable': function () { 175 'disable': function () {
179 this._isEnabled = false; 176 this._isEnabled = false;
180 MochiKit.Base.map(MochiKit.Base.bind(function (aTabComponentID) { 177 MochiKit.Base.map(MochiKit.Base.bind(function (aTabComponentID) {
181 MochiKit.DOM.addElementClass(this.getElement(this.configuration()[aTabComponentID]['tab']), 'disabled'); 178 MochiKit.DOM.addElementClass(this.getElement(this.configuration()[aTabComponentID]['tab']), 'disabled');
182 }, this), MochiKit.Base.keys(this.configuration())); 179 }, this), MochiKit.Base.keys(this.configuration()));
183 }, 180 },
184 181
185 //============================================================================= 182 //=============================================================================
186 183
187 __syntaxFix__: "syntax fix" 184 __syntaxFix__: "syntax fix"
188}); 185});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/WizardController.js b/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/WizardController.js
index 868cea6..ef38bc6 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/WizardController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Common/Controllers/WizardController.js
@@ -1,31 +1,28 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29 //Still empty, but here it should be reasonable to factor in code duplicated between 26 //Still empty, but here it should be reasonable to factor in code duplicated between
30 //- DirectLoginWizardController 27 //- DirectLoginWizardController
31 //- NewUserWizardController \ No newline at end of file 28 //- NewUserWizardController \ No newline at end of file
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Compact/MainController.js b/frontend/gamma/js/Clipperz/PM/UI/Compact/MainController.js
index 22258f6..ea987cd 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Compact/MainController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Compact/MainController.js
@@ -1,59 +1,56 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Compact'); 26Clipperz.Base.module('Clipperz.PM.UI.Compact');
30 27
31Clipperz.PM.UI.Compact.MainController = function() { 28Clipperz.PM.UI.Compact.MainController = function() {
32 //this._loginPanel = null; 29 //this._loginPanel = null;
33 //this._user = null; 30 //this._user = null;
34// 31//
35 //this._isRunningCompact = false; 32 //this._isRunningCompact = false;
36 // 33 //
37 //Clipperz.NotificationCenter.register(null, 'userConnected', this, 'userConnectedCallback'); 34 //Clipperz.NotificationCenter.register(null, 'userConnected', this, 'userConnectedCallback');
38 //Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler'); 35 //Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler');
39// 36//
40 //Clipperz.NotificationCenter.register(null, 'EXCEPTION', this, 'reportException'); 37 //Clipperz.NotificationCenter.register(null, 'EXCEPTION', this, 'reportException');
41 38
42 return this; 39 return this;
43} 40}
44 41
45MochiKit.Base.update(Clipperz.PM.UI.Compact.MainController.prototype, { 42MochiKit.Base.update(Clipperz.PM.UI.Compact.MainController.prototype, {
46 43
47 'toString': function() { 44 'toString': function() {
48 return "Clipperz.PM.UI.Compact.MainController"; 45 return "Clipperz.PM.UI.Compact.MainController";
49 }, 46 },
50 47
51 //----------------------------------------------------------------------------- 48 //-----------------------------------------------------------------------------
52 49
53 'run': function(shouldShowRegistrationForm) { 50 'run': function(shouldShowRegistrationForm) {
54MochiKit.Logging.logDebug("running " + this.toString()); 51MochiKit.Logging.logDebug("running " + this.toString());
55 }, 52 },
56 53
57 //----------------------------------------------------------------------------- 54 //-----------------------------------------------------------------------------
58 __syntaxFix__: "syntax fix" 55 __syntaxFix__: "syntax fix"
59}); \ No newline at end of file 56}); \ No newline at end of file
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js
index 4378b19..ee6d7a3 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js
@@ -1,148 +1,145 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.AccountPanel = function(args) { 28Clipperz.PM.UI.Web.Components.AccountPanel = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.AccountPanel.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.AccountPanel.superclass.constructor.apply(this, arguments);
35 32
36 //this._initiallySelectedTab = args.selected || 'ACCOUNT'; 33 //this._initiallySelectedTab = args.selected || 'ACCOUNT';
37 this._initiallySelectedTab = args.selected || 'PASSPHRASE'; 34 this._initiallySelectedTab = args.selected || 'PASSPHRASE';
38 this._tabPanelControllerConfiguration = { 35 this._tabPanelControllerConfiguration = {
39 // 'ACCOUNT': { 36 // 'ACCOUNT': {
40 // tab:'accountTab', 37 // tab:'accountTab',
41 // panel:'accountPanel' 38 // panel:'accountPanel'
42 // }, 39 // },
43 'PASSPHRASE': { 40 'PASSPHRASE': {
44 tab:'passphraseTab', 41 tab:'passphraseTab',
45 panel:'passphrasePanel' 42 panel:'passphrasePanel'
46 }, 43 },
47 'PREFERENCES': { 44 'PREFERENCES': {
48 tab:'preferencesTab', 45 tab:'preferencesTab',
49 panel:'preferencesPanel' 46 panel:'preferencesPanel'
50 }, 47 },
51 'LOGIN_HISTORY': { 48 'LOGIN_HISTORY': {
52 tab:'loginHistoryTab', 49 tab:'loginHistoryTab',
53 panel:'loginHistoryPanel' 50 panel:'loginHistoryPanel'
54 } 51 }
55 }; 52 };
56 53
57 return this; 54 return this;
58} 55}
59 56
60//============================================================================= 57//=============================================================================
61 58
62Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.AccountPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, { 59Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.AccountPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, {
63 60
64 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
65 62
66 'toString': function () { 63 'toString': function () {
67 return "Clipperz.PM.UI.Web.Components.AccountPanel component"; 64 return "Clipperz.PM.UI.Web.Components.AccountPanel component";
68 }, 65 },
69 66
70 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
71 68
72 'renderSelf': function(/*aContainer, aPosition*/) { 69 'renderSelf': function(/*aContainer, aPosition*/) {
73//Clipperz.log("AccountPanel.renderSelf element", this.element()); 70//Clipperz.log("AccountPanel.renderSelf element", this.element());
74 this.append(this.element(), [ 71 this.append(this.element(), [
75 {tag:'div', cls:'header', children:[ 72 {tag:'div', cls:'header', children:[
76 {tag:'div', cls:'subPanelTabs', children:[ 73 {tag:'div', cls:'subPanelTabs', children:[
77 {tag:'ul', children:[ 74 {tag:'ul', children:[
78 // {tag:'li', id:this.getId('accountTab'), children:[{tag:'a', href:'#', html:'Account'}], cls:'first'}, 75 // {tag:'li', id:this.getId('accountTab'), children:[{tag:'a', href:'#', html:'Account'}], cls:'first'},
79 {tag:'li', id:this.getId('passphraseTab'), children:[{tag:'a', href:'#', html:'Passphrase'}], cls:'first'}, 76 {tag:'li', id:this.getId('passphraseTab'), children:[{tag:'a', href:'#', html:'Passphrase'}], cls:'first'},
80 {tag:'li', id:this.getId('preferencesTab'), children:[{tag:'a', href:'#', html:'Preferences'}]}, 77 {tag:'li', id:this.getId('preferencesTab'), children:[{tag:'a', href:'#', html:'Preferences'}]},
81 {tag:'li', id:this.getId('loginHistoryTab'),children:[{tag:'a', href:'#', html:'Login history'}]} 78 {tag:'li', id:this.getId('loginHistoryTab'),children:[{tag:'a', href:'#', html:'Login history'}]}
82 ]} 79 ]}
83 ]} 80 ]}
84 ]}, 81 ]},
85 {tag:'div', cls:'body', children:[ 82 {tag:'div', cls:'body', children:[
86 {tag:'div', cls:'accountPanel', children:[ 83 {tag:'div', cls:'accountPanel', children:[
87 {tag:'div', cls:'subPanelContent', children:[ 84 {tag:'div', cls:'subPanelContent', children:[
88 {tag:'ul', children:[ 85 {tag:'ul', children:[
89 // {tag:'li', id:this.getId('accountPanel'),children:[ 86 // {tag:'li', id:this.getId('accountPanel'),children:[
90 // {tag:'h3', html:"-- Account --"} 87 // {tag:'h3', html:"-- Account --"}
91 // ]}, 88 // ]},
92 {tag:'li', id:this.getId('passphrasePanel'),children:[ 89 {tag:'li', id:this.getId('passphrasePanel'),children:[
93 {tag:'h3', cls:'changePassphrase', html:"Change passphrase"}, 90 {tag:'h3', cls:'changePassphrase', html:"Change passphrase"},
94 {tag:'form', id:this.getId('changePassphrase'), cls:'changePassphrase', children:[ 91 {tag:'form', id:this.getId('changePassphrase'), cls:'changePassphrase', children:[
95 {tag:'div', cls:'currentCredentials', children:[ 92 {tag:'div', cls:'currentCredentials', children:[
96 {tag:'div', cls:'field username', children:[ 93 {tag:'div', cls:'field username', children:[
97 {tag:'label', html:"username", 'for':this.getId('currentUsername')}, 94 {tag:'label', html:"username", 'for':this.getId('currentUsername')},
98 {tag:'input', id:this.getId('currentUsername')} 95 {tag:'input', id:this.getId('currentUsername')}
99 ]}, 96 ]},
100 {tag:'div', cls:'field passphrase', children:[ 97 {tag:'div', cls:'field passphrase', children:[
101 {tag:'label', html:"passphrase", 'for':this.getId('currentPassphrase')}, 98 {tag:'label', html:"passphrase", 'for':this.getId('currentPassphrase')},
102 {tag:'input', id:this.getId('currentPassphrase')} 99 {tag:'input', id:this.getId('currentPassphrase')}
103 ]} 100 ]}
104 ]}, 101 ]},
105 {tag:'div', cls:'newPassphrase', children:[ 102 {tag:'div', cls:'newPassphrase', children:[
106 {tag:'div', cls:'field', children:[ 103 {tag:'div', cls:'field', children:[
107 {tag:'label', html:"new passphrase", 'for':this.getId('newPassphrase')}, 104 {tag:'label', html:"new passphrase", 'for':this.getId('newPassphrase')},
108 {tag:'input', id:this.getId('newPassphrase')} 105 {tag:'input', id:this.getId('newPassphrase')}
109 ]}, 106 ]},
110 {tag:'div', cls:'field', children:[ 107 {tag:'div', cls:'field', children:[
111 {tag:'label', html:"re-new passphrase", 'for':this.getId('reNewPassphrase')}, 108 {tag:'label', html:"re-new passphrase", 'for':this.getId('reNewPassphrase')},
112 {tag:'input', id:this.getId('reNewPassphrase')} 109 {tag:'input', id:this.getId('reNewPassphrase')}
113 ]} 110 ]}
114 ]}, 111 ]},
115 {tag:'div', cls:'confirm', children:[ 112 {tag:'div', cls:'confirm', children:[
116 {tag:'input', type:'checkbox', id:this.getId('confirm')}, 113 {tag:'input', type:'checkbox', id:this.getId('confirm')},
117 {tag:'label', html:"I understand that Clipperz will not be able to recover a lost passphrase", 'for':this.getId('confirm')} 114 {tag:'label', html:"I understand that Clipperz will not be able to recover a lost passphrase", 'for':this.getId('confirm')}
118 ]} 115 ]}
119 ]}, 116 ]},
120 {tag:'div', cls:'clear'}, 117 {tag:'div', cls:'clear'},
121 {tag:'div', cls:'confirmButton', id:this.getId('confirmationButton'), children:[ 118 {tag:'div', cls:'confirmButton', id:this.getId('confirmationButton'), children:[
122 {tag:'span', html:"change passphrase"} 119 {tag:'span', html:"change passphrase"}
123 ]}, 120 ]},
124 121
125 {tag:'h3', cls:'manageOTP', html:"Manage One-Time Passphrases"}, 122 {tag:'h3', cls:'manageOTP', html:"Manage One-Time Passphrases"},
126 {} 123 {}
127 ]}, 124 ]},
128 {tag:'li', id:this.getId('preferencesPanel'), children:[ 125 {tag:'li', id:this.getId('preferencesPanel'), children:[
129 {tag:'h3', html:"-- Preferences --"} 126 {tag:'h3', html:"-- Preferences --"}
130 ]}, 127 ]},
131 {tag:'li', id:this.getId('loginHistoryPanel'), children:[ 128 {tag:'li', id:this.getId('loginHistoryPanel'), children:[
132 {tag:'h3', html:"-- Login History --"} 129 {tag:'h3', html:"-- Login History --"}
133 ]} 130 ]}
134 ]} 131 ]}
135 ]} 132 ]}
136 ]} 133 ]}
137 ]}, 134 ]},
138 {tag:'div', cls:'footer'} 135 {tag:'div', cls:'footer'}
139 ]); 136 ]);
140 137
141 this.tabPanelController().setup({selected:this.initiallySelectedTab()}); 138 this.tabPanelController().setup({selected:this.initiallySelectedTab()});
142 }, 139 },
143 140
144 //------------------------------------------------------------------------- 141 //-------------------------------------------------------------------------
145 142
146 143
147 __syntaxFix__: "syntax fix" 144 __syntaxFix__: "syntax fix"
148}); 145});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AppPage.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AppPage.js
index 67247df..3b3c8b4 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AppPage.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AppPage.js
@@ -1,78 +1,75 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.AppPage = function(args) { 28Clipperz.PM.UI.Web.Components.AppPage = function(args) {
32 args = args || {}; 29 args = args || {};
33 Clipperz.PM.UI.Web.Components.AppPage.superclass.constructor.call(this, args); 30 Clipperz.PM.UI.Web.Components.AppPage.superclass.constructor.call(this, args);
34 31
35 this._element = args.element || null; 32 this._element = args.element || null;
36 33
37 this._slots = { 34 this._slots = {
38 'cardGrid' : this.getId('cardGrid'), 35 'cardGrid' : this.getId('cardGrid'),
39 // 'directLoginGrid' : this.getId('directLoginGrid'), 36 // 'directLoginGrid' : this.getId('directLoginGrid'),
40 'accountPanel': this.getId('accountPanel'), 37 'accountPanel': this.getId('accountPanel'),
41 'dataPanel': this.getId('dataPanel'), 38 'dataPanel': this.getId('dataPanel'),
42 'toolsPanel': this.getId('toolsPanel'), 39 'toolsPanel': this.getId('toolsPanel'),
43 'userInfoBox': this.getId('userInfoBox'), 40 'userInfoBox': this.getId('userInfoBox'),
44 'tabSidePanel': this.getId('tabSidePanel') 41 'tabSidePanel': this.getId('tabSidePanel')
45 }; 42 };
46 43
47 return this; 44 return this;
48} 45}
49 46
50//============================================================================= 47//=============================================================================
51 48
52Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.AppPage, Clipperz.PM.UI.Common.Components.BaseComponent, { 49Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.AppPage, Clipperz.PM.UI.Common.Components.BaseComponent, {
53 50
54 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
55 52
56 'toString': function () { 53 'toString': function () {
57 return "Clipperz.PM.UI.Web.Components.AppPage component"; 54 return "Clipperz.PM.UI.Web.Components.AppPage component";
58 }, 55 },
59 56
60 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
61 58
62 'renderSelf': function(/*aContainer, aPosition*/) { 59 'renderSelf': function(/*aContainer, aPosition*/) {
63 this.append(this.element(), {tag:'div', id:this.getId('userInfoBox'), cls:'userInfoBox'}); 60 this.append(this.element(), {tag:'div', id:this.getId('userInfoBox'), cls:'userInfoBox'});
64 this.append(this.element(), {tag:'div', id:this.getId('sidePanels'), cls:'sidePanels'}); 61 this.append(this.element(), {tag:'div', id:this.getId('sidePanels'), cls:'sidePanels'});
65 this.append(this.getId('sidePanels'),{tag:'div', id:this.getId('tabSidePanel'), cls:'tabSidePanel', children:[]}); 62 this.append(this.getId('sidePanels'),{tag:'div', id:this.getId('tabSidePanel'), cls:'tabSidePanel', children:[]});
66 63
67 this.append(this.element(), {tag:'div', id:this.getId('mainPanels'), cls:'mainPanels'}); 64 this.append(this.element(), {tag:'div', id:this.getId('mainPanels'), cls:'mainPanels'});
68 this.append(this.getId('mainPanels'), {tag:'div', id:this.getId('cardGrid'), cls:'gridComponent cardGrid'}); 65 this.append(this.getId('mainPanels'), {tag:'div', id:this.getId('cardGrid'), cls:'gridComponent cardGrid'});
69 // this.append(this.getId('mainPanels'), {tag:'div', id:this.getId('directLoginGrid'), cls:'gridComponent directLoginGrid'}); 66 // this.append(this.getId('mainPanels'), {tag:'div', id:this.getId('directLoginGrid'), cls:'gridComponent directLoginGrid'});
70 this.append(this.getId('mainPanels'), {tag:'div', id:this.getId('accountPanel'), cls:'otherPanel'}); 67 this.append(this.getId('mainPanels'), {tag:'div', id:this.getId('accountPanel'), cls:'otherPanel'});
71 this.append(this.getId('mainPanels'), {tag:'div', id:this.getId('dataPanel'), cls:'otherPanel'}); 68 this.append(this.getId('mainPanels'), {tag:'div', id:this.getId('dataPanel'), cls:'otherPanel'});
72 this.append(this.getId('mainPanels'), {tag:'div', id:this.getId('toolsPanel'), cls:'otherPanel'}); 69 this.append(this.getId('mainPanels'), {tag:'div', id:this.getId('toolsPanel'), cls:'otherPanel'});
73 }, 70 },
74 71
75 //------------------------------------------------------------------------- 72 //-------------------------------------------------------------------------
76 73
77 __syntaxFix__: "syntax fix" 74 __syntaxFix__: "syntax fix"
78}); 75});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/BookmarkletComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/BookmarkletComponent.js
index 42a6052..1835ca9 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/BookmarkletComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/BookmarkletComponent.js
@@ -1,109 +1,106 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.BookmarkletComponent = function(args) { 28Clipperz.PM.UI.Web.Components.BookmarkletComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.BookmarkletComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.BookmarkletComponent.superclass.constructor.apply(this, arguments);
35 MochiKit.Signal.connect(Clipperz.PM.Strings.Languages, 'switchLanguage', this, 'updateBookmarkletURLs'); 32 MochiKit.Signal.connect(Clipperz.PM.Strings.Languages, 'switchLanguage', this, 'updateBookmarkletURLs');
36 33
37 return this; 34 return this;
38} 35}
39 36
40//============================================================================= 37//=============================================================================
41 38
42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.BookmarkletComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 39Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.BookmarkletComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
43 40
44 //------------------------------------------------------------------------- 41 //-------------------------------------------------------------------------
45 42
46 'toString': function () { 43 'toString': function () {
47 return "Clipperz.PM.UI.Web.Components.BookmarkletComponent component"; 44 return "Clipperz.PM.UI.Web.Components.BookmarkletComponent component";
48 }, 45 },
49 46
50 //------------------------------------------------------------------------- 47 //-------------------------------------------------------------------------
51 48
52 'renderSelf': function() { 49 'renderSelf': function() {
53 // var bookmarkletUrl; 50 // var bookmarkletUrl;
54// 51//
55 // if (Clipperz_IEisBroken == true) { 52 // if (Clipperz_IEisBroken == true) {
56 // bookmarkletUrl = bookmarklet_ie; 53 // bookmarkletUrl = bookmarklet_ie;
57 // } else { 54 // } else {
58 /// bookmarkletUrl = bookmarklet; 55 /// bookmarkletUrl = bookmarklet;
59 // bookmarkletUrl = Clipperz.PM.Strings['bookmarklet']; 56 // bookmarkletUrl = Clipperz.PM.Strings['bookmarklet'];
60 // } 57 // }
61 58
62 this.append(this.element(), {tag:'div', cls:'bookmarklet', children: [ 59 this.append(this.element(), {tag:'div', cls:'bookmarklet', children: [
63 {tag:'div', id:this.getId('linkBlock'), cls:'bookmarklet_link', children:[ 60 {tag:'div', id:this.getId('linkBlock'), cls:'bookmarklet_link', children:[
64 // {tag:'a', id:this.getId('link'), href:bookmarkletUrl, children:[ 61 // {tag:'a', id:this.getId('link'), href:bookmarkletUrl, children:[
65 {tag:'a', id:this.getId('link'), href:'#', children:[ 62 {tag:'a', id:this.getId('link'), href:'#', children:[
66 {tag:'div', cls:'icon'}, 63 {tag:'div', cls:'icon'},
67 {tag:'div', cls:'text', children:[ 64 {tag:'div', cls:'text', children:[
68 {tag:'span', html:"add to Clipperz"} 65 {tag:'span', html:"add to Clipperz"}
69 ]} 66 ]}
70 ]} 67 ]}
71 ]} 68 ]}
72 ]}); 69 ]});
73 70
74 new Clipperz.PM.UI.Common.Components.Tooltip({ 71 new Clipperz.PM.UI.Common.Components.Tooltip({
75 element:this.getElement('linkBlock'), 72 element:this.getElement('linkBlock'),
76 text: "Drag and drop the \"add to Clipperz\" link above to the bookmark bar.", 73 text: "Drag and drop the \"add to Clipperz\" link above to the bookmark bar.",
77 position:'BELOW' 74 position:'BELOW'
78 }); 75 });
79 76
80 MochiKit.Signal.connect(this.getId('link'), 'onclick', this, 'handleOnclick'); 77 MochiKit.Signal.connect(this.getId('link'), 'onclick', this, 'handleOnclick');
81 this.updateBookmarkletURLs(); 78 this.updateBookmarkletURLs();
82 }, 79 },
83 80
84 //------------------------------------------------------------------------- 81 //-------------------------------------------------------------------------
85 82
86 'handleOnclick': function (anEvent) { 83 'handleOnclick': function (anEvent) {
87 anEvent.preventDefault(); 84 anEvent.preventDefault();
88 85
89Clipperz.log("BOOKMARKLET CLICK"); 86Clipperz.log("BOOKMARKLET CLICK");
90 }, 87 },
91 88
92 //------------------------------------------------------------------------- 89 //-------------------------------------------------------------------------
93 90
94 'updateBookmarkletURLs': function () { 91 'updateBookmarkletURLs': function () {
95 var bookmarkletUrl; 92 var bookmarkletUrl;
96 93
97 if (Clipperz_IEisBroken == true) { 94 if (Clipperz_IEisBroken == true) {
98 bookmarkletUrl = bookmarklet_ie; 95 bookmarkletUrl = bookmarklet_ie;
99 } else { 96 } else {
100 // bookmarkletUrl = bookmarklet; 97 // bookmarkletUrl = bookmarklet;
101 bookmarkletUrl = Clipperz.PM.Strings.getValue('bookmarklet'); 98 bookmarkletUrl = Clipperz.PM.Strings.getValue('bookmarklet');
102 } 99 }
103 100
104 this.getElement('link').href = bookmarkletUrl; 101 this.getElement('link').href = bookmarkletUrl;
105 }, 102 },
106 103
107 //------------------------------------------------------------------------- 104 //-------------------------------------------------------------------------
108 __syntaxFix__: "syntax fix" 105 __syntaxFix__: "syntax fix"
109}); 106});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogComponent.js
index e3238ca..af33d85 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogComponent.js
@@ -1,408 +1,405 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.CardDialogComponent = function(args) { 28Clipperz.PM.UI.Web.Components.CardDialogComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.CardDialogComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.CardDialogComponent.superclass.constructor.apply(this, arguments);
35 32
36 this._tabPanelController = null; 33 this._tabPanelController = null;
37 34
38 this._tabPanelControllerConfiguration = { 35 this._tabPanelControllerConfiguration = {
39 'DETAILS': { 36 'DETAILS': {
40 tab:'detailTab', 37 tab:'detailTab',
41 panel:'detailTabpanel' 38 panel:'detailTabpanel'
42 }, 39 },
43 'DIRECT_LOGINS': { 40 'DIRECT_LOGINS': {
44 tab:'directLoginTab', 41 tab:'directLoginTab',
45 panel:'directLoginTabpanel' 42 panel:'directLoginTabpanel'
46 }, 43 },
47 'SHARING': { 44 'SHARING': {
48 tab:'sharingTab', 45 tab:'sharingTab',
49 panel:'sharingTabpanel' 46 panel:'sharingTabpanel'
50 } 47 }
51 }; 48 };
52 49
53 this._tooltips = null; 50 this._tooltips = null;
54 51
55 this._isSavingEnabled = false; 52 this._isSavingEnabled = false;
56 this._hintMode = 'OFF'; //'ON' 53 this._hintMode = 'OFF'; //'ON'
57 54
58 this._fieldComponents = {}; 55 this._fieldComponents = {};
59 this._directLoginComponents = {}; 56 this._directLoginComponents = {};
60 57
61 this._displayMode = 'fixed'; //'scrollable'; 58 this._displayMode = 'fixed'; //'scrollable';
62 59
63 return this; 60 return this;
64} 61}
65 62
66//============================================================================= 63//=============================================================================
67 64
68Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.CardDialogComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 65Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.CardDialogComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
69 66
70 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
71 68
72 'toString': function () { 69 'toString': function () {
73 return "Clipperz.PM.UI.Web.Components.CardDialogComponent component"; 70 return "Clipperz.PM.UI.Web.Components.CardDialogComponent component";
74 }, 71 },
75 72
76 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
77 74
78 'tabPanelController': function () { 75 'tabPanelController': function () {
79 if (this._tabPanelController == null) { 76 if (this._tabPanelController == null) {
80 this._tabPanelController = new Clipperz.PM.UI.Common.Controllers.TabPanelController({ 77 this._tabPanelController = new Clipperz.PM.UI.Common.Controllers.TabPanelController({
81 component:this, 78 component:this,
82 configuration:this._tabPanelControllerConfiguration 79 configuration:this._tabPanelControllerConfiguration
83 }); 80 });
84 81
85 MochiKit.Signal.connect(this._tabPanelController, 'tabSelected', this, 'handleTabSelected') 82 MochiKit.Signal.connect(this._tabPanelController, 'tabSelected', this, 'handleTabSelected')
86 } 83 }
87 84
88 return this._tabPanelController; 85 return this._tabPanelController;
89 }, 86 },
90 87
91 //------------------------------------------------------------------------- 88 //-------------------------------------------------------------------------
92 89
93 'renderSelf': function() { 90 'renderSelf': function() {
94 this.append(this.element(), {tag:'div', cls:'CardDialog mainDialog loading', id:this.getId('panel'), children: [ 91 this.append(this.element(), {tag:'div', cls:'CardDialog mainDialog loading', id:this.getId('panel'), children: [
95 {tag:'form', id:this.getId('form'), children:[ 92 {tag:'form', id:this.getId('form'), children:[
96 // {tag:'input', type:'text', id:this.getId('hidden'), cls:'hidden'}, 93 // {tag:'input', type:'text', id:this.getId('hidden'), cls:'hidden'},
97 {tag:'div', cls:'header', children:[ 94 {tag:'div', cls:'header', children:[
98 {tag:'div', cls:'title', children:[ 95 {tag:'div', cls:'title', children:[
99 {tag:'input', type:'text', id:this.getId('title')} 96 {tag:'input', type:'text', id:this.getId('title')}
100 ]} 97 ]}
101 ]}, 98 ]},
102 {tag:'div', id:this.getId('body'), cls:'body', children:[ 99 {tag:'div', id:this.getId('body'), cls:'body', children:[
103 {tag:'div', cls:'tabs', children:[ 100 {tag:'div', cls:'tabs', children:[
104 {tag:'ul', cls:'tabs', children:[ 101 {tag:'ul', cls:'tabs', children:[
105 {tag:'li', id:this.getId('detailTab'), children:[{tag:'span', html:"details"}]}, 102 {tag:'li', id:this.getId('detailTab'), children:[{tag:'span', html:"details"}]},
106 {tag:'li', id:this.getId('directLoginTab'), children:[ 103 {tag:'li', id:this.getId('directLoginTab'), children:[
107 {tag:'span', html:"direct logins"}//, 104 {tag:'span', html:"direct logins"}//,
108 // {tag:'div', id:this.getId('addDirectLoginButton'), cls:'addDirectLoginButton', children:[ 105 // {tag:'div', id:this.getId('addDirectLoginButton'), cls:'addDirectLoginButton', children:[
109 // {tag:'span', html:"+"} 106 // {tag:'span', html:"+"}
110 // ]} 107 // ]}
111 ]}, 108 ]},
112 {tag:'li', id:this.getId('sharingTab'), children:[{tag:'span', html:"sharing"}]} 109 {tag:'li', id:this.getId('sharingTab'), children:[{tag:'span', html:"sharing"}]}
113 ]} 110 ]}
114 ]}, 111 ]},
115 {tag:'div', cls:'tabPanels', children:[ 112 {tag:'div', cls:'tabPanels', children:[
116 {tag:'ul', cls:'tabPanels', children:[ 113 {tag:'ul', cls:'tabPanels', children:[
117 {tag:'li', id:this.getId('detailTabpanel'), cls:'tabPanel', children:[ 114 {tag:'li', id:this.getId('detailTabpanel'), cls:'tabPanel', children:[
118 {tag:'div', id:this.getId('recordFields'), children:[ 115 {tag:'div', id:this.getId('recordFields'), children:[
119 {tag:'table', cls:'fields', cellpadding:'0', id:this.getId('fieldTable'), cellspacing:'0', children:[ 116 {tag:'table', cls:'fields', cellpadding:'0', id:this.getId('fieldTable'), cellspacing:'0', children:[
120 {tag:'thead', children:[ 117 {tag:'thead', children:[
121 {tag:'tr', children:[ 118 {tag:'tr', children:[
122 {tag:'th', cls:'fieldStateTH',html:""}, 119 {tag:'th', cls:'fieldStateTH',html:""},
123 {tag:'th', cls:'fieldLabelTH',html:"label"}, 120 {tag:'th', cls:'fieldLabelTH',html:"label"},
124 {tag:'th', cls:'fieldLockTH',html:""}, 121 {tag:'th', cls:'fieldLockTH',html:""},
125 {tag:'th', cls:'fieldValueTH',html:"value"}, 122 {tag:'th', cls:'fieldValueTH',html:"value"},
126 {tag:'th', cls:'fieldActionTH',html:""}, 123 {tag:'th', cls:'fieldActionTH',html:""},
127 {tag:'th', cls:'fieldDeleteTH',html:""} 124 {tag:'th', cls:'fieldDeleteTH',html:""}
128 ]} 125 ]}
129 ]}, 126 ]},
130 {tag:'tfoot'}, 127 {tag:'tfoot'},
131 {tag:'tbody', id:this.getId('tableBody'), children:[ 128 {tag:'tbody', id:this.getId('tableBody'), children:[
132 {tag:'tr', id:this.getId('newFieldTR'), cls:'newFieldTR', children:[ 129 {tag:'tr', id:this.getId('newFieldTR'), cls:'newFieldTR', children:[
133 {tag:'td', cls:'fieldState'}, 130 {tag:'td', cls:'fieldState'},
134 {tag:'td', cls:'fieldLabel', children:[ 131 {tag:'td', cls:'fieldLabel', children:[
135 {tag:'input', cls:'label', id:this.getId('newFieldLabel')} 132 {tag:'input', cls:'label', id:this.getId('newFieldLabel')}
136 ]}, 133 ]},
137 {tag:'td', cls:'fieldLock', children:[ 134 {tag:'td', cls:'fieldLock', children:[
138 {tag:'div', cls:'unlocked', id:this.getId('newFieldIsLocked')} 135 {tag:'div', cls:'unlocked', id:this.getId('newFieldIsLocked')}
139 ]}, 136 ]},
140 {tag:'td', cls:'fieldValue', children:[ 137 {tag:'td', cls:'fieldValue', children:[
141 {tag:'div', cls:'unlocked', id:this.getId('newFieldValueWrapper'), children:[ 138 {tag:'div', cls:'unlocked', id:this.getId('newFieldValueWrapper'), children:[
142 {tag:'input',type:'text', cls:'value', id:this.getId('newFieldValue')} 139 {tag:'input',type:'text', cls:'value', id:this.getId('newFieldValue')}
143 ]} 140 ]}
144 ]}, 141 ]},
145 {tag:'td', cls:'fieldAction', children:[ 142 {tag:'td', cls:'fieldAction', children:[
146 {tag:'div', html:'&nbsp;'} 143 {tag:'div', html:'&nbsp;'}
147 ]}, 144 ]},
148 {tag:'td', cls:'fieldAddDelete', children:[ 145 {tag:'td', cls:'fieldAddDelete', children:[
149 {tag:'div', cls:'new', children:[ 146 {tag:'div', cls:'new', children:[
150 {tag:'span', children:[ 147 {tag:'span', children:[
151 {tag:'a', href:'#', id:this.getId('newFieldAddButton'), html:"add"} 148 {tag:'a', href:'#', id:this.getId('newFieldAddButton'), html:"add"}
152 ]} 149 ]}
153 ]} 150 ]}
154 ]} 151 ]}
155 ]} 152 ]}
156 ]} 153 ]}
157 ]} 154 ]}
158 ]}, 155 ]},
159 {tag:'div', cls:'notes', children:[ 156 {tag:'div', cls:'notes', children:[
160 {tag:'div', children:[ 157 {tag:'div', children:[
161 {tag:'textarea', id:this.getId('recordNote'), value:""} 158 {tag:'textarea', id:this.getId('recordNote'), value:""}
162 ]} 159 ]}
163 ]} 160 ]}
164 ]}, 161 ]},
165 {tag:'li', id:this.getId('directLoginTabpanel'), cls:'tabPanel', children:[ 162 {tag:'li', id:this.getId('directLoginTabpanel'), cls:'tabPanel', children:[
166 {tag:'div', id:this.getId('directLoginsComponentContainer'), cls:'directLoginsComponentContainer', children:[ 163 {tag:'div', id:this.getId('directLoginsComponentContainer'), cls:'directLoginsComponentContainer', children:[
167 {tag:'div', id:this.getId('directLogins'), cls:'directLogins', children:[ 164 {tag:'div', id:this.getId('directLogins'), cls:'directLogins', children:[
168 {tag:'div', id:this.getId('addNewDirectLoginSplash'), cls:'addNewDirectLoginSplash', children:[ 165 {tag:'div', id:this.getId('addNewDirectLoginSplash'), cls:'addNewDirectLoginSplash', children:[
169 {tag:'h3', html:"Here you can add a Direct Login for this card: instant access to your favorit website!"}, 166 {tag:'h3', html:"Here you can add a Direct Login for this card: instant access to your favorit website!"},
170 {tag:'a', href:'#', id:this.getId('addNewDirectLoginSplashButton'), children:[{tag:'span', html:"Add Direct Login"}]} 167 {tag:'a', href:'#', id:this.getId('addNewDirectLoginSplashButton'), children:[{tag:'span', html:"Add Direct Login"}]}
171 ]}, 168 ]},
172 {tag:'div', id:this.getId('directLoginsList')}, 169 {tag:'div', id:this.getId('directLoginsList')},
173 {tag:'div', cls:'addDirectLoginListItem', id:this.getId('addDirectLoginListItem'), children:[{tag:'a', href:'#', id:this.getId('addNewDirectLoginListItemButton'), children:[{tag:'span', html:"Add Direct Login"}]}]} 170 {tag:'div', cls:'addDirectLoginListItem', id:this.getId('addDirectLoginListItem'), children:[{tag:'a', href:'#', id:this.getId('addNewDirectLoginListItemButton'), children:[{tag:'span', html:"Add Direct Login"}]}]}
174 ]}, 171 ]},
175 {tag:'div', id:this.getId('directLoginEditDetail'), cls:'directLoginEditDetail'} 172 {tag:'div', id:this.getId('directLoginEditDetail'), cls:'directLoginEditDetail'}
176 ]} 173 ]}
177 ]}, 174 ]},
178 {tag:'li', id:this.getId('sharingTabpanel'), cls:'tabPanel', children:[ 175 {tag:'li', id:this.getId('sharingTabpanel'), cls:'tabPanel', children:[
179 {tag:'h2', html:"Coming soon!"} 176 {tag:'h2', html:"Coming soon!"}
180 ]} 177 ]}
181 ]} 178 ]}
182 ]}, 179 ]},
183 {tag:'div', cls:'mask', children:[ 180 {tag:'div', cls:'mask', children:[
184 {tag:'div', id:this.getId('progress'), children:[ 181 {tag:'div', id:this.getId('progress'), children:[
185 {tag:'h3', id:this.getId('progressDescription'), cls:'progressDescription', html:"Loading"}, 182 {tag:'h3', id:this.getId('progressDescription'), cls:'progressDescription', html:"Loading"},
186 {tag:'div', id:this.getId('progressBar')} 183 {tag:'div', id:this.getId('progressBar')}
187 ]}, 184 ]},
188 {tag:'div', id:this.getId('error'), cls:'error', children:[ 185 {tag:'div', id:this.getId('error'), cls:'error', children:[
189 {tag:'div', cls:'img'}, 186 {tag:'div', cls:'img'},
190 {tag:'p', id:this.getId('errorMessage')} 187 {tag:'p', id:this.getId('errorMessage')}
191 ]} 188 ]}
192 ]} 189 ]}
193 ]}, 190 ]},
194 {tag:'div', cls:'footer', children:[ 191 {tag:'div', cls:'footer', children:[
195 {tag:'div', cls:'buttonArea', children:[ 192 {tag:'div', cls:'buttonArea', children:[
196 {tag:'div', cls:'cancel', id:this.getId('cancelButton'), html:"cancel"}, 193 {tag:'div', cls:'cancel', id:this.getId('cancelButton'), html:"cancel"},
197 {tag:'div', cls:'save disabled', id:this.getId('saveButton'), html:"save"} 194 {tag:'div', cls:'save disabled', id:this.getId('saveButton'), html:"save"}
198 ]} 195 ]}
199 ]} 196 ]}
200 ]} 197 ]}
201 ]}); 198 ]});
202 199
203 200
204 this.insertAllTooltips(); 201 this.insertAllTooltips();
205 202
206 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); 203 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')}));
207 204
208 this.tabPanelController().setup({selected:'DETAILS'}); 205 this.tabPanelController().setup({selected:'DETAILS'});
209 // this.tabPanelController().setup({selected:'DIRECT_LOGINS'}); 206 // this.tabPanelController().setup({selected:'DIRECT_LOGINS'});
210 207
211 MochiKit.Style.hideElement(this.getId('error')); 208 MochiKit.Style.hideElement(this.getId('error'));
212 MochiKit.Style.hideElement(this.getElement('directLoginEditDetail')); 209 MochiKit.Style.hideElement(this.getElement('directLoginEditDetail'));
213 MochiKit.Style.hideElement(this.getElement('addDirectLoginListItem')); 210 MochiKit.Style.hideElement(this.getElement('addDirectLoginListItem'));
214 this.plumbDetailsPanel(); 211 this.plumbDetailsPanel();
215 212
216 MochiKit.Signal.connect(this.getId('cancelButton'), 'onclick', this, 'handleCancelEvent'); 213 MochiKit.Signal.connect(this.getId('cancelButton'), 'onclick', this, 'handleCancelEvent');
217 MochiKit.Signal.connect(this.getId('saveButton'), 'onclick', this, 'handleSaveEvent'); 214 MochiKit.Signal.connect(this.getId('saveButton'), 'onclick', this, 'handleSaveEvent');
218 215
219 MochiKit.Signal.connect(this.getId('addNewDirectLoginSplashButton'), 'onclick', this, 'handleAddDirectLogin'); 216 MochiKit.Signal.connect(this.getId('addNewDirectLoginSplashButton'), 'onclick', this, 'handleAddDirectLogin');
220 MochiKit.Signal.connect(this.getId('addNewDirectLoginListItemButton'), 'onclick', this, 'handleAddDirectLogin'); 217 MochiKit.Signal.connect(this.getId('addNewDirectLoginListItemButton'), 'onclick', this, 'handleAddDirectLogin');
221 218
222 MochiKit.Signal.connect(MochiKit.DOM.currentDocument().body, 'onkeydown',this, 'handleKeyEvent'); 219 MochiKit.Signal.connect(MochiKit.DOM.currentDocument().body, 'onkeydown',this, 'handleKeyEvent');
223 }, 220 },
224 221
225 //------------------------------------------------------------------------- 222 //-------------------------------------------------------------------------
226 223
227 'displayMode': function () { 224 'displayMode': function () {
228 return this._displayMode; 225 return this._displayMode;
229 }, 226 },
230 227
231 'setDisplayMode': function (aValue) { 228 'setDisplayMode': function (aValue) {
232 this._displayMode = aValue; 229 this._displayMode = aValue;
233 }, 230 },
234 231
235 //------------------------------------------------------------------------- 232 //-------------------------------------------------------------------------
236 233
237 'plumbDetailsPanel': function () { 234 'plumbDetailsPanel': function () {
238 MochiKit.Signal.connect(this.getId('title'), 'onfocus', MochiKit.Base.method(this, 'handleOnFocusEvent',this.getElement('title').parentNode)); 235 MochiKit.Signal.connect(this.getId('title'), 'onfocus', MochiKit.Base.method(this, 'handleOnFocusEvent',this.getElement('title').parentNode));
239 MochiKit.Signal.connect(this.getId('title'), 'onblur',MochiKit.Base.method(this, 'handleLooseFocusEvent', this.getElement('title').parentNode)); 236 MochiKit.Signal.connect(this.getId('title'), 'onblur',MochiKit.Base.method(this, 'handleLooseFocusEvent', this.getElement('title').parentNode));
240 MochiKit.Signal.connect(this.getId('title'), 'onchange',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue')); 237 MochiKit.Signal.connect(this.getId('title'), 'onchange',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue'));
241 MochiKit.Signal.connect(this.getId('title'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue')); 238 MochiKit.Signal.connect(this.getId('title'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue'));
242 239
243 MochiKit.Signal.connect(this.getId('recordNote'), 'onfocus', MochiKit.Base.method(this, 'handleOnFocusEvent',MochiKit.Selector.findChildElements(this.element(), ['div.notes'])[0])); 240 MochiKit.Signal.connect(this.getId('recordNote'), 'onfocus', MochiKit.Base.method(this, 'handleOnFocusEvent',MochiKit.Selector.findChildElements(this.element(), ['div.notes'])[0]));
244 MochiKit.Signal.connect(this.getId('recordNote'), 'onblur',MochiKit.Base.method(this, 'handleLooseFocusEvent', MochiKit.Selector.findChildElements(this.element(), ['div.notes'])[0])); 241 MochiKit.Signal.connect(this.getId('recordNote'), 'onblur',MochiKit.Base.method(this, 'handleLooseFocusEvent', MochiKit.Selector.findChildElements(this.element(), ['div.notes'])[0]));
245 MochiKit.Signal.connect(this.getId('recordNote'), 'onchange',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue')); 242 MochiKit.Signal.connect(this.getId('recordNote'), 'onchange',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue'));
246 MochiKit.Signal.connect(this.getId('recordNote'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue')); 243 MochiKit.Signal.connect(this.getId('recordNote'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue'));
247 244
248 MochiKit.Signal.connect(this.getId('newFieldValue'), 'onkeydown',this, 'handleKeyDownOnNewFieldValue'); 245 MochiKit.Signal.connect(this.getId('newFieldValue'), 'onkeydown',this, 'handleKeyDownOnNewFieldValue');
249 246
250 MochiKit.Signal.connect(this.getId('newFieldLabel'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue')); 247 MochiKit.Signal.connect(this.getId('newFieldLabel'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue'));
251 MochiKit.Signal.connect(this.getId('newFieldIsLocked'), 'onclick',this, 'toggleNewFieldIsHidden'); 248 MochiKit.Signal.connect(this.getId('newFieldIsLocked'), 'onclick',this, 'toggleNewFieldIsHidden');
252 MochiKit.Signal.connect(this.getId('newFieldValue'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue')); 249 MochiKit.Signal.connect(this.getId('newFieldValue'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue'));
253 250
254 MochiKit.Signal.connect(this.getId('newFieldAddButton'), 'onclick', this, 'handleAddClick'); 251 MochiKit.Signal.connect(this.getId('newFieldAddButton'), 'onclick', this, 'handleAddClick');
255 }, 252 },
256 253
257 //------------------------------------------------------------------------- 254 //-------------------------------------------------------------------------
258 255
259 'insertAllTooltips': function () { 256 'insertAllTooltips': function () {
260 var tooltips; 257 var tooltips;
261 var tooltipEnabled; 258 var tooltipEnabled;
262 259
263 tooltips = {}; 260 tooltips = {};
264 tooltipEnabled = (this.hintMode() == 'ON'); 261 tooltipEnabled = (this.hintMode() == 'ON');
265 262
266 tooltips['title'] = new Clipperz.PM.UI.Common.Components.Tooltip({ 263 tooltips['title'] = new Clipperz.PM.UI.Common.Components.Tooltip({
267 'element':this.getElement('title'), 264 'element':this.getElement('title'),
268 'text': "Insert here the title of the card", 265 'text': "Insert here the title of the card",
269 'position':'RIGHT' 266 'position':'RIGHT'
270 }); 267 });
271 this.addComponent(tooltips['title']); 268 this.addComponent(tooltips['title']);
272 MochiKit.Signal.connect(this.getId('title'), 'onfocus',MochiKit.Base.method(this, 'showTooltipOnFocus', 'title')); 269 MochiKit.Signal.connect(this.getId('title'), 'onfocus',MochiKit.Base.method(this, 'showTooltipOnFocus', 'title'));
273 MochiKit.Signal.connect(this.getId('title'), 'onblur', MochiKit.Base.method(this, 'hideTooltipOnBlur', 'title')); 270 MochiKit.Signal.connect(this.getId('title'), 'onblur', MochiKit.Base.method(this, 'hideTooltipOnBlur', 'title'));
274 271
275 tooltips['newFieldTR'] = new Clipperz.PM.UI.Common.Components.Tooltip({ 272 tooltips['newFieldTR'] = new Clipperz.PM.UI.Common.Components.Tooltip({
276 'element':this.getElement('newFieldTR'), 273 'element':this.getElement('newFieldTR'),
277 'text': "Insert your card new values here", 274 'text': "Insert your card new values here",
278 'position':'RIGHT' 275 'position':'RIGHT'
279 }); 276 });
280 this.addComponent(tooltips['newFieldTR']); 277 this.addComponent(tooltips['newFieldTR']);
281 MochiKit.Signal.connect(this.getId('newFieldLabel'), 'onfocus',MochiKit.Base.method(this, 'showTooltipOnFocus', 'newFieldTR')); 278 MochiKit.Signal.connect(this.getId('newFieldLabel'), 'onfocus',MochiKit.Base.method(this, 'showTooltipOnFocus', 'newFieldTR'));
282 MochiKit.Signal.connect(this.getId('newFieldValue'), 'onblur', MochiKit.Base.method(this, 'hideTooltipOnBlur', 'newFieldTR')); 279 MochiKit.Signal.connect(this.getId('newFieldValue'), 'onblur', MochiKit.Base.method(this, 'hideTooltipOnBlur', 'newFieldTR'));
283 280
284 tooltips['recordNote'] = new Clipperz.PM.UI.Common.Components.Tooltip({ 281 tooltips['recordNote'] = new Clipperz.PM.UI.Common.Components.Tooltip({
285 'element':this.getElement('recordNote'), 282 'element':this.getElement('recordNote'),
286 'text': "You can insert some notes here", 283 'text': "You can insert some notes here",
287 'position':'RIGHT' 284 'position':'RIGHT'
288 }); 285 });
289 this.addComponent(tooltips['recordNote']); 286 this.addComponent(tooltips['recordNote']);
290 MochiKit.Signal.connect(this.getId('recordNote'), 'onfocus',MochiKit.Base.method(this, 'showTooltipOnFocus', 'recordNote')); 287 MochiKit.Signal.connect(this.getId('recordNote'), 'onfocus',MochiKit.Base.method(this, 'showTooltipOnFocus', 'recordNote'));
291 MochiKit.Signal.connect(this.getId('recordNote'), 'onblur', MochiKit.Base.method(this, 'hideTooltipOnBlur', 'recordNote')); 288 MochiKit.Signal.connect(this.getId('recordNote'), 'onblur', MochiKit.Base.method(this, 'hideTooltipOnBlur', 'recordNote'));
292 289
293 this._tooltips = tooltips; 290 this._tooltips = tooltips;
294 }, 291 },
295 292
296 //......................................................................... 293 //.........................................................................
297 294
298 'updateAllTooltipsEnabledMode': function (aStatus) { 295 'updateAllTooltipsEnabledMode': function (aStatus) {
299 vartooltipLabel; 296 vartooltipLabel;
300 var tooltipEnabled; 297 var tooltipEnabled;
301 298
302 tooltipEnabled = (aStatus == 'ON') ? true : false; 299 tooltipEnabled = (aStatus == 'ON') ? true : false;
303 300
304 for (tooltipLabel in this.tooltips()) { 301 for (tooltipLabel in this.tooltips()) {
305 this.tooltips()[tooltipLabel].setIsEnabled(tooltipEnabled); 302 this.tooltips()[tooltipLabel].setIsEnabled(tooltipEnabled);
306 } 303 }
307 }, 304 },
308 305
309 //......................................................................... 306 //.........................................................................
310 307
311 'tooltips': function () { 308 'tooltips': function () {
312 return this._tooltips; 309 return this._tooltips;
313 }, 310 },
314 311
315 //......................................................................... 312 //.........................................................................
316 313
317 'showTooltipOnFocus': function (aTooltip, anEvent) { 314 'showTooltipOnFocus': function (aTooltip, anEvent) {
318 MochiKit.Async.callLater(0.5, MochiKit.Base.method(this.tooltips()[aTooltip], 'show')); 315 MochiKit.Async.callLater(0.5, MochiKit.Base.method(this.tooltips()[aTooltip], 'show'));
319 }, 316 },
320 317
321 //......................................................................... 318 //.........................................................................
322 319
323 'hideTooltipOnBlur': function (aTooltip, anEvent) { 320 'hideTooltipOnBlur': function (aTooltip, anEvent) {
324 this.tooltips()[aTooltip].hide(); 321 this.tooltips()[aTooltip].hide();
325 }, 322 },
326 323
327 //------------------------------------------------------------------------- 324 //-------------------------------------------------------------------------
328 325
329 'displayElement': function() { 326 'displayElement': function() {
330 return this.getElement('panel'); 327 return this.getElement('panel');
331 }, 328 },
332 329
333 //------------------------------------------------------------------------- 330 //-------------------------------------------------------------------------
334 331
335 'fieldComponents': function () { 332 'fieldComponents': function () {
336 return this._fieldComponents; 333 return this._fieldComponents;
337 }, 334 },
338 335
339 //------------------------------------------------------------------------- 336 //-------------------------------------------------------------------------
340 337
341 'directLoginComponents': function () { 338 'directLoginComponents': function () {
342 return this._directLoginComponents; 339 return this._directLoginComponents;
343 }, 340 },
344 341
345 //------------------------------------------------------------------------- 342 //-------------------------------------------------------------------------
346 343
347 'hintMode': function () { 344 'hintMode': function () {
348 return this._hintMode; 345 return this._hintMode;
349 }, 346 },
350 347
351 'setHintMode': function (aValue) { 348 'setHintMode': function (aValue) {
352 if (this._hintMode != aValue) { 349 if (this._hintMode != aValue) {
353 this._hintMode = aValue; 350 this._hintMode = aValue;
354 351
355 this.updateAllTooltipsEnabledMode(this._hintMode); 352 this.updateAllTooltipsEnabledMode(this._hintMode);
356 // if (this._hintMode == 'ON') { 353 // if (this._hintMode == 'ON') {
357 // this.enableHints(); 354 // this.enableHints();
358 // } 355 // }
359 } 356 }
360 }, 357 },
361 358
362 //------------------------------------------------------------------------- 359 //-------------------------------------------------------------------------
363 360
364 'focusOnNewFieldLabel': function () { 361 'focusOnNewFieldLabel': function () {
365 this.getElement('newFieldLabel').focus(); 362 this.getElement('newFieldLabel').focus();
366 }, 363 },
367 364
368 //========================================================================= 365 //=========================================================================
369 366
370 'isSavingEnabled': function () { 367 'isSavingEnabled': function () {
371 return this._isSavingEnabled; 368 return this._isSavingEnabled;
372 }, 369 },
373 370
374 'setShouldEnableSaving': function (aValue) { 371 'setShouldEnableSaving': function (aValue) {
375 this._isSavingEnabled = aValue || this.newFieldHasPendingChanges(); 372 this._isSavingEnabled = aValue || this.newFieldHasPendingChanges();
376 373
377 if (this._isSavingEnabled == true) { 374 if (this._isSavingEnabled == true) {
378 MochiKit.DOM.addElementClass(this.getElement('panel'), 'hasPendingChanges'); 375 MochiKit.DOM.addElementClass(this.getElement('panel'), 'hasPendingChanges');
379 MochiKit.DOM.removeElementClass(this.getId('saveButton'), 'disabled'); 376 MochiKit.DOM.removeElementClass(this.getId('saveButton'), 'disabled');
380 } else { 377 } else {
381 MochiKit.DOM.removeElementClass(this.getElement('panel'), 'hasPendingChanges'); 378 MochiKit.DOM.removeElementClass(this.getElement('panel'), 'hasPendingChanges');
382 MochiKit.DOM.addElementClass(this.getId('saveButton'), 'disabled'); 379 MochiKit.DOM.addElementClass(this.getId('saveButton'), 'disabled');
383 } 380 }
384 }, 381 },
385 382
386 //========================================================================= 383 //=========================================================================
387 384
388 'title': function () { 385 'title': function () {
389 return this.getElement('title').value; 386 return this.getElement('title').value;
390 }, 387 },
391 388
392 'setTitle': function (aValue) { 389 'setTitle': function (aValue) {
393 this.renderTitle(aValue); 390 this.renderTitle(aValue);
394 }, 391 },
395 392
396 //------------------------------------------------------------------------- 393 //-------------------------------------------------------------------------
397 394
398 'renderTitle': function (aValue) { 395 'renderTitle': function (aValue) {
399 this.getElement('title').value = Clipperz.Base.sanitizeString(aValue); 396 this.getElement('title').value = Clipperz.Base.sanitizeString(aValue);
400 }, 397 },
401 398
402 //------------------------------------------------------------------------- 399 //-------------------------------------------------------------------------
403 400
404 'setFocusOnTitleField': function () { 401 'setFocusOnTitleField': function () {
405 this.getElement('title').focus(); 402 this.getElement('title').focus();
406 }, 403 },
407 404
408 //------------------------------------------------------------------------- 405 //-------------------------------------------------------------------------
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogRecordDirectLoginComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogRecordDirectLoginComponent.js
index 126c5b1..2e61f5f 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogRecordDirectLoginComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogRecordDirectLoginComponent.js
@@ -1,182 +1,179 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.CardDialogRecordDirectLoginComponent = function(args) { 28Clipperz.PM.UI.Web.Components.CardDialogRecordDirectLoginComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.CardDialogRecordDirectLoginComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.CardDialogRecordDirectLoginComponent.superclass.constructor.apply(this, arguments);
35 32
36 this._reference = args.reference|| Clipperz.Base.exception.raise('MandatoryParameter'); 33 this._reference = args.reference|| Clipperz.Base.exception.raise('MandatoryParameter');
37 this._faviconComponent = null; 34 this._faviconComponent = null;
38 35
39 return this; 36 return this;
40} 37}
41 38
42//============================================================================= 39//=============================================================================
43 40
44Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.CardDialogRecordDirectLoginComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 41Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.CardDialogRecordDirectLoginComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
45 42
46 //------------------------------------------------------------------------- 43 //-------------------------------------------------------------------------
47 44
48 'toString': function () { 45 'toString': function () {
49 return "Clipperz.PM.UI.Web.Components.CardDialogRecordDirectLoginComponent component"; 46 return "Clipperz.PM.UI.Web.Components.CardDialogRecordDirectLoginComponent component";
50 }, 47 },
51 48
52 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
53 50
54 'reference': function () { 51 'reference': function () {
55 return this._reference; 52 return this._reference;
56 }, 53 },
57 54
58 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
59 56
60 'renderSelf': function() { 57 'renderSelf': function() {
61//console.log(">>> CardDialogRecordDirectLoginComponent.renderSelf"); 58//console.log(">>> CardDialogRecordDirectLoginComponent.renderSelf");
62 this.append(this.element(), [ 59 this.append(this.element(), [
63 {tag:'div', cls:'cardDialogRecordDirectLoginComponent_favicon', children:[ 60 {tag:'div', cls:'cardDialogRecordDirectLoginComponent_favicon', children:[
64 {tag:'img', cls:'favicon', id:this.getId('favicon')} 61 {tag:'img', cls:'favicon', id:this.getId('favicon')}
65 ]}, 62 ]},
66 {tag:'div', cls:'cardDialogRecordDirectLoginComponent_label', children:[ 63 {tag:'div', cls:'cardDialogRecordDirectLoginComponent_label', children:[
67 {tag:'input', id:this.getId('label'), type:'text'} 64 {tag:'input', id:this.getId('label'), type:'text'}
68 ]}, 65 ]},
69 {tag:'div', cls:'open', children:[ 66 {tag:'div', cls:'open', children:[
70 {tag:'span', children:[ 67 {tag:'span', children:[
71 {tag:'a', href:'open', id:this.getId('open'), html:'&nbsp;'} 68 {tag:'a', href:'open', id:this.getId('open'), html:'&nbsp;'}
72 ]} 69 ]}
73 ]}, 70 ]},
74 {tag:'div', cls:'edit', children:[ 71 {tag:'div', cls:'edit', children:[
75 {tag:'span', children:[ 72 {tag:'span', children:[
76 {tag:'a', href:'edit', id:this.getId('edit'), html:"edit"} 73 {tag:'a', href:'edit', id:this.getId('edit'), html:"edit"}
77 ]} 74 ]}
78 ]}, 75 ]},
79 {tag:'div', cls:'delete', children:[ 76 {tag:'div', cls:'delete', children:[
80 {tag:'span', children:[ 77 {tag:'span', children:[
81 {tag:'a', href:'delete', id:this.getId('delete'), html:"delete"} 78 {tag:'a', href:'delete', id:this.getId('delete'), html:"delete"}
82 ]} 79 ]}
83 ]} 80 ]}
84/* 81/*
85 {tag:'td', cls:'fieldState'}, 82 {tag:'td', cls:'fieldState'},
86 {tag:'td', cls:'fieldLabel', children:[ 83 {tag:'td', cls:'fieldLabel', children:[
87 {tag:'input', cls:'label', id:this.getId('label')} 84 {tag:'input', cls:'label', id:this.getId('label')}
88 ]}, 85 ]},
89 {tag:'td', cls:'fieldLock', children:[ 86 {tag:'td', cls:'fieldLock', children:[
90 {tag:'div', cls:'unlocked', id:this.getId('isHidden')} 87 {tag:'div', cls:'unlocked', id:this.getId('isHidden')}
91 ]}, 88 ]},
92 {tag:'td', cls:'fieldValue', children:[ 89 {tag:'td', cls:'fieldValue', children:[
93 {tag:'div', cls:'unlocked', id:this.getId('valueWrapper'), children:[ 90 {tag:'div', cls:'unlocked', id:this.getId('valueWrapper'), children:[
94 {tag:'input', type:'text', cls:'value', id:this.getId('value')} 91 {tag:'input', type:'text', cls:'value', id:this.getId('value')}
95 ]} 92 ]}
96 ]}, 93 ]},
97 {tag:'td', cls:'fieldAddDelete', children:[ 94 {tag:'td', cls:'fieldAddDelete', children:[
98 {tag:'div', cls:'delete', children:[ 95 {tag:'div', cls:'delete', children:[
99 {tag:'span', children:[ 96 {tag:'span', children:[
100 {tag:'a', href:'#', id:this.getId('delete'), html:"delete"} 97 {tag:'a', href:'#', id:this.getId('delete'), html:"delete"}
101 ]} 98 ]}
102 ]} 99 ]}
103 ]} 100 ]}
104*/ 101*/
105 ]); 102 ]);
106 103
107 MochiKit.Signal.connect(this.getId('label'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue')); 104 MochiKit.Signal.connect(this.getId('label'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue'));
108 MochiKit.Signal.connect(this.getId('open'), 'onclick',this, 'openDirectLogin'); 105 MochiKit.Signal.connect(this.getId('open'), 'onclick',this, 'openDirectLogin');
109 MochiKit.Signal.connect(this.getId('edit'), 'onclick',this, 'editDirectLogin'); 106 MochiKit.Signal.connect(this.getId('edit'), 'onclick',this, 'editDirectLogin');
110 MochiKit.Signal.connect(this.getId('delete'), 'onclick',this, 'deleteDirectLogin'); 107 MochiKit.Signal.connect(this.getId('delete'), 'onclick',this, 'deleteDirectLogin');
111 }, 108 },
112 109
113 //------------------------------------------------------------------------- 110 //-------------------------------------------------------------------------
114 111
115 'shouldShowElementWhileRendering': function () { 112 'shouldShowElementWhileRendering': function () {
116 return false; 113 return false;
117 }, 114 },
118 115
119 //------------------------------------------------------------------------- 116 //-------------------------------------------------------------------------
120 117
121 'faviconComponent': function () { 118 'faviconComponent': function () {
122 if (this._faviconComponent == null) { 119 if (this._faviconComponent == null) {
123//console.log("created the FAVICON component"); 120//console.log("created the FAVICON component");
124 this._faviconComponent = new Clipperz.PM.UI.Common.Components.FaviconComponent({element:this.getId('favicon')}); 121 this._faviconComponent = new Clipperz.PM.UI.Common.Components.FaviconComponent({element:this.getId('favicon')});
125 } 122 }
126 123
127 return this._faviconComponent; 124 return this._faviconComponent;
128 }, 125 },
129 126
130 //========================================================================= 127 //=========================================================================
131 128
132 'label': function () { 129 'label': function () {
133 return this.getElement('label').value; 130 return this.getElement('label').value;
134 }, 131 },
135 132
136 'setLabel': function (aValue) { 133 'setLabel': function (aValue) {
137 this.getElement('label').value = Clipperz.Base.sanitizeString(aValue); 134 this.getElement('label').value = Clipperz.Base.sanitizeString(aValue);
138 }, 135 },
139 136
140 //------------------------------------------------------------------------- 137 //-------------------------------------------------------------------------
141 138
142 'favicon': function () { 139 'favicon': function () {
143 // return this.getElement('favicon').src; 140 // return this.getElement('favicon').src;
144 return this.faviconComponent().src(); 141 return this.faviconComponent().src();
145 }, 142 },
146 143
147 'setFavicon': function (aValue) { 144 'setFavicon': function (aValue) {
148 // this.getElement('favicon').src = Clipperz.Base.sanitizeString(aValue); 145 // this.getElement('favicon').src = Clipperz.Base.sanitizeString(aValue);
149 this.faviconComponent().setSrc(Clipperz.Base.sanitizeString(aValue)); 146 this.faviconComponent().setSrc(Clipperz.Base.sanitizeString(aValue));
150 }, 147 },
151 148
152 //========================================================================= 149 //=========================================================================
153 150
154 'openDirectLogin': function (anEvent) { 151 'openDirectLogin': function (anEvent) {
155 anEvent.preventDefault(); 152 anEvent.preventDefault();
156 153
157 MochiKit.Signal.signal(this, 'openDirectLogin', this.reference()); 154 MochiKit.Signal.signal(this, 'openDirectLogin', this.reference());
158 }, 155 },
159 156
160 //------------------------------------------------------------------------- 157 //-------------------------------------------------------------------------
161 158
162 'editDirectLogin': function (anEvent) { 159 'editDirectLogin': function (anEvent) {
163 anEvent.preventDefault(); 160 anEvent.preventDefault();
164 161
165 MochiKit.Signal.signal(this, 'editDirectLogin', this.reference()); 162 MochiKit.Signal.signal(this, 'editDirectLogin', this.reference());
166//console.log("EDIT DIRECT LOGIN"); 163//console.log("EDIT DIRECT LOGIN");
167 }, 164 },
168 165
169 //------------------------------------------------------------------------- 166 //-------------------------------------------------------------------------
170 167
171 'deleteDirectLogin': function (anEvent) { 168 'deleteDirectLogin': function (anEvent) {
172 anEvent.preventDefault(); 169 anEvent.preventDefault();
173 170
174 MochiKit.Signal.signal(this, 'deleteDirectLogin', this.reference()); 171 MochiKit.Signal.signal(this, 'deleteDirectLogin', this.reference());
175//console.log("DELETE DIRECT LOGIN"); 172//console.log("DELETE DIRECT LOGIN");
176 }, 173 },
177 174
178 175
179 176
180 //========================================================================= 177 //=========================================================================
181 __syntaxFix__: "syntax fix" 178 __syntaxFix__: "syntax fix"
182}); 179});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogRecordFieldComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogRecordFieldComponent.js
index c1a7c13..b58062c 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogRecordFieldComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CardDialogRecordFieldComponent.js
@@ -1,190 +1,187 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.CardDialogRecordFieldComponent = function(args) { 28Clipperz.PM.UI.Web.Components.CardDialogRecordFieldComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.CardDialogRecordFieldComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.CardDialogRecordFieldComponent.superclass.constructor.apply(this, arguments);
35 32
36 this._reference = args.reference|| Clipperz.Base.exception.raise('MandatoryParameter'); 33 this._reference = args.reference|| Clipperz.Base.exception.raise('MandatoryParameter');
37 this._actionType = null; 34 this._actionType = null;
38 35
39 return this; 36 return this;
40} 37}
41 38
42//============================================================================= 39//=============================================================================
43 40
44Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.CardDialogRecordFieldComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 41Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.CardDialogRecordFieldComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
45 42
46 //------------------------------------------------------------------------- 43 //-------------------------------------------------------------------------
47 44
48 'toString': function () { 45 'toString': function () {
49 return "Clipperz.PM.UI.Web.Components.CardDialogRecordFieldComponent component"; 46 return "Clipperz.PM.UI.Web.Components.CardDialogRecordFieldComponent component";
50 }, 47 },
51 48
52 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
53 50
54 'renderSelf': function() { 51 'renderSelf': function() {
55 this.append(this.element(), [ 52 this.append(this.element(), [
56 {tag:'td', cls:'fieldState'}, 53 {tag:'td', cls:'fieldState'},
57 {tag:'td', cls:'fieldLabel', children:[ 54 {tag:'td', cls:'fieldLabel', children:[
58 {tag:'input', cls:'label', id:this.getId('label')} 55 {tag:'input', cls:'label', id:this.getId('label')}
59 ]}, 56 ]},
60 {tag:'td', cls:'fieldLock', children:[ 57 {tag:'td', cls:'fieldLock', children:[
61 {tag:'div', cls:'unlocked', id:this.getId('isHidden')} 58 {tag:'div', cls:'unlocked', id:this.getId('isHidden')}
62 ]}, 59 ]},
63 {tag:'td', cls:'fieldValue', children:[ 60 {tag:'td', cls:'fieldValue', children:[
64 {tag:'div', cls:'unlocked', id:this.getId('valueWrapper'), children:[ 61 {tag:'div', cls:'unlocked', id:this.getId('valueWrapper'), children:[
65 {tag:'input', type:'text', cls:'value', id:this.getId('value')} 62 {tag:'input', type:'text', cls:'value', id:this.getId('value')}
66 ]} 63 ]}
67 ]}, 64 ]},
68 {tag:'td', cls:'fieldAction', children:[ 65 {tag:'td', cls:'fieldAction', children:[
69 {tag:'a', href:'#', id:this.getId('actionLink'), html:'&nbsp;'} 66 {tag:'a', href:'#', id:this.getId('actionLink'), html:'&nbsp;'}
70 ]}, 67 ]},
71 {tag:'td', cls:'fieldAddDelete', children:[ 68 {tag:'td', cls:'fieldAddDelete', children:[
72 {tag:'div', cls:'delete', children:[ 69 {tag:'div', cls:'delete', children:[
73 {tag:'span', children:[ 70 {tag:'span', children:[
74 {tag:'a', href:'#', id:this.getId('delete'), html:"delete"} 71 {tag:'a', href:'#', id:this.getId('delete'), html:"delete"}
75 ]} 72 ]}
76 ]} 73 ]}
77 ]} 74 ]}
78 ]); 75 ]);
79 76
80 MochiKit.Signal.connect(this.getId('label'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue')); 77 MochiKit.Signal.connect(this.getId('label'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue'));
81 MochiKit.Signal.connect(this.getId('isHidden'), 'onclick',this, 'toggleIsHidden'); 78 MochiKit.Signal.connect(this.getId('isHidden'), 'onclick',this, 'toggleIsHidden');
82 MochiKit.Signal.connect(this.getId('value'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue')); 79 MochiKit.Signal.connect(this.getId('value'), 'onkeyup',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'changedValue'));
83 MochiKit.Signal.connect(this.getId('actionLink'), 'onclick',this, 'handleActionLink'); 80 MochiKit.Signal.connect(this.getId('actionLink'), 'onclick',this, 'handleActionLink');
84 MochiKit.Signal.connect(this.getId('delete'), 'onclick',this, 'deleteField'); 81 MochiKit.Signal.connect(this.getId('delete'), 'onclick',this, 'deleteField');
85 // MochiKit.Signal.connect(this.getId('delete'), 'onclick',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'deleteField', this.reference())); 82 // MochiKit.Signal.connect(this.getId('delete'), 'onclick',MochiKit.Base.partial(MochiKit.Signal.signal, this, 'deleteField', this.reference()));
86 }, 83 },
87 84
88 //------------------------------------------------------------------------- 85 //-------------------------------------------------------------------------
89 86
90 'shouldShowElementWhileRendering': function () { 87 'shouldShowElementWhileRendering': function () {
91 return false; 88 return false;
92 }, 89 },
93 90
94 //========================================================================= 91 //=========================================================================
95 92
96 'reference': function () { 93 'reference': function () {
97 return this._reference; 94 return this._reference;
98 }, 95 },
99 96
100 //========================================================================= 97 //=========================================================================
101 98
102 'label': function () { 99 'label': function () {
103 return this.getElement('label').value; 100 return this.getElement('label').value;
104 }, 101 },
105 102
106 'setLabel': function (aValue) { 103 'setLabel': function (aValue) {
107 // this.getElement('label').value = Clipperz.Base.sanitizeString(aValue); 104 // this.getElement('label').value = Clipperz.Base.sanitizeString(aValue);
108 this.getElement('label').value = aValue; 105 this.getElement('label').value = aValue;
109 }, 106 },
110 107
111 //========================================================================= 108 //=========================================================================
112 109
113 'value': function () { 110 'value': function () {
114 return this.getElement('value').value; 111 return this.getElement('value').value;
115 }, 112 },
116 113
117 'setValue': function (aValue) { 114 'setValue': function (aValue) {
118 // this.getElement('value').value = Clipperz.Base.sanitizeString(aValue); 115 // this.getElement('value').value = Clipperz.Base.sanitizeString(aValue);
119 this.getElement('value').value = aValue; 116 this.getElement('value').value = aValue;
120 }, 117 },
121 118
122 //------------------------------------------------------------------------- 119 //-------------------------------------------------------------------------
123 120
124 'actionType': function () { 121 'actionType': function () {
125 return this._actionType; 122 return this._actionType;
126 }, 123 },
127 124
128 'setActionType': function (anActionType) { 125 'setActionType': function (anActionType) {
129 this._actionType = anActionType; 126 this._actionType = anActionType;
130 127
131 switch (this._actionType) { 128 switch (this._actionType) {
132 case 'NONE': 129 case 'NONE':
133 MochiKit.Style.hideElement(this.getId('actionLink')); 130 MochiKit.Style.hideElement(this.getId('actionLink'));
134 MochiKit.DOM.setElementClass(this.getId('actionLink'), ''); 131 MochiKit.DOM.setElementClass(this.getId('actionLink'), '');
135 break; 132 break;
136 case 'URL': 133 case 'URL':
137 MochiKit.Style.showElement(this.getId('actionLink')); 134 MochiKit.Style.showElement(this.getId('actionLink'));
138 MochiKit.DOM.setElementClass(this.getId('actionLink'), 'url'); 135 MochiKit.DOM.setElementClass(this.getId('actionLink'), 'url');
139 break; 136 break;
140 case 'EMAIL': 137 case 'EMAIL':
141 MochiKit.Style.showElement(this.getId('actionLink')); 138 MochiKit.Style.showElement(this.getId('actionLink'));
142 MochiKit.DOM.setElementClass(this.getId('actionLink'), 'email'); 139 MochiKit.DOM.setElementClass(this.getId('actionLink'), 'email');
143 break; 140 break;
144 case 'PASSWORD': 141 case 'PASSWORD':
145 MochiKit.Style.showElement(this.getId('actionLink')); 142 MochiKit.Style.showElement(this.getId('actionLink'));
146 MochiKit.DOM.setElementClass(this.getId('actionLink'), 'password'); 143 MochiKit.DOM.setElementClass(this.getId('actionLink'), 'password');
147 break; 144 break;
148 } 145 }
149 }, 146 },
150 147
151 //========================================================================= 148 //=========================================================================
152 149
153 'isHidden': function () { 150 'isHidden': function () {
154 // return this.getElement('value').value; 151 // return this.getElement('value').value;
155 return MochiKit.DOM.hasElementClass(this.getElement('isHidden'), 'locked'); 152 return MochiKit.DOM.hasElementClass(this.getElement('isHidden'), 'locked');
156 }, 153 },
157 154
158 'setIsHidden': function (aValue) { 155 'setIsHidden': function (aValue) {
159 // this.getElement('value').value = Clipperz.Base.sanitizeString(aValue); 156 // this.getElement('value').value = Clipperz.Base.sanitizeString(aValue);
160 MochiKit.DOM.setElementClass(this.getElement('isHidden'), (aValue ? 'locked': 'unlocked')); 157 MochiKit.DOM.setElementClass(this.getElement('isHidden'), (aValue ? 'locked': 'unlocked'));
161 MochiKit.DOM.setElementClass(this.getElement('valueWrapper'), (aValue ? 'locked': 'unlocked')); 158 MochiKit.DOM.setElementClass(this.getElement('valueWrapper'), (aValue ? 'locked': 'unlocked'));
162 }, 159 },
163 160
164 'toggleIsHidden': function (anEvent) { 161 'toggleIsHidden': function (anEvent) {
165 anEvent.preventDefault(); 162 anEvent.preventDefault();
166 163
167 this.setIsHidden(! this.isHidden()); 164 this.setIsHidden(! this.isHidden());
168 MochiKit.Signal.signal(this, 'changedValue'); 165 MochiKit.Signal.signal(this, 'changedValue');
169 }, 166 },
170 167
171 //========================================================================= 168 //=========================================================================
172 169
173 'handleActionLink': function (anEvent) { 170 'handleActionLink': function (anEvent) {
174 anEvent.preventDefault(); 171 anEvent.preventDefault();
175 172
176//console.log("ACTION LINK - " + this.actionType()); 173//console.log("ACTION LINK - " + this.actionType());
177 MochiKit.Signal.signal(this, 'performAction', this.reference(), anEvent.target()); 174 MochiKit.Signal.signal(this, 'performAction', this.reference(), anEvent.target());
178 }, 175 },
179 176
180 //========================================================================= 177 //=========================================================================
181 178
182 'deleteField': function (anEvent) { 179 'deleteField': function (anEvent) {
183 anEvent.preventDefault(); 180 anEvent.preventDefault();
184 181
185 MochiKit.Signal.signal(this, 'deleteField', this.reference()); 182 MochiKit.Signal.signal(this, 'deleteField', this.reference());
186 }, 183 },
187 184
188 //========================================================================= 185 //=========================================================================
189 __syntaxFix__: "syntax fix" 186 __syntaxFix__: "syntax fix"
190}); 187});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ColumnManager.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ColumnManager.js
index bfc7e61..391c379 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ColumnManager.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ColumnManager.js
@@ -1,203 +1,200 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31//############################################################################# 28//#############################################################################
32 29
33Clipperz.PM.UI.Web.Components.ColumnManager = function(args) { 30Clipperz.PM.UI.Web.Components.ColumnManager = function(args) {
34 args = args || {}; 31 args = args || {};
35 Clipperz.PM.UI.Web.Components.ColumnManager.superclass.constructor.call(this, args); 32 Clipperz.PM.UI.Web.Components.ColumnManager.superclass.constructor.call(this, args);
36 33
37 this._name = args.name || Clipperz.Base.exception.raise('MandatoryParameter'); 34 this._name = args.name || Clipperz.Base.exception.raise('MandatoryParameter');
38 this._selector = args.selector|| Clipperz.Base.exception.raise('MandatoryParameter');; 35 this._selector = args.selector|| Clipperz.Base.exception.raise('MandatoryParameter');;
39 this._label = args.label || null; 36 this._label = args.label || null;
40 this._isSortable = args.sortable|| false; 37 this._isSortable = args.sortable|| false;
41 this._comparator = args.comparator|| null; 38 this._comparator = args.comparator|| null;
42 this._sorted = args.sorted || 'UNSORTED'; //'ASCENDING' | 'DESCENDING' | 'UNSORTED' 39 this._sorted = args.sorted || 'UNSORTED'; //'ASCENDING' | 'DESCENDING' | 'UNSORTED'
43 this._cssClass = args.cssClass|| ''; 40 this._cssClass = args.cssClass|| '';
44 41
45 this._signalIdentifiers = []; 42 this._signalIdentifiers = [];
46 43
47 return this; 44 return this;
48} 45}
49 46
50//============================================================================= 47//=============================================================================
51 48
52Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.ColumnManager, Clipperz.PM.UI.Common.Components.BaseComponent, { 49Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.ColumnManager, Clipperz.PM.UI.Common.Components.BaseComponent, {
53 50
54 'toString': function () { 51 'toString': function () {
55 return "Clipperz.PM.UI.Web.Components.ColumnManager - " + this._name; 52 return "Clipperz.PM.UI.Web.Components.ColumnManager - " + this._name;
56 }, 53 },
57 54
58 'name': function () { 55 'name': function () {
59 return this._name; 56 return this._name;
60 }, 57 },
61 58
62 'label': function () { 59 'label': function () {
63 return this._label; 60 return this._label;
64 }, 61 },
65 62
66 'selector': function () { 63 'selector': function () {
67 return this._selector; 64 return this._selector;
68 }, 65 },
69 66
70 'comparator': function() { 67 'comparator': function() {
71 return this._comparator; 68 return this._comparator;
72 }, 69 },
73 70
74 'cssClass': function() { 71 'cssClass': function() {
75 return this._cssClass; 72 return this._cssClass;
76 }, 73 },
77 74
78 //------------------------------------------------------------------------- 75 //-------------------------------------------------------------------------
79 76
80 'isSortable': function () { 77 'isSortable': function () {
81 return this._isSortable; 78 return this._isSortable;
82 }, 79 },
83 80
84 //------------------------------------------------------------------------- 81 //-------------------------------------------------------------------------
85 82
86 'sorted': function () { 83 'sorted': function () {
87 return this._sorted; 84 return this._sorted;
88 }, 85 },
89 86
90 'isSorted': function () { 87 'isSorted': function () {
91 return (this.sorted() != 'UNSORTED'); 88 return (this.sorted() != 'UNSORTED');
92 }, 89 },
93 90
94 'setSorted': function(aValue) { 91 'setSorted': function(aValue) {
95 this._sorted = aValue; 92 this._sorted = aValue;
96 this.updateSortIcon(); 93 this.updateSortIcon();
97 }, 94 },
98 95
99 //------------------------------------------------------------------------- 96 //-------------------------------------------------------------------------
100 97
101 'signalIdentifiers': function () { 98 'signalIdentifiers': function () {
102 return this._signalIdentifiers; 99 return this._signalIdentifiers;
103 }, 100 },
104 101
105 'resetSignalIdentifiers': function () { 102 'resetSignalIdentifiers': function () {
106 this._signalIdentifiers = []; 103 this._signalIdentifiers = [];
107 }, 104 },
108 105
109 //------------------------------------------------------------------------- 106 //-------------------------------------------------------------------------
110 107
111 'disconnectRowsSignals': function () { 108 'disconnectRowsSignals': function () {
112 MochiKit.Base.map(MochiKit.Signal.disconnect, this.signalIdentifiers()); 109 MochiKit.Base.map(MochiKit.Signal.disconnect, this.signalIdentifiers());
113 this.resetSignalIdentifiers(); 110 this.resetSignalIdentifiers();
114 }, 111 },
115 112
116 'connectEvent': function () { 113 'connectEvent': function () {
117 var ident; 114 var ident;
118 115
119 ident = MochiKit.Signal.connect.apply(null, arguments); 116 ident = MochiKit.Signal.connect.apply(null, arguments);
120 this.signalIdentifiers().push(ident); 117 this.signalIdentifiers().push(ident);
121 }, 118 },
122 119
123 //------------------------------------------------------------------------- 120 //-------------------------------------------------------------------------
124 121
125 'renderHeader': function(aTRElement) { 122 'renderHeader': function(aTRElement) {
126 varthElement; 123 varthElement;
127 124
128 thElement = Clipperz.DOM.Helper.append(aTRElement, {tag:'th', cls:(this.cssClass() + 'TH'), id:this.getId('sortLink'), children:[ 125 thElement = Clipperz.DOM.Helper.append(aTRElement, {tag:'th', cls:(this.cssClass() + 'TH'), id:this.getId('sortLink'), children:[
129 {tag:'span', html:this.label() ? this.label() : '&nbsp;'} 126 {tag:'span', html:this.label() ? this.label() : '&nbsp;'}
130 ]}); 127 ]});
131 128
132 if (this.isSortable()) { 129 if (this.isSortable()) {
133 Clipperz.DOM.Helper.append(thElement, {tag:'span', cls:'sortable', children:[ 130 Clipperz.DOM.Helper.append(thElement, {tag:'span', cls:'sortable', children:[
134 {tag:'a', href:'#'/*, id:this.getId('sortLink')*/, html:'&nbsp;'} 131 {tag:'a', href:'#'/*, id:this.getId('sortLink')*/, html:'&nbsp;'}
135 ]}); 132 ]});
136 133
137 MochiKit.DOM.addElementClass(thElement, 'sortable'); 134 MochiKit.DOM.addElementClass(thElement, 'sortable');
138 MochiKit.Signal.connect(thElement, 'onclick', this, 'handleClickOnSortingCriteria'); 135 MochiKit.Signal.connect(thElement, 'onclick', this, 'handleClickOnSortingCriteria');
139 }; 136 };
140 137
141 this.updateSortIcon(); 138 this.updateSortIcon();
142 }, 139 },
143 140
144 //------------------------------------------------------------------------- 141 //-------------------------------------------------------------------------
145 142
146 'toggleSorting': function () { 143 'toggleSorting': function () {
147 var result; 144 var result;
148 switch (this.sorted()) { 145 switch (this.sorted()) {
149 case 'UNSORTED': 146 case 'UNSORTED':
150 result = 'ASCENDING'; 147 result = 'ASCENDING';
151 break; 148 break;
152 case 'ASCENDING': 149 case 'ASCENDING':
153 result = 'DESCENDING'; 150 result = 'DESCENDING';
154 break; 151 break;
155 case 'DESCENDING': 152 case 'DESCENDING':
156 result = 'ASCENDING'; 153 result = 'ASCENDING';
157 break; 154 break;
158 default: 155 default:
159 result = 'UNSORTED'; 156 result = 'UNSORTED';
160 break; 157 break;
161 } 158 }
162 159
163 this.setSorted(result); 160 this.setSorted(result);
164 161
165 return result; 162 return result;
166 }, 163 },
167 164
168 //------------------------------------------------------------------------- 165 //-------------------------------------------------------------------------
169 166
170 'sortElementClass': function () { 167 'sortElementClass': function () {
171 return this.sorted().toLowerCase(); 168 return this.sorted().toLowerCase();
172 }, 169 },
173 170
174 //------------------------------------------------------------------------- 171 //-------------------------------------------------------------------------
175 172
176 'updateSortIcon': function () { 173 'updateSortIcon': function () {
177 if (this.isSortable()) { 174 if (this.isSortable()) {
178 MochiKit.DOM.removeElementClass(this.getId('sortLink'), 'ascending'); 175 MochiKit.DOM.removeElementClass(this.getId('sortLink'), 'ascending');
179 MochiKit.DOM.removeElementClass(this.getId('sortLink'), 'descending'); 176 MochiKit.DOM.removeElementClass(this.getId('sortLink'), 'descending');
180 MochiKit.DOM.removeElementClass(this.getId('sortLink'), 'unsorted'); 177 MochiKit.DOM.removeElementClass(this.getId('sortLink'), 'unsorted');
181 178
182 MochiKit.DOM.addElementClass(this.getId('sortLink'), this.sortElementClass()); 179 MochiKit.DOM.addElementClass(this.getId('sortLink'), this.sortElementClass());
183 } 180 }
184 }, 181 },
185 182
186 //------------------------------------------------------------------------- 183 //-------------------------------------------------------------------------
187 184
188 'renderCell': function(aRowElement, anObject) { 185 'renderCell': function(aRowElement, anObject) {
189 Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[{tag:'span', html:anObject[this.name()]}]}); 186 Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[{tag:'span', html:anObject[this.name()]}]});
190 }, 187 },
191 188
192 //----------------------------------------------------- 189 //-----------------------------------------------------
193 190
194 'handleClickOnSortingCriteria': function (anEvent) { 191 'handleClickOnSortingCriteria': function (anEvent) {
195 anEvent.preventDefault(); 192 anEvent.preventDefault();
196 MochiKit.Signal.signal(this, 'sort', this); 193 MochiKit.Signal.signal(this, 'sort', this);
197 }, 194 },
198 195
199 //----------------------------------------------------- 196 //-----------------------------------------------------
200 '__syntax_fix__' : 'syntax fix' 197 '__syntax_fix__' : 'syntax fix'
201 198
202}); 199});
203 200
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CreateNewCardSplashComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CreateNewCardSplashComponent.js
index 61d6ead..d3aa175 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CreateNewCardSplashComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/CreateNewCardSplashComponent.js
@@ -1,71 +1,68 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.CreateNewCardSplashComponent = function(args) { 28Clipperz.PM.UI.Web.Components.CreateNewCardSplashComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.CreateNewCardSplashComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.CreateNewCardSplashComponent.superclass.constructor.apply(this, arguments);
35 32
36 return this; 33 return this;
37} 34}
38 35
39//============================================================================= 36//=============================================================================
40 37
41Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.CreateNewCardSplashComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 38Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.CreateNewCardSplashComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
42 39
43 //------------------------------------------------------------------------- 40 //-------------------------------------------------------------------------
44 41
45 'toString': function () { 42 'toString': function () {
46 return "Clipperz.PM.UI.Web.Components.CreateNewCardSplashComponent component"; 43 return "Clipperz.PM.UI.Web.Components.CreateNewCardSplashComponent component";
47 }, 44 },
48 45
49 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
50 47
51 'renderSelf': function() { 48 'renderSelf': function() {
52 this.append(this.element(), [ 49 this.append(this.element(), [
53 {tag:'div', cls:'createNewCardSplash', id:this.getId('button'), children:[ 50 {tag:'div', cls:'createNewCardSplash', id:this.getId('button'), children:[
54 {tag:'span', html:"Create New Card"} 51 {tag:'span', html:"Create New Card"}
55 ]} 52 ]}
56 ]); 53 ]);
57 54
58 MochiKit.Signal.connect(this.getElement('button'), 'onclick', this, 'handleClick'); 55 MochiKit.Signal.connect(this.getElement('button'), 'onclick', this, 'handleClick');
59 }, 56 },
60 57
61 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
62 59
63 'handleClick': function (anEvent) { 60 'handleClick': function (anEvent) {
64 anEvent.preventDefault(); 61 anEvent.preventDefault();
65 MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'addCard', this.element()); 62 MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'addCard', this.element());
66 }, 63 },
67 64
68 //------------------------------------------------------------------------- 65 //-------------------------------------------------------------------------
69 66
70 __syntaxFix__: "syntax fix" 67 __syntaxFix__: "syntax fix"
71}); 68});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js
index 91d99e3..d2f1045 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js
@@ -1,111 +1,108 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.DataPanel = function(args) { 28Clipperz.PM.UI.Web.Components.DataPanel = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.DataPanel.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.DataPanel.superclass.constructor.apply(this, arguments);
35 32
36 this._initiallySelectedTab = args.selected || 'OFFLINE_COPY'; 33 this._initiallySelectedTab = args.selected || 'OFFLINE_COPY';
37 this._tabPanelControllerConfiguration = { 34 this._tabPanelControllerConfiguration = {
38 'OFFLINE_COPY': { 35 'OFFLINE_COPY': {
39 tab:'offlineCopyTab', 36 tab:'offlineCopyTab',
40 panel:'offlineCopyPanel' 37 panel:'offlineCopyPanel'
41 }, 38 },
42 'SHARING': { 39 'SHARING': {
43 tab:'sharingTab', 40 tab:'sharingTab',
44 panel:'sharingPanel' 41 panel:'sharingPanel'
45 }, 42 },
46 'IMPORT': { 43 'IMPORT': {
47 tab:'importTab', 44 tab:'importTab',
48 panel:'importPanel' 45 panel:'importPanel'
49 }, 46 },
50 'EXPORT': { 47 'EXPORT': {
51 tab:'exportTab', 48 tab:'exportTab',
52 panel:'exportPanel' 49 panel:'exportPanel'
53 } 50 }
54 }; 51 };
55 52
56 return this; 53 return this;
57} 54}
58 55
59//============================================================================= 56//=============================================================================
60 57
61Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DataPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, { 58Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DataPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, {
62 59
63 //------------------------------------------------------------------------- 60 //-------------------------------------------------------------------------
64 61
65 'toString': function () { 62 'toString': function () {
66 return "Clipperz.PM.UI.Web.Components.DataPanel component"; 63 return "Clipperz.PM.UI.Web.Components.DataPanel component";
67 }, 64 },
68 65
69 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
70 67
71 'renderSelf': function(/*aContainer, aPosition*/) { 68 'renderSelf': function(/*aContainer, aPosition*/) {
72 this.append(this.element(), [ 69 this.append(this.element(), [
73 {tag:'div', cls:'header', children:[ 70 {tag:'div', cls:'header', children:[
74 {tag:'div', cls:'subPanelTabs', children:[ 71 {tag:'div', cls:'subPanelTabs', children:[
75 {tag:'ul', children:[ 72 {tag:'ul', children:[
76 {tag:'li', id:this.getId('offlineCopyTab'),children:[{tag:'a', href:'#', html:'Offline copy'}], cls:'first'}, 73 {tag:'li', id:this.getId('offlineCopyTab'),children:[{tag:'a', href:'#', html:'Offline copy'}], cls:'first'},
77 {tag:'li', id:this.getId('sharingTab'), children:[{tag:'a', href:'#', html:'Sharing'}]}, 74 {tag:'li', id:this.getId('sharingTab'), children:[{tag:'a', href:'#', html:'Sharing'}]},
78 {tag:'li', id:this.getId('importTab'), children:[{tag:'a', href:'#', html:'Import'}]}, 75 {tag:'li', id:this.getId('importTab'), children:[{tag:'a', href:'#', html:'Import'}]},
79 {tag:'li', id:this.getId('exportTab'), children:[{tag:'a', href:'#', html:'Export'}]} 76 {tag:'li', id:this.getId('exportTab'), children:[{tag:'a', href:'#', html:'Export'}]}
80 ]} 77 ]}
81 ]} 78 ]}
82 ]}, 79 ]},
83 {tag:'div', cls:'body', children:[ 80 {tag:'div', cls:'body', children:[
84 {tag:'div', cls:'accountPanel', children:[ 81 {tag:'div', cls:'accountPanel', children:[
85 {tag:'div', cls:'subPanelContent', children:[ 82 {tag:'div', cls:'subPanelContent', children:[
86 {tag:'ul', children:[ 83 {tag:'ul', children:[
87 {tag:'li', id:this.getId('offlineCopyPanel'),children:[ 84 {tag:'li', id:this.getId('offlineCopyPanel'),children:[
88 {tag:'h3', html:"Offline copy"} 85 {tag:'h3', html:"Offline copy"}
89 ]}, 86 ]},
90 {tag:'li', id:this.getId('sharingPanel'),children:[ 87 {tag:'li', id:this.getId('sharingPanel'),children:[
91 {tag:'h3', html:"Sharing"} 88 {tag:'h3', html:"Sharing"}
92 ]}, 89 ]},
93 {tag:'li', id:this.getId('importPanel'), children:[ 90 {tag:'li', id:this.getId('importPanel'), children:[
94 {tag:'h3', html:"Import"} 91 {tag:'h3', html:"Import"}
95 ]}, 92 ]},
96 {tag:'li', id:this.getId('exportPanel'), children:[ 93 {tag:'li', id:this.getId('exportPanel'), children:[
97 {tag:'h3', html:"Export"} 94 {tag:'h3', html:"Export"}
98 ]} 95 ]}
99 ]} 96 ]}
100 ]} 97 ]}
101 ]} 98 ]}
102 ]}, 99 ]},
103 {tag:'div', cls:'footer'} 100 {tag:'div', cls:'footer'}
104 ]); 101 ]);
105 102
106 this.tabPanelController().setup({selected:this.initiallySelectedTab()}); 103 this.tabPanelController().setup({selected:this.initiallySelectedTab()});
107 }, 104 },
108 105
109 //------------------------------------------------------------------------- 106 //-------------------------------------------------------------------------
110 __syntaxFix__: "syntax fix" 107 __syntaxFix__: "syntax fix"
111}); 108});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DateColumnManager.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DateColumnManager.js
index 3f8aa88..ea55ba4 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DateColumnManager.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DateColumnManager.js
@@ -1,72 +1,69 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31//############################################################################# 28//#############################################################################
32 29
33Clipperz.PM.UI.Web.Components.DateColumnManager = function(args) { 30Clipperz.PM.UI.Web.Components.DateColumnManager = function(args) {
34 args = args || {}; 31 args = args || {};
35 Clipperz.PM.UI.Web.Components.DateColumnManager.superclass.constructor.call(this, args); 32 Clipperz.PM.UI.Web.Components.DateColumnManager.superclass.constructor.call(this, args);
36 33
37 this._format = args.format|| Clipperz.Base.exception.raise('MandatoryParameter'); 34 this._format = args.format|| Clipperz.Base.exception.raise('MandatoryParameter');
38 35
39 return this; 36 return this;
40} 37}
41 38
42//============================================================================= 39//=============================================================================
43 40
44Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DateColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, { 41Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DateColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, {
45 42
46 'toString': function () { 43 'toString': function () {
47 return "Clipperz.PM.UI.Web.Components.DateColumnManager component"; 44 return "Clipperz.PM.UI.Web.Components.DateColumnManager component";
48 }, 45 },
49 46
50 //------------------------------------------------------------------------- 47 //-------------------------------------------------------------------------
51 48
52 'format': function () { 49 'format': function () {
53 return this._format; 50 return this._format;
54 }, 51 },
55 52
56 //------------------------------------------------------------------------- 53 //-------------------------------------------------------------------------
57 54
58 'renderCell': function(aRowElement, anObject) { 55 'renderCell': function(aRowElement, anObject) {
59 Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[ 56 Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[
60 { 57 {
61 tag:'span', 58 tag:'span',
62 title:Clipperz.PM.Date.formatDateWithTemplate(anObject[this.name()], "D, d M Y H:i:s"), 59 title:Clipperz.PM.Date.formatDateWithTemplate(anObject[this.name()], "D, d M Y H:i:s"),
63 html:Clipperz.PM.Date.formatDateWithTemplate(anObject[this.name()], this.format()) 60 html:Clipperz.PM.Date.formatDateWithTemplate(anObject[this.name()], this.format())
64 } 61 }
65 ]}); 62 ]});
66 }, 63 },
67 64
68 //----------------------------------------------------- 65 //-----------------------------------------------------
69 66
70 '__syntax_fix__' : 'syntax fix' 67 '__syntax_fix__' : 'syntax fix'
71}); 68});
72 69
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DeleteObjectColumnManager.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DeleteObjectColumnManager.js
index ee60f2f..fe59494 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DeleteObjectColumnManager.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DeleteObjectColumnManager.js
@@ -1,70 +1,67 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31//############################################################################# 28//#############################################################################
32 29
33Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager = function(args) { 30Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager = function(args) {
34 args = args || {}; 31 args = args || {};
35 Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager.superclass.constructor.call(this, args); 32 Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager.superclass.constructor.call(this, args);
36 33
37 return this; 34 return this;
38} 35}
39 36
40//============================================================================= 37//=============================================================================
41 38
42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager, Clipperz.PM.UI.Web.Components.LinkColumnManager, { 39Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager, Clipperz.PM.UI.Web.Components.LinkColumnManager, {
43 40
44 'toString': function () { 41 'toString': function () {
45 return "Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager component"; 42 return "Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager component";
46 }, 43 },
47 44
48 //------------------------------------------------------------------------- 45 //-------------------------------------------------------------------------
49 46
50 'renderCell': function(aRowElement, anObject) { 47 'renderCell': function(aRowElement, anObject) {
51 var tdElement; 48 var tdElement;
52 var linkElement; 49 var linkElement;
53 50
54 tdElement = Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[ 51 tdElement = Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[
55 {tag:'div', cls:'delete', children:[ 52 {tag:'div', cls:'delete', children:[
56 {tag:'span', children:[ 53 {tag:'span', children:[
57 {tag:'a', href:'delete', html:"delete"} 54 {tag:'a', href:'delete', html:"delete"}
58 ]} 55 ]}
59 ]} 56 ]}
60 ]}); 57 ]});
61 58
62 linkElement = MochiKit.DOM.getFirstElementByTagAndClassName('a', null, tdElement); 59 linkElement = MochiKit.DOM.getFirstElementByTagAndClassName('a', null, tdElement);
63 // MochiKit.Signal.connect(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject'])); 60 // MochiKit.Signal.connect(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject']));
64 this.connectEvent(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject'])); 61 this.connectEvent(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject']));
65 }, 62 },
66 63
67 //----------------------------------------------------- 64 //-----------------------------------------------------
68 '__syntax_fix__' : 'syntax fix' 65 '__syntax_fix__' : 'syntax fix'
69}); 66});
70 67
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginColumnManager.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginColumnManager.js
index 4bf9020..a1f0f9f 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginColumnManager.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginColumnManager.js
@@ -1,90 +1,87 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29/* 26/*
30Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 27Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
31 28
32//############################################################################# 29//#############################################################################
33 30
34Clipperz.PM.UI.Web.Components.DirectLoginColumnManager = function(args) { 31Clipperz.PM.UI.Web.Components.DirectLoginColumnManager = function(args) {
35 args = args || {}; 32 args = args || {};
36 Clipperz.PM.UI.Web.Components.DirectLoginColumnManager.superclass.constructor.call(this, args); 33 Clipperz.PM.UI.Web.Components.DirectLoginColumnManager.superclass.constructor.call(this, args);
37 34
38 this._actionMethod = args.actionMethod || null; 35 this._actionMethod = args.actionMethod || null;
39 36
40 return this; 37 return this;
41} 38}
42 39
43//============================================================================= 40//=============================================================================
44 41
45Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, { 42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, {
46 43
47 'toString': function () { 44 'toString': function () {
48 return "Clipperz.PM.UI.Web.Components.DateColumnManager component"; 45 return "Clipperz.PM.UI.Web.Components.DateColumnManager component";
49 }, 46 },
50 47
51 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
52 49
53 'actionMethod': function () { 50 'actionMethod': function () {
54 return this._actionMethod; 51 return this._actionMethod;
55 }, 52 },
56 53
57 //------------------------------------------------------------------------- 54 //-------------------------------------------------------------------------
58 55
59 'renderCell': function(aRowElement, anObject) { 56 'renderCell': function(aRowElement, anObject) {
60 vartdElement; 57 vartdElement;
61 varlinkElement; 58 varlinkElement;
62 59
63 tdElement = Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[ 60 tdElement = Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[
64 {tag:'div', cls:'directLogin_directLogin', children:[ 61 {tag:'div', cls:'directLogin_directLogin', children:[
65 {tag:'div', cls:'directLogin_directLogin_body', children:[ 62 {tag:'div', cls:'directLogin_directLogin_body', children:[
66 {tag:'a', href:'#', html:anObject[this.name()]} 63 {tag:'a', href:'#', html:anObject[this.name()]}
67 ]} 64 ]}
68 ]} 65 ]}
69 ]}); 66 ]});
70 67
71 linkElement = MochiKit.DOM.getFirstElementByTagAndClassName('a', null, tdElement); 68 linkElement = MochiKit.DOM.getFirstElementByTagAndClassName('a', null, tdElement);
72 // MochiKit.Signal.connect(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject'])); 69 // MochiKit.Signal.connect(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject']));
73 this.connectEvent(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject'])); 70 this.connectEvent(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject']));
74 }, 71 },
75 72
76 //----------------------------------------------------- 73 //-----------------------------------------------------
77 74
78 'handleLinkClick': function (anObject, anEvent) { 75 'handleLinkClick': function (anObject, anEvent) {
79 anEvent.preventDefault(); 76 anEvent.preventDefault();
80 77
81 if (this.actionMethod() != null) { 78 if (this.actionMethod() != null) {
82 this.actionMethod()(anObject, anEvent); 79 this.actionMethod()(anObject, anEvent);
83 } 80 }
84 }, 81 },
85 82
86 //----------------------------------------------------- 83 //-----------------------------------------------------
87 '__syntax_fix__' : 'syntax fix' 84 '__syntax_fix__' : 'syntax fix'
88}); 85});
89 86
90*/ \ No newline at end of file 87*/ \ No newline at end of file
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingBindingComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingBindingComponent.js
index 9a9c0b2..1a76b0c 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingBindingComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingBindingComponent.js
@@ -1,168 +1,165 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.DirectLoginEditingBindingComponent = function(args) { 28Clipperz.PM.UI.Web.Components.DirectLoginEditingBindingComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.DirectLoginEditingBindingComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.DirectLoginEditingBindingComponent.superclass.constructor.apply(this, arguments);
35 32
36 this._formFieldName = args.formFieldName|| Clipperz.Base.exception.raise('MandatoryParameter'); 33 this._formFieldName = args.formFieldName|| Clipperz.Base.exception.raise('MandatoryParameter');
37 this._fields = args.fields || Clipperz.Base.exception.raise('MandatoryParameter'); 34 this._fields = args.fields || Clipperz.Base.exception.raise('MandatoryParameter');
38 this._initiallySelectedFieldKey = args.selectedFieldKey|| null; 35 this._initiallySelectedFieldKey = args.selectedFieldKey|| null;
39 36
40 return this; 37 return this;
41} 38}
42 39
43//============================================================================= 40//=============================================================================
44 41
45Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginEditingBindingComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginEditingBindingComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
46 43
47 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
48 45
49 'toString': function () { 46 'toString': function () {
50 return "Clipperz.PM.UI.Web.Components.DirectLoginEditingBindingComponent component"; 47 return "Clipperz.PM.UI.Web.Components.DirectLoginEditingBindingComponent component";
51 }, 48 },
52 49
53 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
54 51
55 'formFieldName': function () { 52 'formFieldName': function () {
56 return this._formFieldName; 53 return this._formFieldName;
57 }, 54 },
58 55
59 //------------------------------------------------------------------------- 56 //-------------------------------------------------------------------------
60 57
61 'fields': function () { 58 'fields': function () {
62 return this._fields; 59 return this._fields;
63 }, 60 },
64 61
65 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
66 63
67 'selectedValue': function () { 64 'selectedValue': function () {
68 var result; 65 var result;
69 66
70 result = this.getElement('select').value; 67 result = this.getElement('select').value;
71 68
72 if (result == '---') { 69 if (result == '---') {
73 result = null; 70 result = null;
74 } 71 }
75 72
76 return result; 73 return result;
77 }, 74 },
78 75
79 'initiallySelectedFieldKey': function () { 76 'initiallySelectedFieldKey': function () {
80 return this._initiallySelectedFieldKey; 77 return this._initiallySelectedFieldKey;
81 }, 78 },
82 79
83 //========================================================================= 80 //=========================================================================
84 81
85 'renderSelf': function() { 82 'renderSelf': function() {
86 var initiallySelectedOptions; 83 var initiallySelectedOptions;
87 84
88 this.append(this.element(), {tag:'div', id:this.getId('div'), cls:'binding', children:[ 85 this.append(this.element(), {tag:'div', id:this.getId('div'), cls:'binding', children:[
89 {tag:'span', cls:'formFieldName', html:this.formFieldName()}, 86 {tag:'span', cls:'formFieldName', html:this.formFieldName()},
90 {tag:'span', cls:'fieldLock', id:this.getId('isHidden'), children:[ 87 {tag:'span', cls:'fieldLock', id:this.getId('isHidden'), children:[
91 {tag:'a', href:'#', id:this.getId('showHide'), html:'&nbsp;'} 88 {tag:'a', href:'#', id:this.getId('showHide'), html:'&nbsp;'}
92 ]}, 89 ]},
93 {tag:'input', id:this.getId('input'), cls:'formFieldExampleValue', disabled:true, value:''}, 90 {tag:'input', id:this.getId('input'), cls:'formFieldExampleValue', disabled:true, value:''},
94 {tag:'select', name:this.formFieldName(), id:this.getId('select'), cls:'formFieldMatchinCardField', children: 91 {tag:'select', name:this.formFieldName(), id:this.getId('select'), cls:'formFieldMatchinCardField', children:
95 MochiKit.Base.flattenArguments( 92 MochiKit.Base.flattenArguments(
96 {tag:'option', value:'---', html:"---"}, 93 {tag:'option', value:'---', html:"---"},
97 MochiKit.Base.map( 94 MochiKit.Base.map(
98 MochiKit.Base.bind(function (aField) { return {tag:'option', value:aField['reference'], html:aField['label']}; }, this), 95 MochiKit.Base.bind(function (aField) { return {tag:'option', value:aField['reference'], html:aField['label']}; }, this),
99 this.fields() 96 this.fields()
100 ) 97 )
101 ) 98 )
102 } 99 }
103 ]}); 100 ]});
104 101
105 MochiKit.Signal.connect(this.getElement('select'), 'onchange', this, 'handleSelectChange'); 102 MochiKit.Signal.connect(this.getElement('select'), 'onchange', this, 'handleSelectChange');
106 MochiKit.Signal.connect(this.getElement('showHide'), 'onclick', this, 'handleShowHide'); 103 MochiKit.Signal.connect(this.getElement('showHide'), 'onclick', this, 'handleShowHide');
107 104
108 if (! MochiKit.Base.isUndefinedOrNull(this.initiallySelectedFieldKey())) { 105 if (! MochiKit.Base.isUndefinedOrNull(this.initiallySelectedFieldKey())) {
109 initiallySelectedOptions = MochiKit.Selector.findChildElements(this.element(), ['option[value=' + this.initiallySelectedFieldKey() + ']']); 106 initiallySelectedOptions = MochiKit.Selector.findChildElements(this.element(), ['option[value=' + this.initiallySelectedFieldKey() + ']']);
110 if (initiallySelectedOptions.length == 1) { 107 if (initiallySelectedOptions.length == 1) {
111 MochiKit.DOM.updateNodeAttributes(initiallySelectedOptions[0], {selected:true}); 108 MochiKit.DOM.updateNodeAttributes(initiallySelectedOptions[0], {selected:true});
112 this.handleSelectChange(); 109 this.handleSelectChange();
113 } 110 }
114 } 111 }
115 }, 112 },
116 113
117 //------------------------------------------------------------------------- 114 //-------------------------------------------------------------------------
118 115
119 'setFieldValue': function (aValue) { 116 'setFieldValue': function (aValue) {
120 this.getElement('input').value = aValue; 117 this.getElement('input').value = aValue;
121 }, 118 },
122 119
123 'isHidden': function () { 120 'isHidden': function () {
124 return MochiKit.DOM.hasElementClass(this.getElement('div'), 'locked'); 121 return MochiKit.DOM.hasElementClass(this.getElement('div'), 'locked');
125 }, 122 },
126 123
127 'setIsHidden': function (aValue) { 124 'setIsHidden': function (aValue) {
128 if (aValue == true) { 125 if (aValue == true) {
129 MochiKit.DOM.addElementClass(this.getElement('div'), 'locked'); 126 MochiKit.DOM.addElementClass(this.getElement('div'), 'locked');
130 MochiKit.DOM.addElementClass(this.getElement('div'), 'showLocked'); 127 MochiKit.DOM.addElementClass(this.getElement('div'), 'showLocked');
131 } else { 128 } else {
132 MochiKit.DOM.removeElementClass(this.getElement('div'), 'locked'); 129 MochiKit.DOM.removeElementClass(this.getElement('div'), 'locked');
133 MochiKit.DOM.removeElementClass(this.getElement('div'), 'showLocked'); 130 MochiKit.DOM.removeElementClass(this.getElement('div'), 'showLocked');
134 } 131 }
135 }, 132 },
136 133
137 'isShowLocked': function () { 134 'isShowLocked': function () {
138 return MochiKit.DOM.hasElementClass(this.getElement('div'), 'showLocked'); 135 return MochiKit.DOM.hasElementClass(this.getElement('div'), 'showLocked');
139 }, 136 },
140 137
141 //------------------------------------------------------------------------- 138 //-------------------------------------------------------------------------
142 139
143 'handleSelectChange': function (anEvent) { 140 'handleSelectChange': function (anEvent) {
144 // this.getElement('input').value = this.valueOfField(anEvent.src().value); 141 // this.getElement('input').value = this.valueOfField(anEvent.src().value);
145 MochiKit.Signal.signal(this, 'bindChange', this); 142 MochiKit.Signal.signal(this, 'bindChange', this);
146 }, 143 },
147 144
148 'handleShowHide': function (anEvent) { 145 'handleShowHide': function (anEvent) {
149 anEvent.preventDefault(); 146 anEvent.preventDefault();
150 147
151 if (this.isShowLocked()) { 148 if (this.isShowLocked()) {
152 MochiKit.DOM.removeElementClass(this.getElement('div'), 'showLocked'); 149 MochiKit.DOM.removeElementClass(this.getElement('div'), 'showLocked');
153 } else { 150 } else {
154 MochiKit.DOM.addElementClass(this.getElement('div'), 'showLocked'); 151 MochiKit.DOM.addElementClass(this.getElement('div'), 'showLocked');
155 } 152 }
156 }, 153 },
157 154
158 //========================================================================= 155 //=========================================================================
159 __syntaxFix__: "syntax fix" 156 __syntaxFix__: "syntax fix"
160}); 157});
161 158
162 159
163 160
164 161
165 162
166 163
167 164
168 165
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingComponent.js
index d254c29..5114b1d 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingComponent.js
@@ -1,408 +1,405 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent = function(args) { 28Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent.superclass.constructor.apply(this, arguments);
35 32
36 this._tabPanelController = null; 33 this._tabPanelController = null;
37 34
38 this._initiallySelectedTab = args.selected || 'TYPE'; 35 this._initiallySelectedTab = args.selected || 'TYPE';
39 this._tabPanelControllerConfiguration = { 36 this._tabPanelControllerConfiguration = {
40 'LABEL': { 37 'LABEL': {
41 tab:'labelTab', 38 tab:'labelTab',
42 panel:'labelTabpanel' 39 panel:'labelTabpanel'
43 }, 40 },
44 'TYPE': { 41 'TYPE': {
45 tab:'typeTab', 42 tab:'typeTab',
46 panel:'typeTabpanel' 43 panel:'typeTabpanel'
47 }, 44 },
48 'CONFIGURATION': { 45 'CONFIGURATION': {
49 tab:'configurationTab', 46 tab:'configurationTab',
50 panel:'configurationTabpanel' 47 panel:'configurationTabpanel'
51 }, 48 },
52 'BINDINGS': { 49 'BINDINGS': {
53 tab:'bindingsTab', 50 tab:'bindingsTab',
54 panel:'bindingsTabpanel' 51 panel:'bindingsTabpanel'
55 }, 52 },
56 'FAVICON': { 53 'FAVICON': {
57 tab:'faviconTab', 54 tab:'faviconTab',
58 panel:'faviconTabpanel' 55 panel:'faviconTabpanel'
59 }, 56 },
60 'DONE': { 57 'DONE': {
61 tab:'doneTab', 58 tab:'doneTab',
62 panel:'doneTabpanel' 59 panel:'doneTabpanel'
63 } 60 }
64 }; 61 };
65 62
66 this._directLoginReference = null; 63 this._directLoginReference = null;
67 64
68 this._directLoginFavicon = null; 65 this._directLoginFavicon = null;
69 66
70 this._updateFaviconCounter = 0; 67 this._updateFaviconCounter = 0;
71 this._faviconComponent = null; 68 this._faviconComponent = null;
72 69
73 this._bindingComponents= []; 70 this._bindingComponents= [];
74 this._formValueComponents = []; 71 this._formValueComponents = [];
75 72
76 return this; 73 return this;
77} 74}
78 75
79//============================================================================= 76//=============================================================================
80 77
81//Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 78//Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
82Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent, Clipperz.PM.UI.Common.Components.TabPanelComponent, { 79Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent, Clipperz.PM.UI.Common.Components.TabPanelComponent, {
83 80
84 //------------------------------------------------------------------------- 81 //-------------------------------------------------------------------------
85 82
86 'toString': function () { 83 'toString': function () {
87 return "Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent component"; 84 return "Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent component";
88 }, 85 },
89 86
90 //========================================================================= 87 //=========================================================================
91 88
92 'directLoginReference': function () { 89 'directLoginReference': function () {
93 return this._directLoginReference; 90 return this._directLoginReference;
94 }, 91 },
95 92
96 //------------------------------------------------------------------------- 93 //-------------------------------------------------------------------------
97 94
98 'setDirectLoginReference': function (aDirectLoginReference) { 95 'setDirectLoginReference': function (aDirectLoginReference) {
99 this._directLoginReference = aDirectLoginReference; 96 this._directLoginReference = aDirectLoginReference;
100 97
101 return this._directLoginReference; 98 return this._directLoginReference;
102 }, 99 },
103 100
104 //========================================================================= 101 //=========================================================================
105 102
106 'label': function () { 103 'label': function () {
107 return this.getElement('label').value 104 return this.getElement('label').value
108 }, 105 },
109 106
110 'setLabel': function (aValue) { 107 'setLabel': function (aValue) {
111//console.log("##> LABEL: " + aValue); 108//console.log("##> LABEL: " + aValue);
112 this.getElement('label').value = (aValue ? aValue : ''); 109 this.getElement('label').value = (aValue ? aValue : '');
113 }, 110 },
114 111
115 //------------------------------------------------------------------------- 112 //-------------------------------------------------------------------------
116 113
117 'favicon': function () { 114 'favicon': function () {
118 return this.getElement('faviconURL').value; 115 return this.getElement('faviconURL').value;
119 }, 116 },
120 117
121 'setFavicon': function (aValue) { 118 'setFavicon': function (aValue) {
122 var regexp; 119 var regexp;
123 var displayValue; 120 var displayValue;
124 121
125 regexp = new RegExp('^data\:\/\/.*', 'i'); 122 regexp = new RegExp('^data\:\/\/.*', 'i');
126 if (regexp.test(aValue)) { 123 if (regexp.test(aValue)) {
127 displayValue = '' 124 displayValue = ''
128 } else { 125 } else {
129 displayValue = (aValue ? aValue : ''); 126 displayValue = (aValue ? aValue : '');
130 } 127 }
131 128
132 this.getElement('faviconURL').value = displayValue; 129 this.getElement('faviconURL').value = displayValue;
133 this.faviconComponent().setSrc(aValue); 130 this.faviconComponent().setSrc(aValue);
134 }, 131 },
135 132
136 //'setFaviconData': function (aValue) { 133 //'setFaviconData': function (aValue) {
137 // this.getElement('faviconIcon').src = aValue; 134 // this.getElement('faviconIcon').src = aValue;
138 //}, 135 //},
139 136
140 'directLoginFavicon': function () { 137 'directLoginFavicon': function () {
141 return this._directLoginFavicon; 138 return this._directLoginFavicon;
142 }, 139 },
143 140
144 'setDirectLoginFavicon': function (aValue) { 141 'setDirectLoginFavicon': function (aValue) {
145 this._directLoginFavicon = aValue; 142 this._directLoginFavicon = aValue;
146 this.setFavicon(aValue); 143 this.setFavicon(aValue);
147 }, 144 },
148 145
149 //------------------------------------------------------------------------- 146 //-------------------------------------------------------------------------
150 147
151 'bookmarkletConfiguration': function () { 148 'bookmarkletConfiguration': function () {
152 return this.getElement('bookmarkletConfiguration').value 149 return this.getElement('bookmarkletConfiguration').value
153 }, 150 },
154 151
155 'setBookmarkletConfiguration': function (aValue) { 152 'setBookmarkletConfiguration': function (aValue) {
156 this.getElement('bookmarkletConfiguration').value = aValue; 153 this.getElement('bookmarkletConfiguration').value = aValue;
157 }, 154 },
158 155
159 'highlightConfigurationSyntaxError': function () { 156 'highlightConfigurationSyntaxError': function () {
160 MochiKit.DOM.addElementClass(this.getElement('bookmarkletConfiguration'), 'error'); 157 MochiKit.DOM.addElementClass(this.getElement('bookmarkletConfiguration'), 'error');
161 }, 158 },
162 159
163 'removeHighlightConfigurationSyntaxError': function () { 160 'removeHighlightConfigurationSyntaxError': function () {
164 MochiKit.DOM.removeElementClass(this.getElement('bookmarkletConfiguration'), 'error'); 161 MochiKit.DOM.removeElementClass(this.getElement('bookmarkletConfiguration'), 'error');
165 }, 162 },
166 163
167 //========================================================================= 164 //=========================================================================
168 165
169 'disableAllPanels': function () { 166 'disableAllPanels': function () {
170 this.getElement('label').disabled = true; 167 this.getElement('label').disabled = true;
171 MochiKit.DOM.addElementClass(this.getElement('label').parentNode, 'disabled'); 168 MochiKit.DOM.addElementClass(this.getElement('label').parentNode, 'disabled');
172 169
173 this.tabPanelController().selectTab(null); 170 this.tabPanelController().selectTab(null);
174 }, 171 },
175 172
176 //------------------------------------------------------------------------- 173 //-------------------------------------------------------------------------
177 174
178 //'disableLabelField': function () { 175 //'disableLabelField': function () {
179 // this.getElement('label').disabled = true; 176 // this.getElement('label').disabled = true;
180 // MochiKit.DOM.addElementClass(this.getElement('label').parentNode, 'disabled'); 177 // MochiKit.DOM.addElementClass(this.getElement('label').parentNode, 'disabled');
181 //}, 178 //},
182 179
183 'enableLabelField': function () { 180 'enableLabelField': function () {
184 this.getElement('label').disabled = false; 181 this.getElement('label').disabled = false;
185 MochiKit.DOM.removeElementClass(this.getElement('label').parentNode, 'disabled'); 182 MochiKit.DOM.removeElementClass(this.getElement('label').parentNode, 'disabled');
186 this.tabPanelController().selectTab('LABEL'); 183 this.tabPanelController().selectTab('LABEL');
187 }, 184 },
188 185
189 //------------------------------------------------------------------------- 186 //-------------------------------------------------------------------------
190 187
191 //'disableTypeField': function () { 188 //'disableTypeField': function () {
192 // this.tabPanelController().selectTab(null); 189 // this.tabPanelController().selectTab(null);
193 //}, 190 //},
194 191
195 'enableTypeField': function () { 192 'enableTypeField': function () {
196 this.tabPanelController().selectTab('TYPE'); 193 this.tabPanelController().selectTab('TYPE');
197 }, 194 },
198 195
199 //------------------------------------------------------------------------- 196 //-------------------------------------------------------------------------
200 197
201 //'disableConfigurationField': function () { 198 //'disableConfigurationField': function () {
202 // this.tabPanelController().selectTab(null); 199 // this.tabPanelController().selectTab(null);
203 //}, 200 //},
204 201
205 'enableConfigurationField': function () { 202 'enableConfigurationField': function () {
206 this.tabPanelController().selectTab('CONFIGURATION'); 203 this.tabPanelController().selectTab('CONFIGURATION');
207 }, 204 },
208 205
209 //------------------------------------------------------------------------- 206 //-------------------------------------------------------------------------
210 207
211 //'disableBindingFields': function () { 208 //'disableBindingFields': function () {
212 // this.tabPanelController().selectTab(null); 209 // this.tabPanelController().selectTab(null);
213 //}, 210 //},
214 211
215 'enableBindingFields': function () { 212 'enableBindingFields': function () {
216 this.tabPanelController().selectTab('BINDINGS'); 213 this.tabPanelController().selectTab('BINDINGS');
217 }, 214 },
218 215
219 //------------------------------------------------------------------------- 216 //-------------------------------------------------------------------------
220 217
221 //'disableFaviconField': function () { 218 //'disableFaviconField': function () {
222 // this.tabPanelController().selectTab(null); 219 // this.tabPanelController().selectTab(null);
223 //}, 220 //},
224 221
225 'enableFaviconField': function () { 222 'enableFaviconField': function () {
226 this.tabPanelController().selectTab('FAVICON'); 223 this.tabPanelController().selectTab('FAVICON');
227 }, 224 },
228 225
229 //------------------------------------------------------------------------- 226 //-------------------------------------------------------------------------
230 227
231 'enableDonePanel': function () { 228 'enableDonePanel': function () {
232 this.tabPanelController().selectTab('DONE'); 229 this.tabPanelController().selectTab('DONE');
233 }, 230 },
234 231
235 //========================================================================= 232 //=========================================================================
236 233
237 'shouldShowElementWhileRendering': function() { 234 'shouldShowElementWhileRendering': function() {
238 return false; 235 return false;
239 }, 236 },
240 237
241 //========================================================================= 238 //=========================================================================
242 239
243 'faviconComponent': function () { 240 'faviconComponent': function () {
244 if (this._faviconComponent == null) { 241 if (this._faviconComponent == null) {
245 this._faviconComponent = new Clipperz.PM.UI.Common.Components.FaviconComponent({element:this.getId('favicon')}); 242 this._faviconComponent = new Clipperz.PM.UI.Common.Components.FaviconComponent({element:this.getId('favicon')});
246 } 243 }
247 244
248 return this._faviconComponent; 245 return this._faviconComponent;
249 }, 246 },
250 247
251 //========================================================================= 248 //=========================================================================
252 249
253 'tabPanelController': function () { 250 'tabPanelController': function () {
254 if (this._tabPanelController == null) { 251 if (this._tabPanelController == null) {
255 this._tabPanelController = new Clipperz.PM.UI.Common.Controllers.TabPanelController({ 252 this._tabPanelController = new Clipperz.PM.UI.Common.Controllers.TabPanelController({
256 component:this, 253 component:this,
257 configuration:this._tabPanelControllerConfiguration 254 configuration:this._tabPanelControllerConfiguration
258 }); 255 });
259 256
260 MochiKit.Signal.connect(this._tabPanelController, 'tabSelected', this, 'handleTabSelected') 257 MochiKit.Signal.connect(this._tabPanelController, 'tabSelected', this, 'handleTabSelected')
261 } 258 }
262 259
263 return this._tabPanelController; 260 return this._tabPanelController;
264 }, 261 },
265 262
266 //------------------------------------------------------------------------- 263 //-------------------------------------------------------------------------
267 264
268 'renderSelf': function() { 265 'renderSelf': function() {
269 varbookmarkletComponent; 266 varbookmarkletComponent;
270 267
271 this.append(this.element(), {tag:'div', cls:'directLoginEditing', id:this.getId('panel'), children: [ 268 this.append(this.element(), {tag:'div', cls:'directLoginEditing', id:this.getId('panel'), children: [
272 // {tag:'div', cls:'back', children:[ 269 // {tag:'div', cls:'back', children:[
273 // {tag:'a', href:'#', id:this.getId('back'), html:"&nbsp;"} 270 // {tag:'a', href:'#', id:this.getId('back'), html:"&nbsp;"}
274 // ]}, 271 // ]},
275 {tag:'form', id:this.getId('form'), cls:'directLoginEditingForm', children:[ 272 {tag:'form', id:this.getId('form'), cls:'directLoginEditingForm', children:[
276 {tag:'div', cls:'title', children:[ 273 {tag:'div', cls:'title', children:[
277 {tag:'img', id:this.getId('favicon'), cls:'favicon'}, 274 {tag:'img', id:this.getId('favicon'), cls:'favicon'},
278 {tag:'input', type:'text', id:this.getId('label')}//, 275 {tag:'input', type:'text', id:this.getId('label')}//,
279 // {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.LABEL.description')}]}, 276 // {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.LABEL.description')}]},
280 ]}, 277 ]},
281 {tag:'div', cls:'tabContainer', children:[ 278 {tag:'div', cls:'tabContainer', children:[
282 {tag:'ul', cls:'tabs', children:[ 279 {tag:'ul', cls:'tabs', children:[
283 {tag:'li', id:this.getId('labelTab'), children:[{tag:'span', html:"label"}]}, 280 {tag:'li', id:this.getId('labelTab'), children:[{tag:'span', html:"label"}]},
284 {tag:'li', id:this.getId('typeTab'), children:[{tag:'span', html:"type"}]}, 281 {tag:'li', id:this.getId('typeTab'), children:[{tag:'span', html:"type"}]},
285 {tag:'li', id:this.getId('configurationTab'),children:[{tag:'span', html:"configuration"}]}, 282 {tag:'li', id:this.getId('configurationTab'),children:[{tag:'span', html:"configuration"}]},
286 {tag:'li', id:this.getId('bindingsTab'), children:[{tag:'span', html:"bindings"}]}, 283 {tag:'li', id:this.getId('bindingsTab'), children:[{tag:'span', html:"bindings"}]},
287 {tag:'li', id:this.getId('faviconTab'), children:[{tag:'span', html:"favicon"}]}, 284 {tag:'li', id:this.getId('faviconTab'), children:[{tag:'span', html:"favicon"}]},
288 {tag:'li', id:this.getId('doneTab'), children:[{tag:'span', html:"done"}]} 285 {tag:'li', id:this.getId('doneTab'), children:[{tag:'span', html:"done"}]}
289 ]}, 286 ]},
290 {tag:'ul', cls:'tabPanels', children:[ 287 {tag:'ul', cls:'tabPanels', children:[
291 {tag:'li', id:this.getId('labelTabpanel'), cls:'tabPanel label', children:[ 288 {tag:'li', id:this.getId('labelTabpanel'), cls:'tabPanel label', children:[
292 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.LABEL.description')}]} 289 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.LABEL.description')}]}
293 ]}, 290 ]},
294 {tag:'li', id:this.getId('typeTabpanel'), cls:'tabPanel type', children:[ 291 {tag:'li', id:this.getId('typeTabpanel'), cls:'tabPanel type', children:[
295 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.TYPE.description')}]}, 292 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.TYPE.description')}]},
296 {tag:'h2', html:"type"} 293 {tag:'h2', html:"type"}
297 ]}, 294 ]},
298 {tag:'li', id:this.getId('configurationTabpanel'), cls:'tabPanel configuration', children:[ 295 {tag:'li', id:this.getId('configurationTabpanel'), cls:'tabPanel configuration', children:[
299 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.CONFIGURATION.description')}]}, 296 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.CONFIGURATION.description')}]},
300 {tag:'div', cls:'bookmarkletConfigurationWrapper', children:[ 297 {tag:'div', cls:'bookmarkletConfigurationWrapper', children:[
301 {tag:'textarea', id:this.getId('bookmarkletConfiguration'), value:""}, 298 {tag:'textarea', id:this.getId('bookmarkletConfiguration'), value:""},
302 // {tag:'div', cls:'bookmarkletComponentWrapper', children:[{tag:'div', id:this.getId('bookmarkletComponent'), cls:'bookmarkletComponent'}]} 299 // {tag:'div', cls:'bookmarkletComponentWrapper', children:[{tag:'div', id:this.getId('bookmarkletComponent'), cls:'bookmarkletComponent'}]}
303 {tag:'div', id:this.getId('bookmarkletComponent'), cls:'bookmarkletComponent'} 300 {tag:'div', id:this.getId('bookmarkletComponent'), cls:'bookmarkletComponent'}
304 ]} 301 ]}
305 ]}, 302 ]},
306 {tag:'li', id:this.getId('bindingsTabpanel'), cls:'tabPanel bindings', children:[ 303 {tag:'li', id:this.getId('bindingsTabpanel'), cls:'tabPanel bindings', children:[
307 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.BINDINGS.description')}]}, 304 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.BINDINGS.description')}]},
308 {tag:'div', cls:'bindings', id:this.getId('bindings'), children:[]}, 305 {tag:'div', cls:'bindings', id:this.getId('bindings'), children:[]},
309 {tag:'div', cls:'formValues', id:this.getId('formValues'), children:[]} 306 {tag:'div', cls:'formValues', id:this.getId('formValues'), children:[]}
310 ]}, 307 ]},
311 {tag:'li', id:this.getId('faviconTabpanel'), cls:'tabPanel favicon', children:[ 308 {tag:'li', id:this.getId('faviconTabpanel'), cls:'tabPanel favicon', children:[
312 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.FAVICON.description')}]}, 309 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.FAVICON.description')}]},
313 {tag:'div', cls:'favicon', children:[ 310 {tag:'div', cls:'favicon', children:[
314 {tag:'input', type:'text', id:this.getId('faviconURL')} 311 {tag:'input', type:'text', id:this.getId('faviconURL')}
315 ]} 312 ]}
316 ]}, 313 ]},
317 {tag:'li', id:this.getId('doneTabpanel'), cls:'tabPanel done', children:[ 314 {tag:'li', id:this.getId('doneTabpanel'), cls:'tabPanel done', children:[
318 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', id:this.getId('doneDescription')/*, html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.DONE.description')*/}]} 315 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', id:this.getId('doneDescription')/*, html:Clipperz.PM.Strings.getValue('Wizards.DirectLoginWizard.DONE.description')*/}]}
319 ]} 316 ]}
320 ]} 317 ]}
321 ]} 318 ]}
322 ]}, 319 ]},
323 {tag:'div', cls:'clear'} 320 {tag:'div', cls:'clear'}
324 ]}); 321 ]});
325 322
326 bookmarkletComponent = new Clipperz.PM.UI.Web.Components.BookmarkletComponent({element:this.getElement('bookmarkletComponent')}); 323 bookmarkletComponent = new Clipperz.PM.UI.Web.Components.BookmarkletComponent({element:this.getElement('bookmarkletComponent')});
327 bookmarkletComponent.render(); 324 bookmarkletComponent.render();
328 325
329 this.tabPanelController().setup(/*{selected:this.initiallySelectedTab()}*/); 326 this.tabPanelController().setup(/*{selected:this.initiallySelectedTab()}*/);
330 327
331 MochiKit.Signal.connect(this.getId('label'), 'onchange', this, 'changedValue'); 328 MochiKit.Signal.connect(this.getId('label'), 'onchange', this, 'changedValue');
332 MochiKit.Signal.connect(this.getId('label'), 'onkeyup', this, 'changedValue'); 329 MochiKit.Signal.connect(this.getId('label'), 'onkeyup', this, 'changedValue');
333 330
334 MochiKit.Signal.connect(this.getId('bookmarkletConfiguration'),'onchange', this, 'changedValue'); 331 MochiKit.Signal.connect(this.getId('bookmarkletConfiguration'),'onchange', this, 'changedValue');
335 MochiKit.Signal.connect(this.getId('bookmarkletConfiguration'),'onkeyup', this, 'changedValue'); 332 MochiKit.Signal.connect(this.getId('bookmarkletConfiguration'),'onkeyup', this, 'changedValue');
336 333
337 MochiKit.Signal.connect(this.getId('faviconURL'), 'onchange', this, 'changedValue'); 334 MochiKit.Signal.connect(this.getId('faviconURL'), 'onchange', this, 'changedValue');
338 MochiKit.Signal.connect(this.getId('faviconURL'), 'onkeyup', this, 'changedValue'); 335 MochiKit.Signal.connect(this.getId('faviconURL'), 'onkeyup', this, 'changedValue');
339 336
340 MochiKit.Signal.connect(this.getId('panel'), 'onkeydown',this, 'handleKeyEvent'); 337 MochiKit.Signal.connect(this.getId('panel'), 'onkeydown',this, 'handleKeyEvent');
341 }, 338 },
342 339
343 //------------------------------------------------------------------------- 340 //-------------------------------------------------------------------------
344 341
345 'handleTabSelected': function (aSelectedTab) { 342 'handleTabSelected': function (aSelectedTab) {
346 switch (aSelectedTab) { 343 switch (aSelectedTab) {
347 case 'DETAILS': 344 case 'DETAILS':
348 break; 345 break;
349 case 'DIRECT_LOGINS': 346 case 'DIRECT_LOGINS':
350 MochiKit.Style.hideElement(this.getElement('backToDirectLoginList')); 347 MochiKit.Style.hideElement(this.getElement('backToDirectLoginList'));
351 break; 348 break;
352 case 'SHARING': 349 case 'SHARING':
353 break; 350 break;
354 } 351 }
355 }, 352 },
356 353
357 //========================================================================= 354 //=========================================================================
358 355
359 'incrementUpdateFaviconCounter': function () { 356 'incrementUpdateFaviconCounter': function () {
360 this._updateFaviconCounter ++; 357 this._updateFaviconCounter ++;
361 }, 358 },
362 359
363 'decrementUpdateFaviconCounter': function () { 360 'decrementUpdateFaviconCounter': function () {
364 this._updateFaviconCounter --; 361 this._updateFaviconCounter --;
365 }, 362 },
366 363
367 'updateFaviconCounter': function () { 364 'updateFaviconCounter': function () {
368 return this._updateFaviconCounter; 365 return this._updateFaviconCounter;
369 }, 366 },
370 367
371 //------------------------------------------------------------------------- 368 //-------------------------------------------------------------------------
372 369
373 'updateFavicon': function () { 370 'updateFavicon': function () {
374 this.decrementUpdateFaviconCounter(); 371 this.decrementUpdateFaviconCounter();
375 372
376 if (this.updateFaviconCounter() == 0) { 373 if (this.updateFaviconCounter() == 0) {
377 this.setFavicon(this.favicon()); 374 this.setFavicon(this.favicon());
378 } 375 }
379 }, 376 },
380 377
381 //========================================================================= 378 //=========================================================================
382 379
383 'bindingComponents': function () { 380 'bindingComponents': function () {
384 return this._bindingComponents; 381 return this._bindingComponents;
385 }, 382 },
386 383
387 'clearAllBindingsComponents': function () { 384 'clearAllBindingsComponents': function () {
388 MochiKit.Iter.forEach(this.bindingComponents(), MochiKit.Base.methodcaller('remove')); 385 MochiKit.Iter.forEach(this.bindingComponents(), MochiKit.Base.methodcaller('remove'));
389 this._bindingComponents = []; 386 this._bindingComponents = [];
390 this.getElement('bindings').innerHTML = ''; 387 this.getElement('bindings').innerHTML = '';
391 }, 388 },
392 389
393 'addBindingComponent': function (aBindingComponent) { 390 'addBindingComponent': function (aBindingComponent) {
394 this.bindingComponents().push(aBindingComponent); 391 this.bindingComponents().push(aBindingComponent);
395 aBindingComponent.renderInNode(this.append(this.getElement('bindings'), {tag:'div'})); 392 aBindingComponent.renderInNode(this.append(this.getElement('bindings'), {tag:'div'}));
396 }, 393 },
397 394
398 //========================================================================= 395 //=========================================================================
399 396
400 'formValueComponents': function () { 397 'formValueComponents': function () {
401 return this._formValueComponents; 398 return this._formValueComponents;
402 }, 399 },
403 400
404 'clearAllFormValueComponents': function () { 401 'clearAllFormValueComponents': function () {
405 MochiKit.Iter.forEach(this.formValueComponents(), MochiKit.Base.methodcaller('remove')); 402 MochiKit.Iter.forEach(this.formValueComponents(), MochiKit.Base.methodcaller('remove'));
406 this._formValueComponents = []; 403 this._formValueComponents = [];
407 this.getElement('formValues').innerHTML = ''; 404 this.getElement('formValues').innerHTML = '';
408 }, 405 },
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingFormValueComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingFormValueComponent.js
index b91eb98..fa57233 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingFormValueComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginEditingFormValueComponent.js
@@ -1,179 +1,176 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.DirectLoginEditingFormValueComponent = function(args) { 28Clipperz.PM.UI.Web.Components.DirectLoginEditingFormValueComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.DirectLoginEditingFormValueComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.DirectLoginEditingFormValueComponent.superclass.constructor.apply(this, arguments);
35 32
36 this._formFieldName = args.formFieldName|| Clipperz.Base.exception.raise('MandatoryParameter'); 33 this._formFieldName = args.formFieldName|| Clipperz.Base.exception.raise('MandatoryParameter');
37 this._fieldOptions = args.fieldOptions || Clipperz.Base.exception.raise('MandatoryParameter'); 34 this._fieldOptions = args.fieldOptions || Clipperz.Base.exception.raise('MandatoryParameter');
38 this._initialValue = args.initialValue || null; 35 this._initialValue = args.initialValue || null;
39 36
40 return this; 37 return this;
41} 38}
42 39
43//============================================================================= 40//=============================================================================
44 41
45Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginEditingFormValueComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginEditingFormValueComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
46 43
47 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
48 45
49 'toString': function () { 46 'toString': function () {
50 return "Clipperz.PM.UI.Web.Components.DirectLoginEditingFormValueComponent component"; 47 return "Clipperz.PM.UI.Web.Components.DirectLoginEditingFormValueComponent component";
51 }, 48 },
52 49
53 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
54 51
55 'formFieldName': function () { 52 'formFieldName': function () {
56 return this._formFieldName; 53 return this._formFieldName;
57 }, 54 },
58 55
59 //------------------------------------------------------------------------- 56 //-------------------------------------------------------------------------
60 57
61 'fieldOptions': function () { 58 'fieldOptions': function () {
62 return this._fieldOptions; 59 return this._fieldOptions;
63 }, 60 },
64 61
65 'fieldType': function () { 62 'fieldType': function () {
66 return this.fieldOptions()['type']; 63 return this.fieldOptions()['type'];
67 }, 64 },
68 65
69 'optionValues': function () { 66 'optionValues': function () {
70 return MochiKit.Base.map(function (anOptionValue) { 67 return MochiKit.Base.map(function (anOptionValue) {
71 return { 68 return {
72 'label': anOptionValue['label'] || anOptionValue['value'], 69 'label': anOptionValue['label'] || anOptionValue['value'],
73 'value': anOptionValue['value'] 70 'value': anOptionValue['value']
74 } 71 }
75 }, this.fieldOptions()['options']); 72 }, this.fieldOptions()['options']);
76 }, 73 },
77 74
78 //------------------------------------------------------------------------- 75 //-------------------------------------------------------------------------
79 76
80 'selectedValue': function () { 77 'selectedValue': function () {
81 var result; 78 var result;
82 79
83 result = this.getElement('select').value; 80 result = this.getElement('select').value;
84 81
85 if (result == '---') { 82 if (result == '---') {
86 result = null; 83 result = null;
87 } 84 }
88 85
89 return result; 86 return result;
90 }, 87 },
91 88
92 'initialValue': function () { 89 'initialValue': function () {
93 return this._initialValue; 90 return this._initialValue;
94 }, 91 },
95 92
96 //========================================================================= 93 //=========================================================================
97 94
98 'renderSelf': function() { 95 'renderSelf': function() {
99//console.log(">>> DirectLoginEditingFormValueComponent.renderSelf"); 96//console.log(">>> DirectLoginEditingFormValueComponent.renderSelf");
100//console.log("FIELD OPTIONS", this.fieldOptions()); 97//console.log("FIELD OPTIONS", this.fieldOptions());
101//console.log("OPTION VALUES", this.optionValues()); 98//console.log("OPTION VALUES", this.optionValues());
102 this.append(this.element(), {tag:'div', id:this.getId('div'), cls:'formValue', children:[ 99 this.append(this.element(), {tag:'div', id:this.getId('div'), cls:'formValue', children:[
103 {tag:'span', cls:'formFieldName', html:this.formFieldName()}, 100 {tag:'span', cls:'formFieldName', html:this.formFieldName()},
104 {tag:'div', id:this.getId('values')} 101 {tag:'div', id:this.getId('values')}
105 ]}); 102 ]});
106 103
107 if ((this.fieldType() == 'radio') || (this.fieldType() == 'select')) { 104 if ((this.fieldType() == 'radio') || (this.fieldType() == 'select')) {
108 this.append(this.getElement('values'), 105 this.append(this.getElement('values'),
109 {tag:'select', name:this.formFieldName(), id:this.getId('select'), cls:'formFieldMatchinCardField', children: 106 {tag:'select', name:this.formFieldName(), id:this.getId('select'), cls:'formFieldMatchinCardField', children:
110 MochiKit.Base.flattenArguments( 107 MochiKit.Base.flattenArguments(
111 // {tag:'option', value:'---', html:"---"}, 108 // {tag:'option', value:'---', html:"---"},
112 MochiKit.Base.map( 109 MochiKit.Base.map(
113 MochiKit.Base.bind(function (aValue) { return {tag:'option', value:aValue['value'], html:aValue['label']}; }, this), 110 MochiKit.Base.bind(function (aValue) { return {tag:'option', value:aValue['value'], html:aValue['label']}; }, this),
114 this.optionValues() 111 this.optionValues()
115 ) 112 )
116 ) 113 )
117 } 114 }
118 ); 115 );
119 116
120 MochiKit.Signal.connect(this.getElement('select'), 'onchange', this, 'handleSelectChange'); 117 MochiKit.Signal.connect(this.getElement('select'), 'onchange', this, 'handleSelectChange');
121 118
122 if (! MochiKit.Base.isUndefinedOrNull(this.initialValue())) { 119 if (! MochiKit.Base.isUndefinedOrNull(this.initialValue())) {
123 var initiallySelectedOptions; 120 var initiallySelectedOptions;
124 initiallySelectedOptions = MochiKit.Selector.findChildElements(this.element(), ['option[value=' + this.initialValue() + ']']); 121 initiallySelectedOptions = MochiKit.Selector.findChildElements(this.element(), ['option[value=' + this.initialValue() + ']']);
125 if (initiallySelectedOptions.length == 1) { 122 if (initiallySelectedOptions.length == 1) {
126 MochiKit.DOM.updateNodeAttributes(initiallySelectedOptions[0], {selected:true}); 123 MochiKit.DOM.updateNodeAttributes(initiallySelectedOptions[0], {selected:true});
127 this.handleSelectChange(); 124 this.handleSelectChange();
128 } else { 125 } else {
129 Clipperz.DOM.Helper.insertBefore(this.getElement('select').childNodes[0], {tag:'option', value:'---', html:"", selected:true}); 126 Clipperz.DOM.Helper.insertBefore(this.getElement('select').childNodes[0], {tag:'option', value:'---', html:"", selected:true});
130 } 127 }
131 } else { 128 } else {
132 Clipperz.DOM.Helper.insertBefore(this.getElement('select').childNodes[0], {tag:'option', value:'---', html:"", selected:true}); 129 Clipperz.DOM.Helper.insertBefore(this.getElement('select').childNodes[0], {tag:'option', value:'---', html:"", selected:true});
133 } 130 }
134 } else if (this.fieldType() == 'checkbox') { 131 } else if (this.fieldType() == 'checkbox') {
135 this.append(this.getElement('values'), 132 this.append(this.getElement('values'),
136 {tag:'input', type:'checkbox', name:this.formFieldName(), id:this.getId('checkbox'), cls:'formFieldMatchinCardField'} 133 {tag:'input', type:'checkbox', name:this.formFieldName(), id:this.getId('checkbox'), cls:'formFieldMatchinCardField'}
137 ); 134 );
138 135
139 MochiKit.Signal.connect(this.getElement('checkbox'), 'onchange', this, 'handleSelectChange'); 136 MochiKit.Signal.connect(this.getElement('checkbox'), 'onchange', this, 'handleSelectChange');
140 137
141 if (this.initialValue()) { 138 if (this.initialValue()) {
142 MochiKit.DOM.updateNodeAttributes(this.getElement('checkbox'), {checked:true}); 139 MochiKit.DOM.updateNodeAttributes(this.getElement('checkbox'), {checked:true});
143 } 140 }
144 } else { 141 } else {
145 WTF = TODO; 142 WTF = TODO;
146 } 143 }
147//console.log("<<< DirectLoginEditingFormValueComponent.renderSelf"); 144//console.log("<<< DirectLoginEditingFormValueComponent.renderSelf");
148 }, 145 },
149 146
150 //========================================================================= 147 //=========================================================================
151 148
152 'handleSelectChange': function (anEvent) { 149 'handleSelectChange': function (anEvent) {
153//console.log("handleSelectChange", anEvent, anEvent.src(), anEvent.src().value); 150//console.log("handleSelectChange", anEvent, anEvent.src(), anEvent.src().value);
154 var options; 151 var options;
155 152
156 options = {}; 153 options = {};
157 154
158 options['fieldName'] = this.formFieldName(); 155 options['fieldName'] = this.formFieldName();
159 156
160 if (this.fieldType() == 'checkbox') { 157 if (this.fieldType() == 'checkbox') {
161 options['selectedValue'] = (this.getElement('checkbox').checked ? 1 : null); 158 options['selectedValue'] = (this.getElement('checkbox').checked ? 1 : null);
162 } else { 159 } else {
163 options['selectedValue'] = this.selectedValue(); 160 options['selectedValue'] = this.selectedValue();
164 } 161 }
165 162
166 MochiKit.Signal.signal(this, 'formValueChange', options); 163 MochiKit.Signal.signal(this, 'formValueChange', options);
167 }, 164 },
168 165
169 //========================================================================= 166 //=========================================================================
170 __syntaxFix__: "syntax fix" 167 __syntaxFix__: "syntax fix"
171}); 168});
172 169
173 170
174 171
175 172
176 173
177 174
178 175
179 176
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginsColumnManager.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginsColumnManager.js
index 1f49575..d8dc941 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginsColumnManager.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DirectLoginsColumnManager.js
@@ -1,271 +1,268 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31//############################################################################# 28//#############################################################################
32 29
33Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager = function(args) { 30Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager = function(args) {
34 args = args || {}; 31 args = args || {};
35 Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager.superclass.constructor.call(this, args); 32 Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager.superclass.constructor.call(this, args);
36 33
37 this._enterLeaveCounter = 0; 34 this._enterLeaveCounter = 0;
38 this._selectedRowObject = null; 35 this._selectedRowObject = null;
39 36
40 return this; 37 return this;
41} 38}
42 39
43//============================================================================= 40//=============================================================================
44 41
45Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, { 42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, {
46 43
47 'toString': function () { 44 'toString': function () {
48 return "Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager component"; 45 return "Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager component";
49 }, 46 },
50 47
51 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
52 49
53 'renderHeader': function(aTRElement) { 50 'renderHeader': function(aTRElement) {
54 Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager.superclass.renderHeader.call(this, aTRElement); 51 Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager.superclass.renderHeader.call(this, aTRElement);
55 52
56 Clipperz.DOM.Helper.append(MochiKit.DOM.currentDocument().body, {tag:'div', cls:'DirectLoginListPopup', id:this.getId('DirectLoginListPopup'), children:[ 53 Clipperz.DOM.Helper.append(MochiKit.DOM.currentDocument().body, {tag:'div', cls:'DirectLoginListPopup', id:this.getId('DirectLoginListPopup'), children:[
57 {tag:'div', cls:'DirectLoginListPopup_body', children:[ 54 {tag:'div', cls:'DirectLoginListPopup_body', children:[
58 {tag:'ul', id:this.getId('DirectLoginListPopup_list'), children:[ 55 {tag:'ul', id:this.getId('DirectLoginListPopup_list'), children:[
59 // {tag:'li', children:[ 56 // {tag:'li', children:[
60 // {tag:'img', cls:'favicon', src:'http://www.microsoft.com/favicon.ico'}, 57 // {tag:'img', cls:'favicon', src:'http://www.microsoft.com/favicon.ico'},
61 // {tag:'a', href:'#', html:"Google Mail"} 58 // {tag:'a', href:'#', html:"Google Mail"}
62 // ]}, 59 // ]},
63 // ... 60 // ...
64 ]} 61 ]}
65 ]}, 62 ]},
66 {tag:'div', cls:'DirectLoginListPopup_footer'} 63 {tag:'div', cls:'DirectLoginListPopup_footer'}
67 ]}); 64 ]});
68 65
69 MochiKit.Style.hideElement(this.getId('DirectLoginListPopup')); 66 MochiKit.Style.hideElement(this.getId('DirectLoginListPopup'));
70 67
71 //BEWARE: use MochiKit.Signal.connect instead of this.connectEvent, as the HEADER is NOT redrawn after each refresh 68 //BEWARE: use MochiKit.Signal.connect instead of this.connectEvent, as the HEADER is NOT redrawn after each refresh
72 MochiKit.Signal.connect(this.getId('DirectLoginListPopup'), 'onmouseenter', this, 'handleDirectLoginListPopupEnter'); 69 MochiKit.Signal.connect(this.getId('DirectLoginListPopup'), 'onmouseenter', this, 'handleDirectLoginListPopupEnter');
73 MochiKit.Signal.connect(this.getId('DirectLoginListPopup'), 'onmouseleave', this, 'handleDirectLoginListPopupLeave'); 70 MochiKit.Signal.connect(this.getId('DirectLoginListPopup'), 'onmouseleave', this, 'handleDirectLoginListPopupLeave');
74 }, 71 },
75 72
76 //------------------------------------------------------------------------- 73 //-------------------------------------------------------------------------
77 74
78 'renderCell': function(aRowElement, anObject) { 75 'renderCell': function(aRowElement, anObject) {
79 var i,c; 76 var i,c;
80 var directLoginsInfo; 77 var directLoginsInfo;
81 78
82 directLoginsInfo = anObject[this.name()]; 79 directLoginsInfo = anObject[this.name()];
83 80
84 TDElement = Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:'card_directLogins'}); 81 TDElement = Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:'card_directLogins'});
85 82
86 c = Math.min(2, directLoginsInfo.length); 83 c = Math.min(2, directLoginsInfo.length);
87 for (i=0; i<c; i++) { 84 for (i=0; i<c; i++) {
88 var elementID; 85 var elementID;
89 86
90 elementID = 'directLogin_' + directLoginsInfo[i]['_reference']; 87 elementID = 'directLogin_' + directLoginsInfo[i]['_reference'];
91 88
92 Clipperz.DOM.Helper.append(TDElement, {tag:'div', cls:'card_directLogin', children:[ 89 Clipperz.DOM.Helper.append(TDElement, {tag:'div', cls:'card_directLogin', children:[
93 {tag:'div', cls:'card_directLogin_body', children:[ 90 {tag:'div', cls:'card_directLogin_body', children:[
94 {tag:'a', href:'#', id:elementID, html:directLoginsInfo[i]['label']} 91 {tag:'a', href:'#', id:elementID, html:directLoginsInfo[i]['label']}
95 ]} 92 ]}
96 ]}); 93 ]});
97 // MochiKit.Signal.connect(elementID, 'onclick', MochiKit.Base.method(this, 'handleDirectLoginClick', directLoginsInfo[i]['_rowObject'])); 94 // MochiKit.Signal.connect(elementID, 'onclick', MochiKit.Base.method(this, 'handleDirectLoginClick', directLoginsInfo[i]['_rowObject']));
98 this.connectEvent(elementID, 'onclick', MochiKit.Base.method(this, 'handleDirectLoginClick', directLoginsInfo[i]['_rowObject'])); 95 this.connectEvent(elementID, 'onclick', MochiKit.Base.method(this, 'handleDirectLoginClick', directLoginsInfo[i]['_rowObject']));
99 } 96 }
100 97
101 if (directLoginsInfo.length > 2) { 98 if (directLoginsInfo.length > 2) {
102 var ellipsesElement; 99 var ellipsesElement;
103 100
104 ellipsesElement = Clipperz.DOM.Helper.append(TDElement, {tag:'div', cls:'card_directLogin_ellipses', children:[ 101 ellipsesElement = Clipperz.DOM.Helper.append(TDElement, {tag:'div', cls:'card_directLogin_ellipses', children:[
105 {tag:'div', cls:'card_directLogin_ellipses_body', children:[ 102 {tag:'div', cls:'card_directLogin_ellipses_body', children:[
106 {tag:'span', html:'&hellip;'} 103 {tag:'span', html:'&hellip;'}
107 ]} 104 ]}
108 ]}); 105 ]});
109 106
110 /// MochiKit.Signal.connect(ellipsesElement, 'onmouseenter', MochiKit.Base.method(this, 'handleEllipsesEnter', anObject)); 107 /// MochiKit.Signal.connect(ellipsesElement, 'onmouseenter', MochiKit.Base.method(this, 'handleEllipsesEnter', anObject));
111 /// MochiKit.Signal.connect(ellipsesElement, 'onmouseleave', MochiKit.Base.method(this, 'handleEllipsesLeave')); 108 /// MochiKit.Signal.connect(ellipsesElement, 'onmouseleave', MochiKit.Base.method(this, 'handleEllipsesLeave'));
112 // MochiKit.Signal.connect(TDElement, 'onmouseleave', MochiKit.Base.method(this, 'handleTDLeave')); 109 // MochiKit.Signal.connect(TDElement, 'onmouseleave', MochiKit.Base.method(this, 'handleTDLeave'));
113 this.connectEvent(TDElement, 'onmouseleave', MochiKit.Base.method(this, 'handleTDLeave')); 110 this.connectEvent(TDElement, 'onmouseleave', MochiKit.Base.method(this, 'handleTDLeave'));
114 } 111 }
115 // MochiKit.Signal.connect(TDElement, 'onmouseenter', MochiKit.Base.method(this, 'handleTDEnter', anObject)); 112 // MochiKit.Signal.connect(TDElement, 'onmouseenter', MochiKit.Base.method(this, 'handleTDEnter', anObject));
116 this.connectEvent(TDElement, 'onmouseenter', MochiKit.Base.method(this, 'handleTDEnter', anObject)); 113 this.connectEvent(TDElement, 'onmouseenter', MochiKit.Base.method(this, 'handleTDEnter', anObject));
117 114
118 }, 115 },
119 116
120 //========================================================================= 117 //=========================================================================
121/* 118/*
122 'handleEllipsesEnter': function (aRecordInfo, anEvent) { 119 'handleEllipsesEnter': function (aRecordInfo, anEvent) {
123 this._enterLeaveCounter ++; 120 this._enterLeaveCounter ++;
124 if (this._enterLeaveCounter > 2) { 121 if (this._enterLeaveCounter > 2) {
125 this._enterLeaveCounter = 2; 122 this._enterLeaveCounter = 2;
126 } 123 }
127 124
128 if (this._enterLeaveCounter == 1) { 125 if (this._enterLeaveCounter == 1) {
129 this.showDirectLoginListPopup(aRecordInfo, anEvent.src()); 126 this.showDirectLoginListPopup(aRecordInfo, anEvent.src());
130 } 127 }
131 }, 128 },
132 129
133 'handleEllipsesLeave': function (anEvent) { 130 'handleEllipsesLeave': function (anEvent) {
134 this._enterLeaveCounter --; 131 this._enterLeaveCounter --;
135 132
136 MochiKit.Async.callLater(0.3, MochiKit.Base.bind(function () { 133 MochiKit.Async.callLater(0.3, MochiKit.Base.bind(function () {
137 if (this._enterLeaveCounter == 0) { 134 if (this._enterLeaveCounter == 0) {
138 this.hideDirectLoginListPopup(); 135 this.hideDirectLoginListPopup();
139 } 136 }
140 }, this)) 137 }, this))
141 }, 138 },
142*/ 139*/
143 //------------------------------------------------------------------------- 140 //-------------------------------------------------------------------------
144 141
145 'handleTDEnter': function (aRecordInfo, anEvent) { 142 'handleTDEnter': function (aRecordInfo, anEvent) {
146 if (MochiKit.Selector.findChildElements(anEvent.src(), ['div.card_directLogin_ellipses']).length > 0) { 143 if (MochiKit.Selector.findChildElements(anEvent.src(), ['div.card_directLogin_ellipses']).length > 0) {
147 this._enterLeaveCounter ++; 144 this._enterLeaveCounter ++;
148 if (this._enterLeaveCounter > 2) { 145 if (this._enterLeaveCounter > 2) {
149 this._enterLeaveCounter = 2; 146 this._enterLeaveCounter = 2;
150 } 147 }
151 148
152 if (this._enterLeaveCounter == 1) { 149 if (this._enterLeaveCounter == 1) {
153 this.showDirectLoginListPopup(aRecordInfo, anEvent.src()); 150 this.showDirectLoginListPopup(aRecordInfo, anEvent.src());
154 } 151 }
155 } else { 152 } else {
156 if (this._selectedRowObject != null) { 153 if (this._selectedRowObject != null) {
157 this.hideDirectLoginListPopup(); 154 this.hideDirectLoginListPopup();
158 } 155 }
159 } 156 }
160 }, 157 },
161 158
162 'handleTDLeave': function (anEvent) { 159 'handleTDLeave': function (anEvent) {
163 this._enterLeaveCounter --; 160 this._enterLeaveCounter --;
164 if (this._enterLeaveCounter < 0) { 161 if (this._enterLeaveCounter < 0) {
165 this._enterLeaveCounter = 0; 162 this._enterLeaveCounter = 0;
166 } 163 }
167 164
168 MochiKit.Async.callLater(0.3, MochiKit.Base.bind(function () { 165 MochiKit.Async.callLater(0.3, MochiKit.Base.bind(function () {
169 if (this._enterLeaveCounter == 0) { 166 if (this._enterLeaveCounter == 0) {
170 this.hideDirectLoginListPopup(); 167 this.hideDirectLoginListPopup();
171 } 168 }
172 }, this)) 169 }, this))
173 }, 170 },
174 171
175 //------------------------------------------------------------------------- 172 //-------------------------------------------------------------------------
176 173
177 'handleDirectLoginListPopupEnter': function (anEvent) { 174 'handleDirectLoginListPopupEnter': function (anEvent) {
178 this._enterLeaveCounter ++; 175 this._enterLeaveCounter ++;
179 if (this._enterLeaveCounter > 2) { 176 if (this._enterLeaveCounter > 2) {
180 this._enterLeaveCounter = 2; 177 this._enterLeaveCounter = 2;
181 } 178 }
182 }, 179 },
183 180
184 'handleDirectLoginListPopupLeave': function (anEvent) { 181 'handleDirectLoginListPopupLeave': function (anEvent) {
185 this._enterLeaveCounter --; 182 this._enterLeaveCounter --;
186 if (this._enterLeaveCounter < 0) { 183 if (this._enterLeaveCounter < 0) {
187 this._enterLeaveCounter = 0; 184 this._enterLeaveCounter = 0;
188 } 185 }
189 186
190 MochiKit.Async.callLater(0.3, MochiKit.Base.bind(function () { 187 MochiKit.Async.callLater(0.3, MochiKit.Base.bind(function () {
191 if (this._enterLeaveCounter == 0) { 188 if (this._enterLeaveCounter == 0) {
192 this.hideDirectLoginListPopup(); 189 this.hideDirectLoginListPopup();
193 } 190 }
194 }, this)) 191 }, this))
195 }, 192 },
196 193
197 //========================================================================= 194 //=========================================================================
198 195
199 'showDirectLoginListPopup': function (aRecordInfo, anElement) { 196 'showDirectLoginListPopup': function (aRecordInfo, anElement) {
200 var position; 197 var position;
201 var directLoginsInfo; 198 var directLoginsInfo;
202 var directLoginsListElement; 199 var directLoginsListElement;
203 var ellipsesElement; 200 var ellipsesElement;
204 201
205 202
206 ellipsesElement = MochiKit.Selector.findChildElements(anElement, ['div.card_directLogin_ellipses'])[0]; 203 ellipsesElement = MochiKit.Selector.findChildElements(anElement, ['div.card_directLogin_ellipses'])[0];
207 position = MochiKit.Style.getElementPosition(ellipsesElement); 204 position = MochiKit.Style.getElementPosition(ellipsesElement);
208 // position = MochiKit.Style.getElementPosition(anElement); 205 // position = MochiKit.Style.getElementPosition(anElement);
209 position.x += 14; 206 position.x += 14;
210 position.y -= 26; 207 position.y -= 26;
211 208
212 MochiKit.Style.setElementPosition(this.getId('DirectLoginListPopup'), position /*[, units='px'] */); 209 MochiKit.Style.setElementPosition(this.getId('DirectLoginListPopup'), position /*[, units='px'] */);
213 210
214 directLoginsListElement = this.getElement('DirectLoginListPopup_list'); 211 directLoginsListElement = this.getElement('DirectLoginListPopup_list');
215 directLoginsListElement.innerHTML = ''; 212 directLoginsListElement.innerHTML = '';
216 213
217 directLoginsInfo = aRecordInfo[this.name()]; 214 directLoginsInfo = aRecordInfo[this.name()];
218 c = directLoginsInfo.length; 215 c = directLoginsInfo.length;
219 for (i=0; i<c; i++) { 216 for (i=0; i<c; i++) {
220 varelementID; 217 varelementID;
221 varlabel; 218 varlabel;
222 var trunkedLabel; 219 var trunkedLabel;
223 220
224 label = directLoginsInfo[i]['label']; 221 label = directLoginsInfo[i]['label'];
225 trunkedLabel = (label.length > 20 ? label.slice(0,20) + '&hellip;' : label); 222 trunkedLabel = (label.length > 20 ? label.slice(0,20) + '&hellip;' : label);
226 223
227 elementID = this.getId('directLoginList_' + directLoginsInfo[i]['_reference']); 224 elementID = this.getId('directLoginList_' + directLoginsInfo[i]['_reference']);
228 225
229 Clipperz.DOM.Helper.append(directLoginsListElement, {tag:'li', children:[ 226 Clipperz.DOM.Helper.append(directLoginsListElement, {tag:'li', children:[
230 {tag:'div', children:[ 227 {tag:'div', children:[
231 {tag:'img', cls:'favicon', src:directLoginsInfo[i]['favicon']}, 228 {tag:'img', cls:'favicon', src:directLoginsInfo[i]['favicon']},
232 (label == trunkedLabel ? {tag:'a', href:'#', id:elementID, html:trunkedLabel} : {tag:'a', href:'#', id:elementID, title:label, html:trunkedLabel}) 229 (label == trunkedLabel ? {tag:'a', href:'#', id:elementID, html:trunkedLabel} : {tag:'a', href:'#', id:elementID, title:label, html:trunkedLabel})
233 ]} 230 ]}
234 ]}); 231 ]});
235 232
236 // MochiKit.Signal.connect(elementID, 'onclick', MochiKit.Base.method(this, 'handleDirectLoginClick', directLoginsInfo[i]['_rowObject'])); 233 // MochiKit.Signal.connect(elementID, 'onclick', MochiKit.Base.method(this, 'handleDirectLoginClick', directLoginsInfo[i]['_rowObject']));
237 this.connectEvent(elementID, 'onclick', MochiKit.Base.method(this, 'handleDirectLoginClick', directLoginsInfo[i]['_rowObject'])); 234 this.connectEvent(elementID, 'onclick', MochiKit.Base.method(this, 'handleDirectLoginClick', directLoginsInfo[i]['_rowObject']));
238 } 235 }
239 236
240 // MochiKit.Style.showElement(this.getId('DirectLoginListPopup')); 237 // MochiKit.Style.showElement(this.getId('DirectLoginListPopup'));
241 MochiKit.Visual.appear(this.getId('DirectLoginListPopup'), {duration:0.5}); 238 MochiKit.Visual.appear(this.getId('DirectLoginListPopup'), {duration:0.5});
242 MochiKit.Signal.signal(this, 'selectRow', aRecordInfo); 239 MochiKit.Signal.signal(this, 'selectRow', aRecordInfo);
243 240
244 this._selectedRowObject = aRecordInfo; 241 this._selectedRowObject = aRecordInfo;
245 }, 242 },
246 243
247 //------------------------------------------------------------------------- 244 //-------------------------------------------------------------------------
248 245
249 'hideDirectLoginListPopup': function () { 246 'hideDirectLoginListPopup': function () {
250 if (this._selectedRowObject != null) { 247 if (this._selectedRowObject != null) {
251 MochiKit.Signal.signal(this, 'unselectRow', this._selectedRowObject); 248 MochiKit.Signal.signal(this, 'unselectRow', this._selectedRowObject);
252 MochiKit.Visual.fade(this.getId('DirectLoginListPopup'), {duration:0.5}); 249 MochiKit.Visual.fade(this.getId('DirectLoginListPopup'), {duration:0.5});
253 this._selectedRowObject = null; 250 this._selectedRowObject = null;
254 this._enterLeaveCounter = 0; 251 this._enterLeaveCounter = 0;
255 } 252 }
256 }, 253 },
257 254
258 //========================================================================= 255 //=========================================================================
259 256
260 'handleDirectLoginClick': function (aDirectLogin, anEvent) { 257 'handleDirectLoginClick': function (aDirectLogin, anEvent) {
261 anEvent.preventDefault(); 258 anEvent.preventDefault();
262 // aDirectLogin.runDirectLogin(); 259 // aDirectLogin.runDirectLogin();
263 Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.openDirectLogin(aDirectLogin); 260 Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.openDirectLogin(aDirectLogin);
264 }, 261 },
265 262
266 //------------------------------------------------------------------------- 263 //-------------------------------------------------------------------------
267 264
268 '__syntax_fix__' : 'syntax fix' 265 '__syntax_fix__' : 'syntax fix'
269 266
270}); 267});
271 268
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/FaviconColumnManager.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/FaviconColumnManager.js
index 19d1635..6297002 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/FaviconColumnManager.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/FaviconColumnManager.js
@@ -1,89 +1,86 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31//############################################################################# 28//#############################################################################
32 29
33Clipperz.PM.UI.Web.Components.FaviconColumnManager = function(args) { 30Clipperz.PM.UI.Web.Components.FaviconColumnManager = function(args) {
34 args = args || {}; 31 args = args || {};
35 Clipperz.PM.UI.Web.Components.FaviconColumnManager.superclass.constructor.call(this, args); 32 Clipperz.PM.UI.Web.Components.FaviconColumnManager.superclass.constructor.call(this, args);
36 33
37 return this; 34 return this;
38} 35}
39 36
40//============================================================================= 37//=============================================================================
41 38
42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.FaviconColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, { 39Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.FaviconColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, {
43 40
44 'toString': function () { 41 'toString': function () {
45 return "Clipperz.PM.UI.Web.Components.FaviconColumnManager component"; 42 return "Clipperz.PM.UI.Web.Components.FaviconColumnManager component";
46 }, 43 },
47 44
48 //------------------------------------------------------------------------- 45 //-------------------------------------------------------------------------
49 46
50 'renderCell': function(aRowElement, anObject) { 47 'renderCell': function(aRowElement, anObject) {
51 varfaviconImageElement; 48 varfaviconImageElement;
52 var faviconUrl; 49 var faviconUrl;
53 50
54 faviconImageElement = this.getId('favicon'); 51 faviconImageElement = this.getId('favicon');
55 faviconUrl = anObject[this.name()]; 52 faviconUrl = anObject[this.name()];
56 53
57 if (faviconUrl == null) { 54 if (faviconUrl == null) {
58 faviconUrl = Clipperz.PM.Strings.getValue('defaultFaviconUrl'); 55 faviconUrl = Clipperz.PM.Strings.getValue('defaultFaviconUrl');
59 } 56 }
60 57
61 Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[ 58 Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[
62 {tag:'img', id:faviconImageElement, src:faviconUrl} 59 {tag:'img', id:faviconImageElement, src:faviconUrl}
63 ]}); 60 ]});
64 61
65 MochiKit.Signal.connect(faviconImageElement, 'onload', this, 'handleLoadedFaviconImage'); 62 MochiKit.Signal.connect(faviconImageElement, 'onload', this, 'handleLoadedFaviconImage');
66 MochiKit.Signal.connect(faviconImageElement, 'onerror', this, 'handleMissingFaviconImage'); 63 MochiKit.Signal.connect(faviconImageElement, 'onerror', this, 'handleMissingFaviconImage');
67 MochiKit.Signal.connect(faviconImageElement, 'onabort', this, 'handleMissingFaviconImage'); 64 MochiKit.Signal.connect(faviconImageElement, 'onabort', this, 'handleMissingFaviconImage');
68 }, 65 },
69 66
70 //----------------------------------------------------- 67 //-----------------------------------------------------
71 68
72 'handleLoadedFaviconImage': function(anEvent) { 69 'handleLoadedFaviconImage': function(anEvent) {
73 MochiKit.Signal.disconnectAllTo(anEvent.src()); 70 MochiKit.Signal.disconnectAllTo(anEvent.src());
74 if (anEvent.src().complete == false) { 71 if (anEvent.src().complete == false) {
75 anEvent.src().src = Clipperz.PM.Strings.getValue('defaultFaviconUrl'); 72 anEvent.src().src = Clipperz.PM.Strings.getValue('defaultFaviconUrl');
76 } 73 }
77 }, 74 },
78 75
79 //----------------------------------------------------- 76 //-----------------------------------------------------
80 77
81 'handleMissingFaviconImage': function(anEvent) { 78 'handleMissingFaviconImage': function(anEvent) {
82 MochiKit.Signal.disconnectAllTo(anEvent.src()); 79 MochiKit.Signal.disconnectAllTo(anEvent.src());
83 anEvent.src().src = Clipperz.PM.Strings.getValue('defaultFaviconUrl'); 80 anEvent.src().src = Clipperz.PM.Strings.getValue('defaultFaviconUrl');
84 }, 81 },
85 82
86 //----------------------------------------------------- 83 //-----------------------------------------------------
87 '__syntax_fix__' : 'syntax fix' 84 '__syntax_fix__' : 'syntax fix'
88}); 85});
89 86
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/GridComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/GridComponent.js
index 8b3e6c9..51d55f4 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/GridComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/GridComponent.js
@@ -1,262 +1,259 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.GridComponent = function(args) { 28Clipperz.PM.UI.Web.Components.GridComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.GridComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.GridComponent.superclass.constructor.apply(this, arguments);
35 32
36 this._columnsManagers = args.columnsManagers; 33 this._columnsManagers = args.columnsManagers;
37 34
38 this._rowsObjects = []; 35 this._rowsObjects = [];
39 this._noRowsGridComponent = null; 36 this._noRowsGridComponent = null;
40 37
41 this._slots = { 38 this._slots = {
42 'headerSlot':this.getId('headerSlot') 39 'headerSlot':this.getId('headerSlot')
43 }; 40 };
44 41
45 return this; 42 return this;
46} 43}
47 44
48//============================================================================= 45//=============================================================================
49 46
50Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.GridComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 47Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.GridComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
51 48
52 //------------------------------------------------------------------------- 49 //-------------------------------------------------------------------------
53 50
54 'toString': function () { 51 'toString': function () {
55 return "Clipperz.PM.UI.Web.Components.GridComponent component"; 52 return "Clipperz.PM.UI.Web.Components.GridComponent component";
56 }, 53 },
57 54
58 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
59 56
60 'rows': function () { 57 'rows': function () {
61 throw Clipperz.Base.exception.AbstractMethod; 58 throw Clipperz.Base.exception.AbstractMethod;
62 // return this._rows; 59 // return this._rows;
63 }, 60 },
64 61
65 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
66 63
67 'columnsManagers': function () { 64 'columnsManagers': function () {
68 return this._columnsManagers; 65 return this._columnsManagers;
69 }, 66 },
70 67
71 //------------------------------------------------------------------------- 68 //-------------------------------------------------------------------------
72 69
73 'renderSelf': function(/*aContainer, aPosition*/) { 70 'renderSelf': function(/*aContainer, aPosition*/) {
74 this.append(this.element(), [ 71 this.append(this.element(), [
75 {tag:'div', cls:'header', children:[ 72 {tag:'div', cls:'header', children:[
76 {tag:'form', id:this.getId('searchForm'), cls:'search', children:[ 73 {tag:'form', id:this.getId('searchForm'), cls:'search', children:[
77 {tag:'div', cls:'search', children:[ 74 {tag:'div', cls:'search', children:[
78 {tag:'input', type:'text', id:this.getId('search'), cls:'search', placeholder:"search", name:'textToSearch'/*, value:"clipperz"*/} 75 {tag:'input', type:'text', id:this.getId('search'), cls:'search', placeholder:"search", name:'textToSearch'/*, value:"clipperz"*/}
79 ]}, 76 ]},
80 {tag:'div', cls:'clearSearchButton', id:this.getId('clearSearch')}, 77 {tag:'div', cls:'clearSearchButton', id:this.getId('clearSearch')},
81 // {tag:'input', type:'button', cls:'searchButton', name:'searchButton', value:"search"}, 78 // {tag:'input', type:'button', cls:'searchButton', name:'searchButton', value:"search"},
82 {tag:'div', cls:'headerSlot', id:this.getId('headerSlot')} 79 {tag:'div', cls:'headerSlot', id:this.getId('headerSlot')}
83 ]} 80 ]}
84 ]}, 81 ]},
85 {tag:'div', cls:'body', children:[ 82 {tag:'div', cls:'body', children:[
86 {tag:'div', cls:'rows', id:this.getId('rows'), children:[ 83 {tag:'div', cls:'rows', id:this.getId('rows'), children:[
87 {tag:'table', cellpadding:'0', cellspacing:'0', cls:'rows', children:[ 84 {tag:'table', cellpadding:'0', cellspacing:'0', cls:'rows', children:[
88 {tag:'thead', children:[ 85 {tag:'thead', children:[
89 {tag:'tr', id:this.getId('thead_tr'), children:[]} 86 {tag:'tr', id:this.getId('thead_tr'), children:[]}
90 ]}, 87 ]},
91 {tag:'tbody', id:this.getId('gridRows'), children:[]} 88 {tag:'tbody', id:this.getId('gridRows'), children:[]}
92 ]} 89 ]}
93 ]}, 90 ]},
94 {tag:'div', cls:'noRowsBlock', id:this.getId('noRowsBlock'), children:[]} 91 {tag:'div', cls:'noRowsBlock', id:this.getId('noRowsBlock'), children:[]}
95 ]}, 92 ]},
96 {tag:'div', cls:'footer'} 93 {tag:'div', cls:'footer'}
97 ]); 94 ]);
98 95
99 this.renderHeader(); 96 this.renderHeader();
100 MochiKit.Signal.connect(this.getId('clearSearch'), 'onclick', this, 'clearSearchHandler'); 97 MochiKit.Signal.connect(this.getId('clearSearch'), 'onclick', this, 'clearSearchHandler');
101 }, 98 },
102 99
103 //------------------------------------------------------------------------- 100 //-------------------------------------------------------------------------
104 101
105 'renderHeader': function () { 102 'renderHeader': function () {
106 var headerElement; 103 var headerElement;
107 104
108 headerElement = this.getElement('thead_tr'); 105 headerElement = this.getElement('thead_tr');
109 headerElement.innerHTML = ""; 106 headerElement.innerHTML = "";
110 107
111 MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) { 108 MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) {
112 aColumnManager.renderHeader(headerElement); 109 aColumnManager.renderHeader(headerElement);
113 }); 110 });
114 }, 111 },
115 112
116 //------------------------------------------------------------------------- 113 //-------------------------------------------------------------------------
117 114
118 'update': function (someObjects) { 115 'update': function (someObjects) {
119 this._rowsObjects = someObjects 116 this._rowsObjects = someObjects
120 this.refresh(); 117 this.refresh();
121 this.focus(); 118 this.focus();
122 }, 119 },
123 120
124 'focus': function () { 121 'focus': function () {
125 this.getElement('search').focus(); 122 this.getElement('search').focus();
126 }, 123 },
127 124
128 //------------------------------------------------------------------------- 125 //-------------------------------------------------------------------------
129 126
130 'startSearch': function () { 127 'startSearch': function () {
131//console.log("--> startSearch"); 128//console.log("--> startSearch");
132 MochiKit.DOM.addElementClass(this.getElement('search'), 'running'); 129 MochiKit.DOM.addElementClass(this.getElement('search'), 'running');
133 }, 130 },
134 131
135 'endSearch': function () { 132 'endSearch': function () {
136 MochiKit.DOM.removeElementClass(this.getElement('search'), 'running'); 133 MochiKit.DOM.removeElementClass(this.getElement('search'), 'running');
137//console.log("<-- startSearch"); 134//console.log("<-- startSearch");
138 }, 135 },
139 136
140 //------------------------------------------------------------------------- 137 //-------------------------------------------------------------------------
141 138
142 'disconnectColumnManagersRowsSignals': function () { 139 'disconnectColumnManagersRowsSignals': function () {
143 MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) { 140 MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) {
144 aColumnManager.disconnectRowsSignals(); 141 aColumnManager.disconnectRowsSignals();
145 }); 142 });
146 }, 143 },
147 144
148 //------------------------------------------------------------------------- 145 //-------------------------------------------------------------------------
149 146
150 'refresh': function () { 147 'refresh': function () {
151 var gridRowsElement; 148 var gridRowsElement;
152 var rowClass; 149 var rowClass;
153 150
154 this.disconnectColumnManagersRowsSignals(); 151 this.disconnectColumnManagersRowsSignals();
155 152
156 { 153 {
157 MochiKit.DOM.removeElementClass(this.getElement('search'), 'disabled'); 154 MochiKit.DOM.removeElementClass(this.getElement('search'), 'disabled');
158 // MochiKit.DOM.setNodeAttribute(this.getElement('search'), 'disabled', null); 155 // MochiKit.DOM.setNodeAttribute(this.getElement('search'), 'disabled', null);
159 MochiKit.DOM.removeElementClass(this.element(), 'empty'); 156 MochiKit.DOM.removeElementClass(this.element(), 'empty');
160 MochiKit.DOM.removeElementClass(this.element(), 'noRows'); 157 MochiKit.DOM.removeElementClass(this.element(), 'noRows');
161 } 158 }
162 159
163 160
164 gridRowsElement = this.getElement('gridRows'); 161 gridRowsElement = this.getElement('gridRows');
165 gridRowsElement.innerHTML = ""; 162 gridRowsElement.innerHTML = "";
166 163
167 MochiKit.DOM.removeElementClass(this.element(), 'empty'); 164 MochiKit.DOM.removeElementClass(this.element(), 'empty');
168 165
169 rowClass = 'odd'; 166 rowClass = 'odd';
170 MochiKit.Iter.forEach(this._rowsObjects, MochiKit.Base.bind(function (aRowObject) { 167 MochiKit.Iter.forEach(this._rowsObjects, MochiKit.Base.bind(function (aRowObject) {
171 var cardRowElement; 168 var cardRowElement;
172 169
173 cardRowElement = this.append(gridRowsElement, {tag:'tr', id:this.getId(aRowObject['_reference']), cls:rowClass}); 170 cardRowElement = this.append(gridRowsElement, {tag:'tr', id:this.getId(aRowObject['_reference']), cls:rowClass});
174 MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) { 171 MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) {
175 aColumnManager.renderCell(cardRowElement, aRowObject); 172 aColumnManager.renderCell(cardRowElement, aRowObject);
176 }); 173 });
177 174
178 rowClass = (rowClass == 'odd') ? 'even' : 'odd'; 175 rowClass = (rowClass == 'odd') ? 'even' : 'odd';
179 }, this)); 176 }, this));
180 }, 177 },
181 178
182 //----------------------------------------------------------------------------- 179 //-----------------------------------------------------------------------------
183 180
184 'filterElement': function () { 181 'filterElement': function () {
185 return this.getElement('search'); 182 return this.getElement('search');
186 }, 183 },
187 184
188 //------------------------------------------------------------------------- 185 //-------------------------------------------------------------------------
189 186
190 'shouldShowElementWhileRendering': function () { 187 'shouldShowElementWhileRendering': function () {
191 return false; 188 return false;
192 }, 189 },
193 190
194 //------------------------------------------------------------------------- 191 //-------------------------------------------------------------------------
195 192
196 'selectRow': function (aRowObject) { 193 'selectRow': function (aRowObject) {
197 MochiKit.DOM.addElementClass(this.getId(aRowObject['_reference']), 'selected'); 194 MochiKit.DOM.addElementClass(this.getId(aRowObject['_reference']), 'selected');
198 }, 195 },
199 196
200 'unselectRow': function (aRowObject) { 197 'unselectRow': function (aRowObject) {
201 MochiKit.DOM.removeElementClass(this.getId(aRowObject['_reference']), 'selected'); 198 MochiKit.DOM.removeElementClass(this.getId(aRowObject['_reference']), 'selected');
202 }, 199 },
203 200
204 //------------------------------------------------------------------------- 201 //-------------------------------------------------------------------------
205 /* 202 /*
206 'passOpenDirectLogin': function(aDirectLoginReferenceId) { 203 'passOpenDirectLogin': function(aDirectLoginReferenceId) {
207 MochiKit.Signal.signal(this, 'openDirectLogin', aDirectLoginReferenceId); 204 MochiKit.Signal.signal(this, 'openDirectLogin', aDirectLoginReferenceId);
208 }, 205 },
209 */ 206 */
210 //------------------------------------------------------------------------- 207 //-------------------------------------------------------------------------
211 208
212 'clearSearchHandler': function (anEvent) { 209 'clearSearchHandler': function (anEvent) {
213 var searchElement; 210 var searchElement;
214 211
215 anEvent.preventDefault(); 212 anEvent.preventDefault();
216 213
217 searchElement = this.getElement('search'); 214 searchElement = this.getElement('search');
218 searchElement.value = ""; 215 searchElement.value = "";
219 searchElement.focus(); 216 searchElement.focus();
220 }, 217 },
221 218
222 //------------------------------------------------------------------------- 219 //-------------------------------------------------------------------------
223 220
224 'drawEmpty': function () { 221 'drawEmpty': function () {
225 this.disconnectColumnManagersRowsSignals(); 222 this.disconnectColumnManagersRowsSignals();
226 MochiKit.DOM.addElementClass(this.getElement('search'), 'disabled'); 223 MochiKit.DOM.addElementClass(this.getElement('search'), 'disabled');
227 // MochiKit.DOM.setNodeAttribute(this.getElement('search'), 'disabled', 'disabled'); 224 // MochiKit.DOM.setNodeAttribute(this.getElement('search'), 'disabled', 'disabled');
228 225
229 gridRowsElement = this.getElement('gridRows'); 226 gridRowsElement = this.getElement('gridRows');
230 gridRowsElement.innerHTML = ""; 227 gridRowsElement.innerHTML = "";
231 MochiKit.DOM.addElementClass(this.element(), 'empty'); 228 MochiKit.DOM.addElementClass(this.element(), 'empty');
232 }, 229 },
233 230
234 //------------------------------------------------------------------------- 231 //-------------------------------------------------------------------------
235 232
236 'setNoRowsGridComponent': function (aComponent) { 233 'setNoRowsGridComponent': function (aComponent) {
237 this.removeNoRowsGridComponent(); 234 this.removeNoRowsGridComponent();
238 this._noRowsGridComponent = aComponent; 235 this._noRowsGridComponent = aComponent;
239 236
240 this.disconnectColumnManagersRowsSignals(); 237 this.disconnectColumnManagersRowsSignals();
241 MochiKit.DOM.addElementClass(this.getElement('search'), 'disabled'); 238 MochiKit.DOM.addElementClass(this.getElement('search'), 'disabled');
242 // MochiKit.DOM.setNodeAttribute(this.getElement('search'), 'disabled', 'disabled'); 239 // MochiKit.DOM.setNodeAttribute(this.getElement('search'), 'disabled', 'disabled');
243 240
244 gridRowsElement = this.getElement('gridRows'); 241 gridRowsElement = this.getElement('gridRows');
245 gridRowsElement.innerHTML = ""; 242 gridRowsElement.innerHTML = "";
246 MochiKit.DOM.addElementClass(this.element(), 'noRows'); 243 MochiKit.DOM.addElementClass(this.element(), 'noRows');
247 244
248 if (aComponent != null) { 245 if (aComponent != null) {
249 aComponent.renderInNode(this.getElement('noRowsBlock')); 246 aComponent.renderInNode(this.getElement('noRowsBlock'));
250 } 247 }
251 }, 248 },
252 249
253 'removeNoRowsGridComponent': function () { 250 'removeNoRowsGridComponent': function () {
254 if (this._noRowsGridComponent != null) { 251 if (this._noRowsGridComponent != null) {
255 this._noRowsGridComponent.remove(); 252 this._noRowsGridComponent.remove();
256 this._noRowsGridComponent = null; 253 this._noRowsGridComponent = null;
257 } 254 }
258 }, 255 },
259 256
260 //------------------------------------------------------------------------- 257 //-------------------------------------------------------------------------
261 __syntaxFix__: "syntax fix" 258 __syntaxFix__: "syntax fix"
262}); 259});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ImageColumnManager.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ImageColumnManager.js
index 07b8dcc..3e03fcf 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ImageColumnManager.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ImageColumnManager.js
@@ -1,68 +1,65 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31//############################################################################# 28//#############################################################################
32 29
33Clipperz.PM.UI.Web.Components.ImageColumnManager = function(args) { 30Clipperz.PM.UI.Web.Components.ImageColumnManager = function(args) {
34 args = args || {}; 31 args = args || {};
35 Clipperz.PM.UI.Web.Components.ImageColumnManager.superclass.constructor.call(this, args); 32 Clipperz.PM.UI.Web.Components.ImageColumnManager.superclass.constructor.call(this, args);
36 33
37 return this; 34 return this;
38} 35}
39 36
40//============================================================================= 37//=============================================================================
41 38
42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.ImageColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, { 39Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.ImageColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, {
43 40
44 'toString': function () { 41 'toString': function () {
45 return "Clipperz.PM.UI.Web.Components.ImageColumnManager component"; 42 return "Clipperz.PM.UI.Web.Components.ImageColumnManager component";
46 }, 43 },
47 44
48 //------------------------------------------------------------------------- 45 //-------------------------------------------------------------------------
49 46
50 'renderCell': function(aRowElement, anObject) { 47 'renderCell': function(aRowElement, anObject) {
51 Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[ 48 Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[
52 {tag:'img', src:anObject[this.name()]} 49 {tag:'img', src:anObject[this.name()]}
53 ]}); 50 ]});
54 51
55 // return Clipperz.Async.callbacks("ImageColumnManager.renderCell", [ 52 // return Clipperz.Async.callbacks("ImageColumnManager.renderCell", [
56 // this.selector(), 53 // this.selector(),
57 // MochiKit.Base.bind(function (aValue) { 54 // MochiKit.Base.bind(function (aValue) {
58 // Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[ 55 // Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[
59 // {tag:'img', src:aValue} 56 // {tag:'img', src:aValue}
60 // ]}); 57 // ]});
61 // }, this) 58 // }, this)
62 // ], {trace:false}, anObject); 59 // ], {trace:false}, anObject);
63 }, 60 },
64 61
65 //----------------------------------------------------- 62 //-----------------------------------------------------
66 '__syntax_fix__' : 'syntax fix' 63 '__syntax_fix__' : 'syntax fix'
67}); 64});
68 65
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LinkColumnManager.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LinkColumnManager.js
index e833190..f3f9cd5 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LinkColumnManager.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LinkColumnManager.js
@@ -1,92 +1,89 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31//############################################################################# 28//#############################################################################
32 29
33Clipperz.PM.UI.Web.Components.LinkColumnManager = function(args) { 30Clipperz.PM.UI.Web.Components.LinkColumnManager = function(args) {
34 args = args || {}; 31 args = args || {};
35 Clipperz.PM.UI.Web.Components.LinkColumnManager.superclass.constructor.call(this, args); 32 Clipperz.PM.UI.Web.Components.LinkColumnManager.superclass.constructor.call(this, args);
36 33
37 this._actionMethod = args.actionMethod || null; 34 this._actionMethod = args.actionMethod || null;
38 35
39 return this; 36 return this;
40} 37}
41 38
42//============================================================================= 39//=============================================================================
43 40
44Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LinkColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, { 41Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LinkColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, {
45 42
46 'toString': function () { 43 'toString': function () {
47 return "Clipperz.PM.UI.Web.Components.DateColumnManager component"; 44 return "Clipperz.PM.UI.Web.Components.DateColumnManager component";
48 }, 45 },
49 46
50 //------------------------------------------------------------------------- 47 //-------------------------------------------------------------------------
51 48
52 'actionMethod': function () { 49 'actionMethod': function () {
53 return this._actionMethod; 50 return this._actionMethod;
54 }, 51 },
55 52
56 //------------------------------------------------------------------------- 53 //-------------------------------------------------------------------------
57 54
58 'renderCell': function(aRowElement, anObject) { 55 'renderCell': function(aRowElement, anObject) {
59 vartdElement; 56 vartdElement;
60 varlinkElement; 57 varlinkElement;
61 58
62 tdElement = Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[ 59 tdElement = Clipperz.DOM.Helper.append(aRowElement, {tag:'td', cls:this.cssClass(), children:[
63 {tag:'span', children:[ 60 {tag:'span', children:[
64 {tag:'a', href:'#', html:anObject[this.name()]} 61 {tag:'a', href:'#', html:anObject[this.name()]}
65 ]} 62 ]}
66 ]}); 63 ]});
67 64
68 linkElement = MochiKit.DOM.getFirstElementByTagAndClassName('a', null, tdElement); 65 linkElement = MochiKit.DOM.getFirstElementByTagAndClassName('a', null, tdElement);
69 // MochiKit.Signal.connect(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject'])); 66 // MochiKit.Signal.connect(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject']));
70 this.connectEvent(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject'])); 67 this.connectEvent(linkElement, 'onclick', MochiKit.Base.method(this, 'handleLinkClick', anObject['_rowObject']));
71 }, 68 },
72 69
73 //----------------------------------------------------- 70 //-----------------------------------------------------
74 71
75 'handleLinkClick': function (anObject, anEvent) { 72 'handleLinkClick': function (anObject, anEvent) {
76 anEvent.preventDefault(); 73 anEvent.preventDefault();
77 74
78 if (this.actionMethod() != null) { 75 if (this.actionMethod() != null) {
79 var deferredResult; 76 var deferredResult;
80 77
81 deferredResult = new Clipperz.Async.Deferred("LinkColumnManager.handleLinkClick", {trace:false}); 78 deferredResult = new Clipperz.Async.Deferred("LinkColumnManager.handleLinkClick", {trace:false});
82 // deferredResult.addCallbackPass(MochiKit.Signal.signal, this, 'selectRow', anObject); 79 // deferredResult.addCallbackPass(MochiKit.Signal.signal, this, 'selectRow', anObject);
83 deferredResult.addCallback(this.actionMethod(), anObject, anEvent); 80 deferredResult.addCallback(this.actionMethod(), anObject, anEvent);
84 // deferredResult.addBothPass(MochiKit.Signal.signal, this, 'unselectRow', anObject); 81 // deferredResult.addBothPass(MochiKit.Signal.signal, this, 'unselectRow', anObject);
85 deferredResult.callback(); 82 deferredResult.callback();
86 } 83 }
87 }, 84 },
88 85
89 //----------------------------------------------------- 86 //-----------------------------------------------------
90 '__syntax_fix__' : 'syntax fix' 87 '__syntax_fix__' : 'syntax fix'
91}); 88});
92 89
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginForm.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginForm.js
index de20853..389d876 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginForm.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginForm.js
@@ -1,203 +1,200 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.LoginForm = function(args) { 28Clipperz.PM.UI.Web.Components.LoginForm = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 this._autocomplete = args.autocomplete || 'off'; 31 this._autocomplete = args.autocomplete || 'off';
35 32
36 Clipperz.PM.UI.Web.Components.LoginForm.superclass.constructor.apply(this, arguments); 33 Clipperz.PM.UI.Web.Components.LoginForm.superclass.constructor.apply(this, arguments);
37 34
38 this._slots = { 35 this._slots = {
39 'passphraseEntropy':this.getId('passphraseEntropy') 36 'passphraseEntropy':this.getId('passphraseEntropy')
40 }; 37 };
41 38
42 return this; 39 return this;
43} 40}
44 41
45//============================================================================= 42//=============================================================================
46 43
47Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LoginForm, Clipperz.PM.UI.Common.Components.BaseComponent, { 44Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LoginForm, Clipperz.PM.UI.Common.Components.BaseComponent, {
48 45
49 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
50 47
51 'toString': function () { 48 'toString': function () {
52 return "Clipperz.PM.UI.Web.Components.LoginForm component"; 49 return "Clipperz.PM.UI.Web.Components.LoginForm component";
53 }, 50 },
54 51
55 'autocomplete': function () { 52 'autocomplete': function () {
56 return this._autocomplete; 53 return this._autocomplete;
57 }, 54 },
58 55
59 //------------------------------------------------------------------------- 56 //-------------------------------------------------------------------------
60 57
61 'renderSelf': function() { 58 'renderSelf': function() {
62 this.append(this.element(), {tag:'div', id:'loginBox', children:[ 59 this.append(this.element(), {tag:'div', id:'loginBox', children:[
63 {tag:'div', cls:'header'}, 60 {tag:'div', cls:'header'},
64 {tag:'div', cls:'body', id:this.getId('body'), children:[ 61 {tag:'div', cls:'body', id:this.getId('body'), children:[
65 {tag:'div', id:this.getId('loginForm'), children:[ 62 {tag:'div', id:this.getId('loginForm'), children:[
66 {tag:'div', children:[ 63 {tag:'div', children:[
67 {tag:'h4', html:'Login'}, 64 {tag:'h4', html:'Login'},
68 // {tag:'form', cls:'loginForm', autocomplete:this.autocomplete(), children:[ 65 // {tag:'form', cls:'loginForm', autocomplete:this.autocomplete(), children:[
69 {tag:'form', id:this.getId('form'), cls:'loginForm', children:[ 66 {tag:'form', id:this.getId('form'), cls:'loginForm', children:[
70 {tag:'label', html:'username', 'for':this.getId('usernameField')}, 67 {tag:'label', html:'username', 'for':this.getId('usernameField')},
71 {tag:'input', id:this.getId('usernameField'), type:'text', cls:'username'/*, value:'joe'*/}, 68 {tag:'input', id:this.getId('usernameField'), type:'text', cls:'username'/*, value:'joe'*/},
72 {tag:'ul', id:this.getId('passwordOptions'), children:[ 69 {tag:'ul', id:this.getId('passwordOptions'), children:[
73 {tag:'li', id:this.getId('passphraseOption'), children:[ 70 {tag:'li', id:this.getId('passphraseOption'), children:[
74 {tag:'label', html:'passphrase / OTP', 'for':this.getId('passphraseField')}, 71 {tag:'label', html:'passphrase / OTP', 'for':this.getId('passphraseField')},
75 {tag:'input', id:this.getId('passphraseField'), type:'password', cls:'password'/*, value:'clipperz'*/} 72 {tag:'input', id:this.getId('passphraseField'), type:'password', cls:'password'/*, value:'clipperz'*/}
76 ]} //, 73 ]} //,
77/* 74/*
78 {tag:'li', id:this.getId('otpOption'), children:[ 75 {tag:'li', id:this.getId('otpOption'), children:[
79 {tag:'label', html:'one-time password', 'for':this.getId('otpField_1')}, 76 {tag:'label', html:'one-time password', 'for':this.getId('otpField_1')},
80 {tag:'input', id:this.getId('otpField_1'), type:'text', cls:'otp', value:'abcd-efgh'}, 77 {tag:'input', id:this.getId('otpField_1'), type:'text', cls:'otp', value:'abcd-efgh'},
81 {tag:'input', id:this.getId('otpField_2'), type:'text', cls:'otp', value:'abcd-efgh'}, 78 {tag:'input', id:this.getId('otpField_2'), type:'text', cls:'otp', value:'abcd-efgh'},
82 {tag:'input', id:this.getId('otpField_3'), type:'text', cls:'otp', value:'abcd-efgh'}, 79 {tag:'input', id:this.getId('otpField_3'), type:'text', cls:'otp', value:'abcd-efgh'},
83 {tag:'input', id:this.getId('otpField_4'), type:'text', cls:'otp', value:'abcd-efgh'} 80 {tag:'input', id:this.getId('otpField_4'), type:'text', cls:'otp', value:'abcd-efgh'}
84 ]} 81 ]}
85*/ 82*/
86 ]}, 83 ]},
87 // {tag:'input', id:this.getId('otpCheckbox'), type:'checkbox', cls:'checkbox'}, 84 // {tag:'input', id:this.getId('otpCheckbox'), type:'checkbox', cls:'checkbox'},
88 // {tag:'label', html:'use a one-time passphrase', 'for':this.getId('otpCheckbox'), cls:'checkbox'}, 85 // {tag:'label', html:'use a one-time passphrase', 'for':this.getId('otpCheckbox'), cls:'checkbox'},
89 86
90 {tag:'div', cls:'translations', children:[ 87 {tag:'div', cls:'translations', children:[
91 {tag:'h4', html:'choose your language'}, 88 {tag:'h4', html:'choose your language'},
92 {tag:'ul', children:[ 89 {tag:'ul', children:[
93 {tag:'li', cls:'selected', html:'english'}, 90 {tag:'li', cls:'selected', html:'english'},
94 {tag:'li', html:'italiano'}, 91 {tag:'li', html:'italiano'},
95 {tag:'li', html:'dutch'}, 92 {tag:'li', html:'dutch'},
96 {tag:'li', html:'french'}, 93 {tag:'li', html:'french'},
97 {tag:'li', html:'spanish'}, 94 {tag:'li', html:'spanish'},
98 {tag:'li', html:'chinese'}, 95 {tag:'li', html:'chinese'},
99 {tag:'li', html:'japanese'}, 96 {tag:'li', html:'japanese'},
100 {tag:'li', html:'portugal'}, 97 {tag:'li', html:'portugal'},
101 {tag:'li', html:'arabic'} 98 {tag:'li', html:'arabic'}
102 ]} 99 ]}
103 ]}, 100 ]},
104 101
105 {tag:'input', id:this.getId('submitButton'), type:'submit', value:'login', cls:'submit'} 102 {tag:'input', id:this.getId('submitButton'), type:'submit', value:'login', cls:'submit'}
106 ]} 103 ]}
107 ]} 104 ]}
108 ]} 105 ]}
109 ]}, 106 ]},
110 {tag:'div', cls:'footer'} 107 {tag:'div', cls:'footer'}
111 ]}); 108 ]});
112 109
113 if (this.autocomplete() == 'off') { 110 if (this.autocomplete() == 'off') {
114 MochiKit.DOM.updateNodeAttributes(this.getElement('form'), {autocomplete:'off'}); 111 MochiKit.DOM.updateNodeAttributes(this.getElement('form'), {autocomplete:'off'});
115 } 112 }
116 113
117 // Clipperz.Style.setBackgroundGradient(this.getElement('body'), {from:"#ff9955", to:"#ff6622"}) 114 // Clipperz.Style.setBackgroundGradient(this.getElement('body'), {from:"#ff9955", to:"#ff6622"})
118 115
119 // this.setEntropyDisplay(new Clipperz.PM.UI.Common.Components.PasswordEntropyDisplay(this.getElement('passphraseField'))); 116 // this.setEntropyDisplay(new Clipperz.PM.UI.Common.Components.PasswordEntropyDisplay(this.getElement('passphraseField')));
120 117
121 // MochiKit.Signal.connect(this.getId('otpCheckbox'), 'onclick', this, 'togglePasswordFields'); 118 // MochiKit.Signal.connect(this.getId('otpCheckbox'), 'onclick', this, 'togglePasswordFields');
122 // this.showPassphraseField(); 119 // this.showPassphraseField();
123 120
124 this.getElement('usernameField').focus(); 121 this.getElement('usernameField').focus();
125 122
126 MochiKit.Signal.connect(this.getElement('loginForm'), 'onsubmit', this, 'loginEventHandler'); 123 MochiKit.Signal.connect(this.getElement('loginForm'), 'onsubmit', this, 'loginEventHandler');
127 }, 124 },
128 125
129 //----------------------------------------------------------------------------- 126 //-----------------------------------------------------------------------------
130/* 127/*
131 'togglePasswordFields': function(anEvent) { 128 'togglePasswordFields': function(anEvent) {
132 var shouldUseOTP; 129 var shouldUseOTP;
133 130
134 shouldUseOTP = this.getElement('otpCheckbox').checked; 131 shouldUseOTP = this.getElement('otpCheckbox').checked;
135 132
136 if (shouldUseOTP == false) { 133 if (shouldUseOTP == false) {
137 this.showPassphraseField(); 134 this.showPassphraseField();
138 } else { 135 } else {
139 this.showOTPFields(); 136 this.showOTPFields();
140 } 137 }
141 }, 138 },
142*/ 139*/
143 //----------------------------------------------------------------------------- 140 //-----------------------------------------------------------------------------
144/* 141/*
145 'showPassphraseField': function() { 142 'showPassphraseField': function() {
146 this.showElement('passphraseOption'); 143 this.showElement('passphraseOption');
147 this.hideElement('otpOption'); 144 this.hideElement('otpOption');
148 }, 145 },
149*/ 146*/
150 //----------------------------------------------------------------------------- 147 //-----------------------------------------------------------------------------
151 148
152 'focusOnPassphraseField': function () { 149 'focusOnPassphraseField': function () {
153 this.getElement('passphraseField').focus(); 150 this.getElement('passphraseField').focus();
154 this.getElement('passphraseField').select(); 151 this.getElement('passphraseField').select();
155 }, 152 },
156 153
157 //----------------------------------------------------------------------------- 154 //-----------------------------------------------------------------------------
158/* 155/*
159 'showOTPFields': function() { 156 'showOTPFields': function() {
160 this.hideElement('passphraseOption'); 157 this.hideElement('passphraseOption');
161 this.showElement('otpOption'); 158 this.showElement('otpOption');
162 }, 159 },
163*/ 160*/
164 //------------------------------------------------------------------------- 161 //-------------------------------------------------------------------------
165 162
166 'loginEventHandler': function(anEvent) { 163 'loginEventHandler': function(anEvent) {
167 varusername; 164 varusername;
168 var passphrase; 165 var passphrase;
169 // var shouldUseOTP; 166 // var shouldUseOTP;
170 // var otp; 167 // var otp;
171 var signalArguments; 168 var signalArguments;
172 169
173 anEvent.preventDefault(); 170 anEvent.preventDefault();
174 171
175 username = this.getElement('usernameField').value; 172 username = this.getElement('usernameField').value;
176 passphrase = this.getElement('passphraseField').value; 173 passphrase = this.getElement('passphraseField').value;
177 // otp =this.getElement('otpField_1').value + 174 // otp =this.getElement('otpField_1').value +
178 // this.getElement('otpField_2').value + 175 // this.getElement('otpField_2').value +
179 // this.getElement('otpField_3').value + 176 // this.getElement('otpField_3').value +
180 // this.getElement('otpField_4').value; 177 // this.getElement('otpField_4').value;
181 // shouldUseOTP = this.getElement('otpCheckbox').checked; 178 // shouldUseOTP = this.getElement('otpCheckbox').checked;
182 179
183 signalArguments = {username:username}; 180 signalArguments = {username:username};
184 181
185 // if (shouldUseOTP) { 182 // if (shouldUseOTP) {
186 // signalArguments.otp = otp; 183 // signalArguments.otp = otp;
187 // } else { 184 // } else {
188 signalArguments.passphrase = passphrase; 185 signalArguments.passphrase = passphrase;
189 // } 186 // }
190 187
191 MochiKit.Signal.signal(this, 'doLogin', signalArguments); 188 MochiKit.Signal.signal(this, 'doLogin', signalArguments);
192 }, 189 },
193 190
194 //------------------------------------------------------------------------- 191 //-------------------------------------------------------------------------
195 192
196 'submitButtonElement': function() { 193 'submitButtonElement': function() {
197 return this.getElement('submitButton'); 194 return this.getElement('submitButton');
198 }, 195 },
199 196
200 //------------------------------------------------------------------------- 197 //-------------------------------------------------------------------------
201 198
202 __syntaxFix__: "syntax fix" 199 __syntaxFix__: "syntax fix"
203}); 200});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginPage.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginPage.js
index 49c030d..2894af8 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginPage.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginPage.js
@@ -1,206 +1,203 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.LoginPage = function(args) { 28Clipperz.PM.UI.Web.Components.LoginPage = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.LoginPage.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.LoginPage.superclass.constructor.apply(this, arguments);
35 32
36 this._slots = { 33 this._slots = {
37 'loginForm':this.getId('loginBoxSlot') 34 'loginForm':this.getId('loginBoxSlot')
38 }; 35 };
39 36
40 return this; 37 return this;
41} 38}
42 39
43//============================================================================= 40//=============================================================================
44 41
45Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LoginPage, Clipperz.PM.UI.Common.Components.BaseComponent, { 42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LoginPage, Clipperz.PM.UI.Common.Components.BaseComponent, {
46 43
47 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
48 45
49 'toString': function () { 46 'toString': function () {
50 return "Clipperz.PM.UI.Web.Components.LoginPage component"; 47 return "Clipperz.PM.UI.Web.Components.LoginPage component";
51 }, 48 },
52 49
53 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
54 51
55 'renderSelf': function(/*aContainer, aPosition*/) { 52 'renderSelf': function(/*aContainer, aPosition*/) {
56 this.append(this.element(), [ 53 this.append(this.element(), [
57 {tag:'div', id:this.getId('loginBoxSlot')}, 54 {tag:'div', id:this.getId('loginBoxSlot')},
58 {tag:'div', id:'main', children:[ 55 {tag:'div', id:'main', children:[
59 {tag:'div', id:'featurePoints', children:[ 56 {tag:'div', id:'featurePoints', children:[
60 {tag:'table', children:[ 57 {tag:'table', children:[
61 {tag:'tr', children:[ 58 {tag:'tr', children:[
62 {tag:'td', children:[ 59 {tag:'td', children:[
63 {tag:'div', cls:'block', children:[ 60 {tag:'div', cls:'block', children:[
64 {tag:'h3', html:'Clipperz is:'}, 61 {tag:'h3', html:'Clipperz is:'},
65 {tag:'ul', children:[ 62 {tag:'ul', children:[
66 {tag:'li', html:'a secure and simple password manager'}, 63 {tag:'li', html:'a secure and simple password manager'},
67 {tag:'li', html:'an effective single sign-on solution'}, 64 {tag:'li', html:'an effective single sign-on solution'},
68 {tag:'li', html:'a digital vault for your personal data'} 65 {tag:'li', html:'a digital vault for your personal data'}
69 ]} 66 ]}
70 ]}, 67 ]},
71 {tag:'div', cls:'block', children:[ 68 {tag:'div', cls:'block', children:[
72 {tag:'h3', html:'Clipperz benefits:'}, 69 {tag:'h3', html:'Clipperz benefits:'},
73 {tag:'ul', children:[ 70 {tag:'ul', children:[
74 {tag:'li', html:'free and completely anonymous'}, 71 {tag:'li', html:'free and completely anonymous'},
75 {tag:'li', html:'access it any time from any computer'}, 72 {tag:'li', html:'access it any time from any computer'},
76 {tag:'li', html:'no software to download and nothing to install'}, 73 {tag:'li', html:'no software to download and nothing to install'},
77 {tag:'li', html:'avoid keeping secrets on your PC or on paper'} 74 {tag:'li', html:'avoid keeping secrets on your PC or on paper'}
78 ]} 75 ]}
79 ]} 76 ]}
80 ]}, {tag:'td', children:[ 77 ]}, {tag:'td', children:[
81 {tag:'div', cls:'block', children:[ 78 {tag:'div', cls:'block', children:[
82 {tag:'h3', html:'Clipperz security:'}, 79 {tag:'h3', html:'Clipperz security:'},
83 {tag:'ul', children:[ 80 {tag:'ul', children:[
84 {tag:'li', html:'your secretes are locally encrypted by your browser before being uploaded to Clipperz'}, 81 {tag:'li', html:'your secretes are locally encrypted by your browser before being uploaded to Clipperz'},
85 {tag:'li', html:'the encryption key is a passphrase known only to you'}, 82 {tag:'li', html:'the encryption key is a passphrase known only to you'},
86 {tag:'li', html:'Clipperz hosts your sensitive data in an encrypted form and could never access the data in its plain form'}, 83 {tag:'li', html:'Clipperz hosts your sensitive data in an encrypted form and could never access the data in its plain form'},
87 {tag:'li', html:'Clipperz is built upon standard encryption schemes, nothing fancies of homemade'}, 84 {tag:'li', html:'Clipperz is built upon standard encryption schemes, nothing fancies of homemade'},
88 {tag:'li', html:'you can review the source code anytime you like, but you need to know nothing about cryptography to be an happy user!'} 85 {tag:'li', html:'you can review the source code anytime you like, but you need to know nothing about cryptography to be an happy user!'}
89 ]} 86 ]}
90 ]} 87 ]}
91 ]} 88 ]}
92 ]} 89 ]}
93 ]} 90 ]}
94 ]}, 91 ]},
95 {tag:'div', cls:'activeFeatures', children:[ 92 {tag:'div', cls:'activeFeatures', children:[
96 {tag:'div', id:this.getId('registerButton'), cls:'createAccountLink', children:[ 93 {tag:'div', id:this.getId('registerButton'), cls:'createAccountLink', children:[
97 {tag:'canvas', id:this.getId('registerButtonIcon')}, 94 {tag:'canvas', id:this.getId('registerButtonIcon')},
98 {tag:'a', href:'#', id:this.getId('createAccountLink'), cls:'createAccountLink', children:[ 95 {tag:'a', href:'#', id:this.getId('createAccountLink'), cls:'createAccountLink', children:[
99 {tag:'span', cls:'payoff', html:"Free sign up!"}, 96 {tag:'span', cls:'payoff', html:"Free sign up!"},
100 {tag:'span', cls:'link', html:"Create account >>"} 97 {tag:'span', cls:'link', html:"Create account >>"}
101 ]} 98 ]}
102 ]}, 99 ]},
103 {tag:'div', cls:'keepTogether', children:[ 100 {tag:'div', cls:'keepTogether', children:[
104 {tag:'div', id:this.getId('screenshotLink'), cls:'screenshotLink', children:[ 101 {tag:'div', id:this.getId('screenshotLink'), cls:'screenshotLink', children:[
105 {tag:'canvas', id:this.getId('lookIcon')}, 102 {tag:'canvas', id:this.getId('lookIcon')},
106 {tag:'a', href:'#', cls:'screenshotLink', children:[ 103 {tag:'a', href:'#', cls:'screenshotLink', children:[
107 {tag:'span', cls:'payoff', html:"Look Clipperz!"}, 104 {tag:'span', cls:'payoff', html:"Look Clipperz!"},
108 {tag:'span', cls:'link', html:"screenshot tour >>"} 105 {tag:'span', cls:'link', html:"screenshot tour >>"}
109 ]} 106 ]}
110 ]}, 107 ]},
111 {tag:'div', id:this.getId('offlineLink'), cls:'offlineLink', children:[ 108 {tag:'div', id:this.getId('offlineLink'), cls:'offlineLink', children:[
112 {tag:'canvas', id:this.getId('downloadIcon')}, 109 {tag:'canvas', id:this.getId('downloadIcon')},
113 {tag:'a', href:'#', cls:'offlineLink', children:[ 110 {tag:'a', href:'#', cls:'offlineLink', children:[
114 {tag:'span', cls:'payoff', html:"Download!"}, 111 {tag:'span', cls:'payoff', html:"Download!"},
115 {tag:'span', cls:'link', html:"Offline version >>"} 112 {tag:'span', cls:'link', html:"Offline version >>"}
116 ]} 113 ]}
117 ]} 114 ]}
118 ]} 115 ]}
119 ]} 116 ]}
120 ]} 117 ]}
121 ]); 118 ]);
122 119
123 this.setRegistrationButtonIconDefaultColors(); 120 this.setRegistrationButtonIconDefaultColors();
124 this.setLookIconDefaultColors(); 121 this.setLookIconDefaultColors();
125 this.setDownloadIconDefaultColors(); 122 this.setDownloadIconDefaultColors();
126 123
127 // MochiKit.Signal.connect(this.getElement('createAccountLink'), 'onclick', this, 'handleCreateAccountLink') 124 // MochiKit.Signal.connect(this.getElement('createAccountLink'), 'onclick', this, 'handleCreateAccountLink')
128 125
129 MochiKit.Signal.connect(this.getElement('registerButton'), 'onmouseenter', this, 'handleMouseEnterOnRegisterButtonIcon'); 126 MochiKit.Signal.connect(this.getElement('registerButton'), 'onmouseenter', this, 'handleMouseEnterOnRegisterButtonIcon');
130 MochiKit.Signal.connect(this.getElement('registerButton'), 'onmouseleave', this, 'handleMouseLeaveOnRegisterButtonIcon'); 127 MochiKit.Signal.connect(this.getElement('registerButton'), 'onmouseleave', this, 'handleMouseLeaveOnRegisterButtonIcon');
131 128
132 MochiKit.Signal.connect(this.getElement('screenshotLink'), 'onmouseenter', this, 'handleMouseEnterOnLookIcon'); 129 MochiKit.Signal.connect(this.getElement('screenshotLink'), 'onmouseenter', this, 'handleMouseEnterOnLookIcon');
133 MochiKit.Signal.connect(this.getElement('screenshotLink'), 'onmouseleave', this, 'handleMouseLeaveOnLookIcon'); 130 MochiKit.Signal.connect(this.getElement('screenshotLink'), 'onmouseleave', this, 'handleMouseLeaveOnLookIcon');
134 131
135 MochiKit.Signal.connect(this.getElement('offlineLink'), 'onmouseenter', this, 'handleMouseEnterOnDownloadIcon'); 132 MochiKit.Signal.connect(this.getElement('offlineLink'), 'onmouseenter', this, 'handleMouseEnterOnDownloadIcon');
136 MochiKit.Signal.connect(this.getElement('offlineLink'), 'onmouseleave', this, 'handleMouseLeaveOnDownloadIcon'); 133 MochiKit.Signal.connect(this.getElement('offlineLink'), 'onmouseleave', this, 'handleMouseLeaveOnDownloadIcon');
137 134
138 MochiKit.Signal.connect(this.getElement('createAccountLink'), 'onclick', this, 'handleCreateAccountLink') 135 MochiKit.Signal.connect(this.getElement('createAccountLink'), 'onclick', this, 'handleCreateAccountLink')
139 }, 136 },
140 137
141 //------------------------------------------------------------------------- 138 //-------------------------------------------------------------------------
142 139
143 'setRegistrationButtonIconDefaultColors': function () { 140 'setRegistrationButtonIconDefaultColors': function () {
144 Clipperz.PM.UI.Canvas.registerButton.normal(this.getElement('registerButtonIcon'), "#eeeeee", "#eeeeee", "#ecab12", "#e14624", "#ffffff"); 141 Clipperz.PM.UI.Canvas.registerButton.normal(this.getElement('registerButtonIcon'), "#eeeeee", "#eeeeee", "#ecab12", "#e14624", "#ffffff");
145 }, 142 },
146 143
147 'setRegistrationButtonIconHoverColors': function () { 144 'setRegistrationButtonIconHoverColors': function () {
148 Clipperz.PM.UI.Canvas.registerButton.normal(this.getElement('registerButtonIcon'), "#cccccc", "#999999", "#ffb710", "#ff4d27", "#ffffff"); 145 Clipperz.PM.UI.Canvas.registerButton.normal(this.getElement('registerButtonIcon'), "#cccccc", "#999999", "#ffb710", "#ff4d27", "#ffffff");
149 }, 146 },
150 147
151 'handleMouseEnterOnRegisterButtonIcon': function (anEvent) { 148 'handleMouseEnterOnRegisterButtonIcon': function (anEvent) {
152 this.setRegistrationButtonIconHoverColors(); 149 this.setRegistrationButtonIconHoverColors();
153 }, 150 },
154 151
155 'handleMouseLeaveOnRegisterButtonIcon': function (anEvent) { 152 'handleMouseLeaveOnRegisterButtonIcon': function (anEvent) {
156 this.setRegistrationButtonIconDefaultColors(); 153 this.setRegistrationButtonIconDefaultColors();
157 }, 154 },
158 155
159 //------------------------------------------------------------------------- 156 //-------------------------------------------------------------------------
160 157
161 'setLookIconDefaultColors': function () { 158 'setLookIconDefaultColors': function () {
162 Clipperz.PM.UI.Canvas.coverActions.look(this.getElement('lookIcon'), "#7e7e7e", "#ffffff", 1); 159 Clipperz.PM.UI.Canvas.coverActions.look(this.getElement('lookIcon'), "#7e7e7e", "#ffffff", 1);
163 }, 160 },
164 161
165 'setLookIconHoverColors': function () { 162 'setLookIconHoverColors': function () {
166 Clipperz.PM.UI.Canvas.coverActions.look(this.getElement('lookIcon'), "#666666", "#ffffff", 2); 163 Clipperz.PM.UI.Canvas.coverActions.look(this.getElement('lookIcon'), "#666666", "#ffffff", 2);
167 }, 164 },
168 165
169 'handleMouseEnterOnLookIcon': function (anEvent) { 166 'handleMouseEnterOnLookIcon': function (anEvent) {
170 this.setLookIconHoverColors(); 167 this.setLookIconHoverColors();
171 }, 168 },
172 169
173 'handleMouseLeaveOnLookIcon': function (anEvent) { 170 'handleMouseLeaveOnLookIcon': function (anEvent) {
174 this.setLookIconDefaultColors(); 171 this.setLookIconDefaultColors();
175 }, 172 },
176 173
177 //------------------------------------------------------------------------- 174 //-------------------------------------------------------------------------
178 175
179 'setDownloadIconDefaultColors': function () { 176 'setDownloadIconDefaultColors': function () {
180 Clipperz.PM.UI.Canvas.coverActions.download(this.getElement('downloadIcon'), "#7e7e7e", "#ffffff", 1); 177 Clipperz.PM.UI.Canvas.coverActions.download(this.getElement('downloadIcon'), "#7e7e7e", "#ffffff", 1);
181 }, 178 },
182 179
183 'setDownloadIconHoverColors': function () { 180 'setDownloadIconHoverColors': function () {
184 Clipperz.PM.UI.Canvas.coverActions.download(this.getElement('downloadIcon'), "#666666", "#ffffff", 2); 181 Clipperz.PM.UI.Canvas.coverActions.download(this.getElement('downloadIcon'), "#666666", "#ffffff", 2);
185 }, 182 },
186 183
187 'handleMouseEnterOnDownloadIcon': function (anEvent) { 184 'handleMouseEnterOnDownloadIcon': function (anEvent) {
188 this.setDownloadIconHoverColors(); 185 this.setDownloadIconHoverColors();
189 }, 186 },
190 187
191 'handleMouseLeaveOnDownloadIcon': function (anEvent) { 188 'handleMouseLeaveOnDownloadIcon': function (anEvent) {
192 this.setDownloadIconDefaultColors(); 189 this.setDownloadIconDefaultColors();
193 }, 190 },
194 191
195 //------------------------------------------------------------------------- 192 //-------------------------------------------------------------------------
196 193
197 'handleCreateAccountLink': function (anEvent) { 194 'handleCreateAccountLink': function (anEvent) {
198 anEvent.preventDefault(); 195 anEvent.preventDefault();
199 196
200 MochiKit.Signal.signal(this, 'createNewAccountClick', anEvent.src()); 197 MochiKit.Signal.signal(this, 'createNewAccountClick', anEvent.src());
201 }, 198 },
202 199
203 //------------------------------------------------------------------------- 200 //-------------------------------------------------------------------------
204 201
205 __syntaxFix__: "syntax fix" 202 __syntaxFix__: "syntax fix"
206}); 203});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js
index 03c7b9e..5d082b5 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js
@@ -1,155 +1,152 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.LoginProgress = function(args) { 28Clipperz.PM.UI.Web.Components.LoginProgress = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.LoginProgress.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.LoginProgress.superclass.constructor.apply(this, arguments);
35 32
36 this._deferred = null; 33 this._deferred = null;
37 34
38 return this; 35 return this;
39} 36}
40 37
41//============================================================================= 38//=============================================================================
42 39
43Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LoginProgress, Clipperz.PM.UI.Common.Components.BaseComponent, { 40Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LoginProgress, Clipperz.PM.UI.Common.Components.BaseComponent, {
44 41
45 //------------------------------------------------------------------------- 42 //-------------------------------------------------------------------------
46 43
47 'toString': function () { 44 'toString': function () {
48 return "Clipperz.PM.UI.Web.Components.LoginProgress component"; 45 return "Clipperz.PM.UI.Web.Components.LoginProgress component";
49 }, 46 },
50 47
51 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
52 49
53 'deferred': function() { 50 'deferred': function() {
54 return this._deferred; 51 return this._deferred;
55 }, 52 },
56 53
57 'setDeferred': function(aValue) { 54 'setDeferred': function(aValue) {
58 this._deferred = aValue; 55 this._deferred = aValue;
59 }, 56 },
60 57
61 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
62 59
63 'renderSelf': function() { 60 'renderSelf': function() {
64 // var loginProgressElement; 61 // var loginProgressElement;
65 // 62 //
66 // loginProgressElement = MochiKit.DOM.getElement('loginProgress'); 63 // loginProgressElement = MochiKit.DOM.getElement('loginProgress');
67 // 64 //
68 // if (loginProgressElement == null) { 65 // if (loginProgressElement == null) {
69 // loginProgressElement = this.append(this.element(), {tag:'div', id:'loginProgress', cls:'LoginProgress'}, true); 66 // loginProgressElement = this.append(this.element(), {tag:'div', id:'loginProgress', cls:'LoginProgress'}, true);
70 // } 67 // }
71 68
72//console.log(">> LoginProgress.renderSelf", this.element()); 69//console.log(">> LoginProgress.renderSelf", this.element());
73 this.append(this.element(), {tag:'div', id:'loginProgress', cls:'LoginProgress', children: [ 70 this.append(this.element(), {tag:'div', id:'loginProgress', cls:'LoginProgress', children: [
74 // this.append(loginProgressElement, [ 71 // this.append(loginProgressElement, [
75 {tag:'div', cls:'header', children:[ 72 {tag:'div', cls:'header', children:[
76 {tag:'h3', id:this.getId('title'), html:"login progress"} 73 {tag:'h3', id:this.getId('title'), html:"login progress"}
77 ]}, 74 ]},
78 {tag:'div', cls:'body', children:[ 75 {tag:'div', cls:'body', children:[
79 {tag:'div', id:this.getId('progressBar')}, 76 {tag:'div', id:this.getId('progressBar')},
80 {tag:'div', id:this.getId('errorBox'), cls:'errorBox', children:[ 77 {tag:'div', id:this.getId('errorBox'), cls:'errorBox', children:[
81 // {tag:'div',cls:'img ALERT', children:[{tag:'div'}]}, 78 // {tag:'div',cls:'img ALERT', children:[{tag:'div'}]},
82 {tag:'div',cls:'img ALERT', children:[{tag:'canvas', id:this.getId('canvas')}]}, 79 {tag:'div',cls:'img ALERT', children:[{tag:'canvas', id:this.getId('canvas')}]},
83 {tag:'p', html:"Login failed"} 80 {tag:'p', html:"Login failed"}
84 ]} 81 ]}
85 ]}, 82 ]},
86 {tag:'div', cls:'footer', children:[ 83 {tag:'div', cls:'footer', children:[
87 {tag:'div', cls:'buttonArea', id:this.getId('buttonArea'), children:[ 84 {tag:'div', cls:'buttonArea', id:this.getId('buttonArea'), children:[
88 {tag:'div', cls:'button', id:this.getId('button'), children:[ 85 {tag:'div', cls:'button', id:this.getId('button'), children:[
89 {tag:'a', href:'#', id:this.getId('buttonLink'), html:"cancel"} 86 {tag:'a', href:'#', id:this.getId('buttonLink'), html:"cancel"}
90 ]} 87 ]}
91 ]} 88 ]}
92 ]} 89 ]}
93 ]}); 90 ]});
94 // ]); 91 // ]);
95 92
96 Clipperz.PM.UI.Canvas.marks['!'](this.getElement('canvas'), "#ffffff"); 93 Clipperz.PM.UI.Canvas.marks['!'](this.getElement('canvas'), "#ffffff");
97 94
98 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); 95 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')}));
99 MochiKit.Style.hideElement(this.getElement('errorBox')); 96 MochiKit.Style.hideElement(this.getElement('errorBox'));
100 97
101 MochiKit.Signal.connect(this.getId('buttonLink'), 'onclick', this, 'cancelEventHandler'); 98 MochiKit.Signal.connect(this.getId('buttonLink'), 'onclick', this, 'cancelEventHandler');
102 }, 99 },
103 100
104 //------------------------------------------------------------------------- 101 //-------------------------------------------------------------------------
105 102
106 'displayElement': function() { 103 'displayElement': function() {
107 return MochiKit.DOM.getElement('loginProgress'); 104 return MochiKit.DOM.getElement('loginProgress');
108 }, 105 },
109 106
110 //------------------------------------------------------------------------- 107 //-------------------------------------------------------------------------
111 108
112 'cancelEventHandler': function(anEvent) { 109 'cancelEventHandler': function(anEvent) {
113 anEvent.preventDefault(); 110 anEvent.preventDefault();
114 111
115 MochiKit.Signal.signal(this, 'cancelEvent'); 112 MochiKit.Signal.signal(this, 'cancelEvent');
116 }, 113 },
117 114
118 //------------------------------------------------------------------------- 115 //-------------------------------------------------------------------------
119 116
120 'disableCancel': function() { 117 'disableCancel': function() {
121 MochiKit.Style.hideElement(this.getElement('buttonArea')); 118 MochiKit.Style.hideElement(this.getElement('buttonArea'));
122 }, 119 },
123 120
124 //------------------------------------------------------------------------- 121 //-------------------------------------------------------------------------
125 122
126 'showErrorMessage': function() { 123 'showErrorMessage': function() {
127 this.getElement('buttonLink').innerHTML = "close"; 124 this.getElement('buttonLink').innerHTML = "close";
128 125
129 MochiKit.Style.hideElement(this.getElement('progressBar')); 126 MochiKit.Style.hideElement(this.getElement('progressBar'));
130 127
131 this.getElement('title').innerHTML = "Error"; 128 this.getElement('title').innerHTML = "Error";
132 MochiKit.Style.showElement(this.getElement('errorBox')); 129 MochiKit.Style.showElement(this.getElement('errorBox'));
133 MochiKit.Style.showElement(this.getElement('buttonArea')); 130 MochiKit.Style.showElement(this.getElement('buttonArea'));
134 }, 131 },
135 132
136 //------------------------------------------------------------------------- 133 //-------------------------------------------------------------------------
137 134
138 'deferredHideModalAndRemove': function(someParameters, aResult) { 135 'deferredHideModalAndRemove': function(someParameters, aResult) {
139 vardeferredResult; 136 vardeferredResult;
140 137
141 deferredResult = new Clipperz.Async.Deferred("LoginProgress.deferredHideModalAndRemove", {trace:false}); 138 deferredResult = new Clipperz.Async.Deferred("LoginProgress.deferredHideModalAndRemove", {trace:false});
142 deferredResult.addMethod(this, 'deferredHideModal'); 139 deferredResult.addMethod(this, 'deferredHideModal');
143 deferredResult.addMethod(this, 'remove'); 140 deferredResult.addMethod(this, 'remove');
144 deferredResult.addCallback(function () { 141 deferredResult.addCallback(function () {
145 return aResult; 142 return aResult;
146 }); 143 });
147 deferredResult.callback(someParameters); 144 deferredResult.callback(someParameters);
148 145
149 return deferredResult; 146 return deferredResult;
150 }, 147 },
151 148
152 //------------------------------------------------------------------------- 149 //-------------------------------------------------------------------------
153 150
154 __syntaxFix__: "syntax fix" 151 __syntaxFix__: "syntax fix"
155}); 152});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/NewUserCreationComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/NewUserCreationComponent.js
index b40d1f3..feb16ad 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/NewUserCreationComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/NewUserCreationComponent.js
@@ -1,408 +1,405 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.NewUserCreationComponent = function(args) { 28Clipperz.PM.UI.Web.Components.NewUserCreationComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.NewUserCreationComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.NewUserCreationComponent.superclass.constructor.apply(this, arguments);
35 32
36 this._tabPanelController = null; 33 this._tabPanelController = null;
37 34
38 this._initiallySelectedTab = args.selected || 'CREDENTIALS'; 35 this._initiallySelectedTab = args.selected || 'CREDENTIALS';
39 this._tabPanelControllerConfiguration = { 36 this._tabPanelControllerConfiguration = {
40 'CREDENTIALS': { 37 'CREDENTIALS': {
41 tab:'credentialsTab', 38 tab:'credentialsTab',
42 panel:'credentialsTabpanel' 39 panel:'credentialsTabpanel'
43 }, 40 },
44 'CHECK_CREDENTIALS': { 41 'CHECK_CREDENTIALS': {
45 tab:'checkCredentialsTab', 42 tab:'checkCredentialsTab',
46 panel:'checkCredentialsTabpanel' 43 panel:'checkCredentialsTabpanel'
47 }, 44 },
48 'TERMS_OF_SERVICE': { 45 'TERMS_OF_SERVICE': {
49 tab:'termsOfServiceTab', 46 tab:'termsOfServiceTab',
50 panel:'termsOfServiceTabpanel' 47 panel:'termsOfServiceTabpanel'
51 }, 48 },
52 'CREATE_USER': { 49 'CREATE_USER': {
53 tab:'createUserTab', 50 tab:'createUserTab',
54 panel:'createUserTabpanel' 51 panel:'createUserTabpanel'
55 }//, 52 }//,
56/* 53/*
57 'LOGIN': { 54 'LOGIN': {
58 tab:'loginTab', 55 tab:'loginTab',
59 panel:'loginTabpanel' 56 panel:'loginTabpanel'
60 } 57 }
61*/ 58*/
62 }; 59 };
63 60
64 return this; 61 return this;
65} 62}
66 63
67//============================================================================= 64//=============================================================================
68 65
69Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.NewUserCreationComponent, Clipperz.PM.UI.Common.Components.TabPanelComponent, { 66Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.NewUserCreationComponent, Clipperz.PM.UI.Common.Components.TabPanelComponent, {
70 67
71 //------------------------------------------------------------------------- 68 //-------------------------------------------------------------------------
72 69
73 'toString': function () { 70 'toString': function () {
74 return "Clipperz.PM.UI.Web.Components.NewUserCreationComponent component"; 71 return "Clipperz.PM.UI.Web.Components.NewUserCreationComponent component";
75 }, 72 },
76 73
77 //========================================================================= 74 //=========================================================================
78 75
79 'disableAllPanels': function () { 76 'disableAllPanels': function () {
80 this.tabPanelController().selectTab(null); 77 this.tabPanelController().selectTab(null);
81 }, 78 },
82 79
83 //------------------------------------------------------------------------- 80 //-------------------------------------------------------------------------
84 81
85 'enableCredentialsPanel': function () { 82 'enableCredentialsPanel': function () {
86 this.tabPanelController().selectTab('CREDENTIALS'); 83 this.tabPanelController().selectTab('CREDENTIALS');
87 }, 84 },
88 85
89 'enableCheckCredentialsPanel': function () { 86 'enableCheckCredentialsPanel': function () {
90 this.tabPanelController().selectTab('CHECK_CREDENTIALS'); 87 this.tabPanelController().selectTab('CHECK_CREDENTIALS');
91 }, 88 },
92 89
93 'enableTermsOfServicePanel': function () { 90 'enableTermsOfServicePanel': function () {
94 this.tabPanelController().selectTab('TERMS_OF_SERVICE'); 91 this.tabPanelController().selectTab('TERMS_OF_SERVICE');
95 }, 92 },
96 93
97 'enableCreateUserPanel': function () { 94 'enableCreateUserPanel': function () {
98 this.tabPanelController().selectTab('CREATE_USER'); 95 this.tabPanelController().selectTab('CREATE_USER');
99 }, 96 },
100 97
101 //'enableLoginPanel': function () { 98 //'enableLoginPanel': function () {
102 // this.tabPanelController().selectTab('LOGIN'); 99 // this.tabPanelController().selectTab('LOGIN');
103 //}, 100 //},
104 101
105 //========================================================================= 102 //=========================================================================
106 103
107 'shouldShowElementWhileRendering': function() { 104 'shouldShowElementWhileRendering': function() {
108 return false; 105 return false;
109 }, 106 },
110 107
111 //========================================================================= 108 //=========================================================================
112 109
113 'tabPanelController': function () { 110 'tabPanelController': function () {
114 if (this._tabPanelController == null) { 111 if (this._tabPanelController == null) {
115 this._tabPanelController = new Clipperz.PM.UI.Common.Controllers.TabPanelController({ 112 this._tabPanelController = new Clipperz.PM.UI.Common.Controllers.TabPanelController({
116 component:this, 113 component:this,
117 configuration:this._tabPanelControllerConfiguration 114 configuration:this._tabPanelControllerConfiguration
118 }); 115 });
119 116
120 MochiKit.Signal.connect(this._tabPanelController, 'tabSelected', this, 'handleTabSelected') 117 MochiKit.Signal.connect(this._tabPanelController, 'tabSelected', this, 'handleTabSelected')
121 } 118 }
122 119
123 return this._tabPanelController; 120 return this._tabPanelController;
124 }, 121 },
125 122
126 //------------------------------------------------------------------------- 123 //-------------------------------------------------------------------------
127 124
128 'renderSelf': function() { 125 'renderSelf': function() {
129//console.log('** Clipperz.targetModalDimensionsAndPosition', Clipperz.Base.serializeJSON(Clipperz.PM.UI.Common.Components.BaseComponent.targetModalDimensionsAndPosition)); 126//console.log('** Clipperz.targetModalDimensionsAndPosition', Clipperz.Base.serializeJSON(Clipperz.PM.UI.Common.Components.BaseComponent.targetModalDimensionsAndPosition));
130 127
131 this.append(this.element(), {tag:'div', cls:'NewUserCreation mainDialog', id:this.getId('panel'), children: [ 128 this.append(this.element(), {tag:'div', cls:'NewUserCreation mainDialog', id:this.getId('panel'), children: [
132 {tag:'form', id:this.getId('form'), cls:'newUserCreationForm', children:[ 129 {tag:'form', id:this.getId('form'), cls:'newUserCreationForm', children:[
133 {tag:'div', cls:'header', children:[ 130 {tag:'div', cls:'header', children:[
134 {tag:'div', cls:'title', children:[ 131 {tag:'div', cls:'title', children:[
135 {tag:'h3', id:this.getId('title'), html:"Create new user"} 132 {tag:'h3', id:this.getId('title'), html:"Create new user"}
136 ]} 133 ]}
137 ]}, 134 ]},
138 {tag:'div', id:this.getId('body'), cls:'body', children:[ 135 {tag:'div', id:this.getId('body'), cls:'body', children:[
139 {tag:'div', cls:'tabContainer', children:[ 136 {tag:'div', cls:'tabContainer', children:[
140 {tag:'ul', cls:'tabs', children:[ 137 {tag:'ul', cls:'tabs', children:[
141 {tag:'li', id:this.getId('credentialsTab'), children:[{tag:'span', html:"credentials"}]}, 138 {tag:'li', id:this.getId('credentialsTab'), children:[{tag:'span', html:"credentials"}]},
142 {tag:'li', id:this.getId('checkCredentialsTab'),children:[{tag:'span', html:"credentials check"}]}, 139 {tag:'li', id:this.getId('checkCredentialsTab'),children:[{tag:'span', html:"credentials check"}]},
143 {tag:'li', id:this.getId('termsOfServiceTab'), children:[{tag:'span', html:"terms of service"}]}, 140 {tag:'li', id:this.getId('termsOfServiceTab'), children:[{tag:'span', html:"terms of service"}]},
144 {tag:'li', id:this.getId('createUserTab'), children:[{tag:'span', html:"create user"}]}//, 141 {tag:'li', id:this.getId('createUserTab'), children:[{tag:'span', html:"create user"}]}//,
145 // {tag:'li', id:this.getId('loginTab'), children:[{tag:'span', html:"login"}]}, 142 // {tag:'li', id:this.getId('loginTab'), children:[{tag:'span', html:"login"}]},
146 ]}, 143 ]},
147 {tag:'ul', cls:'tabPanels', children:[ 144 {tag:'ul', cls:'tabPanels', children:[
148 {tag:'li', id:this.getId('credentialsTabpanel'), cls:'tabPanel credentials', children:[ 145 {tag:'li', id:this.getId('credentialsTabpanel'), cls:'tabPanel credentials', children:[
149 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.NewUserWizard.CREDENTIALS.description')}]}, 146 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.NewUserWizard.CREDENTIALS.description')}]},
150 {tag:'ul', cls:'credentials', children:[ 147 {tag:'ul', cls:'credentials', children:[
151 {tag:'li', children:[{tag:'span', cls:'label', html:"username"},{tag:'input', type:'text', id:this.getId('username')/*, value:'test'*/}]}, 148 {tag:'li', children:[{tag:'span', cls:'label', html:"username"},{tag:'input', type:'text', id:this.getId('username')/*, value:'test'*/}]},
152 {tag:'li', children:[{tag:'span', cls:'label', html:"passphrase"},{tag:'input', type:'password', id:this.getId('passphrase')/*, value:'test'*/}]} 149 {tag:'li', children:[{tag:'span', cls:'label', html:"passphrase"},{tag:'input', type:'password', id:this.getId('passphrase')/*, value:'test'*/}]}
153 ]} 150 ]}
154 ]}, 151 ]},
155 {tag:'li', id:this.getId('checkCredentialsTabpanel'), cls:'tabPanel checkCredentials', children:[ 152 {tag:'li', id:this.getId('checkCredentialsTabpanel'), cls:'tabPanel checkCredentials', children:[
156 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.NewUserWizard.CHECK_CREDENTIALS.description')}]}, 153 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.NewUserWizard.CHECK_CREDENTIALS.description')}]},
157 {tag:'ul', cls:'credentials', children:[ 154 {tag:'ul', cls:'credentials', children:[
158 {tag:'li', children:[{tag:'span', cls:'label', html:"re-passphrase"},{tag:'input', type:'password', id:this.getId('re-passphrase')/*, value:'test'*/}]} 155 {tag:'li', children:[{tag:'span', cls:'label', html:"re-passphrase"},{tag:'input', type:'password', id:this.getId('re-passphrase')/*, value:'test'*/}]}
159 ]} 156 ]}
160 ]}, 157 ]},
161 {tag:'li', id:this.getId('termsOfServiceTabpanel'), cls:'tabPanel termsOfService', children:[ 158 {tag:'li', id:this.getId('termsOfServiceTabpanel'), cls:'tabPanel termsOfService', children:[
162 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.NewUserWizard.TERMS_OF_SERVICE.description')}]}, 159 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.NewUserWizard.TERMS_OF_SERVICE.description')}]},
163 {tag:'ul', cls:'termsOfService', children:[ 160 {tag:'ul', cls:'termsOfService', children:[
164 {tag:'li', children:[{tag:'input', type:'checkbox', id:this.getId('awareOfUnrecoverablePassphrase')/*, checked:true*/}, {tag:'label', cls:'label', 'for':this.getId('awareOfUnrecoverablePassphrase'), html:"I understand that Clipperz will not be able to recover a lost passphrase."}]}, 161 {tag:'li', children:[{tag:'input', type:'checkbox', id:this.getId('awareOfUnrecoverablePassphrase')/*, checked:true*/}, {tag:'label', cls:'label', 'for':this.getId('awareOfUnrecoverablePassphrase'), html:"I understand that Clipperz will not be able to recover a lost passphrase."}]},
165 {tag:'li', children:[{tag:'input', type:'checkbox', id:this.getId('readTermsOfService')/*, checked:true*/}, {tag:'label', cls:'label', 'for':this.getId('readTermsOfService'), htmlString:"I have read and agreed to the <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Terms of Service</a>."}]} 162 {tag:'li', children:[{tag:'input', type:'checkbox', id:this.getId('readTermsOfService')/*, checked:true*/}, {tag:'label', cls:'label', 'for':this.getId('readTermsOfService'), htmlString:"I have read and agreed to the <a href='http://www.clipperz.com/terms_of_service' target='_blank'>Terms of Service</a>."}]}
166 ]} 163 ]}
167 ]}, 164 ]},
168 {tag:'li', id:this.getId('createUserTabpanel'), cls:'tabPanel createUser', children:[ 165 {tag:'li', id:this.getId('createUserTabpanel'), cls:'tabPanel createUser', children:[
169 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.NewUserWizard.CREATE_USER.description')}]}, 166 {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.NewUserWizard.CREATE_USER.description')}]},
170 {tag:'ul', cls:'createUserStates', children:[ 167 {tag:'ul', cls:'createUserStates', children:[
171 {tag:'li', cls:'creating', id:this.getId('creatingRegistering'), children:[{tag:'span', html:"registering user"}]}, 168 {tag:'li', cls:'creating', id:this.getId('creatingRegistering'), children:[{tag:'span', html:"registering user"}]},
172 {tag:'li', cls:'done', id:this.getId('creatingDone'), children:[{tag:'span', html:"done"}]}, 169 {tag:'li', cls:'done', id:this.getId('creatingDone'), children:[{tag:'span', html:"done"}]},
173 {tag:'li', cls:'fail', id:this.getId('creatingFailed'), children:[{tag:'span', html:"fail"}]} 170 {tag:'li', cls:'fail', id:this.getId('creatingFailed'), children:[{tag:'span', html:"fail"}]}
174 ]} 171 ]}
175 ]}//, 172 ]}//,
176 // {tag:'li', id:this.getId('loginTabpanel'), cls:'tabPanel login', children:[ 173 // {tag:'li', id:this.getId('loginTabpanel'), cls:'tabPanel login', children:[
177 // {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.NewUserWizard.LOGIN.description')}]}, 174 // {tag:'div', cls:'wizardStepDescription', children:[{tag:'span', html:Clipperz.PM.Strings.getValue('Wizards.NewUserWizard.LOGIN.description')}]},
178 // ]} 175 // ]}
179 ]} 176 ]}
180 ]} 177 ]}
181 ]}, 178 ]},
182 {tag:'div', id:this.getId('footer'), cls:'footer', children:[ 179 {tag:'div', id:this.getId('footer'), cls:'footer', children:[
183 {tag:'div', cls:'buttonArea', children:[ 180 {tag:'div', cls:'buttonArea', children:[
184 // {tag:'div', cls:'cancel', id:this.getId('cancelButton'), html:"cancel"}, 181 // {tag:'div', cls:'cancel', id:this.getId('cancelButton'), html:"cancel"},
185 // {tag:'div', cls:'save disabled', id:this.getId('saveButton'), html:"save"} 182 // {tag:'div', cls:'save disabled', id:this.getId('saveButton'), html:"save"}
186 ]} 183 ]}
187 ]} 184 ]}
188 ]}, 185 ]},
189 {tag:'div', cls:'clear'} 186 {tag:'div', cls:'clear'}
190 ]}); 187 ]});
191 188
192 this.tabPanelController().setup(); 189 this.tabPanelController().setup();
193 // MochiKit.Signal.connect(this.getId('panel'), 'onkeydown', this, 'handleKeyEvent'); 190 // MochiKit.Signal.connect(this.getId('panel'), 'onkeydown', this, 'handleKeyEvent');
194 MochiKit.Signal.connect(MochiKit.DOM.currentDocument().body, 'onkeydown', this, 'handleKeyEvent'); 191 MochiKit.Signal.connect(MochiKit.DOM.currentDocument().body, 'onkeydown', this, 'handleKeyEvent');
195 MochiKit.Signal.connect(this.getId('awareOfUnrecoverablePassphrase'), 'onchange', this, 'handleTermsOfServiceCheckboxChange'); 192 MochiKit.Signal.connect(this.getId('awareOfUnrecoverablePassphrase'), 'onchange', this, 'handleTermsOfServiceCheckboxChange');
196 MochiKit.Signal.connect(this.getId('readTermsOfService'), 'onchange', this, 'handleTermsOfServiceCheckboxChange'); 193 MochiKit.Signal.connect(this.getId('readTermsOfService'), 'onchange', this, 'handleTermsOfServiceCheckboxChange');
197 }, 194 },
198 195
199 //------------------------------------------------------------------------- 196 //-------------------------------------------------------------------------
200/* 197/*
201 'resetContent': function () { 198 'resetContent': function () {
202 this.getElement('username').value = ''; 199 this.getElement('username').value = '';
203 this.getElement('passphrase').value = ''; 200 this.getElement('passphrase').value = '';
204 }, 201 },
205*/ 202*/
206 //------------------------------------------------------------------------- 203 //-------------------------------------------------------------------------
207 204
208 'displayElement': function() { 205 'displayElement': function() {
209 return this.getElement('panel'); 206 return this.getElement('panel');
210 }, 207 },
211 208
212 //------------------------------------------------------------------------- 209 //-------------------------------------------------------------------------
213 210
214 'handleTabSelected': function (aSelectedTab) { 211 'handleTabSelected': function (aSelectedTab) {
215/* 212/*
216 switch (aSelectedTab) { 213 switch (aSelectedTab) {
217 case 'DETAILS': 214 case 'DETAILS':
218 break; 215 break;
219 case 'DIRECT_LOGINS': 216 case 'DIRECT_LOGINS':
220 MochiKit.Style.hideElement(this.getElement('backToDirectLoginList')); 217 MochiKit.Style.hideElement(this.getElement('backToDirectLoginList'));
221 break; 218 break;
222 case 'SHARING': 219 case 'SHARING':
223 break; 220 break;
224 } 221 }
225*/ 222*/
226 }, 223 },
227 224
228 //========================================================================= 225 //=========================================================================
229 226
230 'username': function () { 227 'username': function () {
231 return this.getElement('username').value; 228 return this.getElement('username').value;
232 }, 229 },
233 230
234 'usernameElement': function () { 231 'usernameElement': function () {
235 return this.getElement('username'); 232 return this.getElement('username');
236 }, 233 },
237 234
238 'passphrase': function () { 235 'passphrase': function () {
239 return this.getElement('passphrase').value; 236 return this.getElement('passphrase').value;
240 }, 237 },
241 238
242 'rePassphrase': function () { 239 'rePassphrase': function () {
243 return this.getElement('re-passphrase').value; 240 return this.getElement('re-passphrase').value;
244 }, 241 },
245 242
246 'awareOfUnrecoverablePassphrase': function () { 243 'awareOfUnrecoverablePassphrase': function () {
247 return this.getElement('awareOfUnrecoverablePassphrase').value; 244 return this.getElement('awareOfUnrecoverablePassphrase').value;
248 }, 245 },
249 246
250 'readTermsOfService': function () { 247 'readTermsOfService': function () {
251 return this.getElement('readTermsOfService').value; 248 return this.getElement('readTermsOfService').value;
252 }, 249 },
253 250
254 //========================================================================= 251 //=========================================================================
255/* 252/*
256 'incrementUpdateFaviconCounter': function () { 253 'incrementUpdateFaviconCounter': function () {
257 this._updateFaviconCounter ++; 254 this._updateFaviconCounter ++;
258 }, 255 },
259 256
260 'decrementUpdateFaviconCounter': function () { 257 'decrementUpdateFaviconCounter': function () {
261 this._updateFaviconCounter --; 258 this._updateFaviconCounter --;
262 }, 259 },
263 260
264 'updateFaviconCounter': function () { 261 'updateFaviconCounter': function () {
265 return this._updateFaviconCounter; 262 return this._updateFaviconCounter;
266 }, 263 },
267 */ 264 */
268 //------------------------------------------------------------------------- 265 //-------------------------------------------------------------------------
269/* 266/*
270 'updateFavicon': function () { 267 'updateFavicon': function () {
271 this.decrementUpdateFaviconCounter(); 268 this.decrementUpdateFaviconCounter();
272 269
273 if (this.updateFaviconCounter() == 0) { 270 if (this.updateFaviconCounter() == 0) {
274 this.setFavicon(this.favicon()); 271 this.setFavicon(this.favicon());
275 } 272 }
276 }, 273 },
277*/ 274*/
278 //========================================================================= 275 //=========================================================================
279/* 276/*
280 'bindingComponents': function () { 277 'bindingComponents': function () {
281 return this._bindingComponents; 278 return this._bindingComponents;
282 }, 279 },
283 280
284 'clearAllBindingsComponents': function () { 281 'clearAllBindingsComponents': function () {
285 MochiKit.Iter.forEach(this.bindingComponents(), MochiKit.Base.methodcaller('remove')); 282 MochiKit.Iter.forEach(this.bindingComponents(), MochiKit.Base.methodcaller('remove'));
286 this._bindingComponents = []; 283 this._bindingComponents = [];
287 this.getElement('bindings').innerHTML = ''; 284 this.getElement('bindings').innerHTML = '';
288 }, 285 },
289 286
290 'addBindingComponent': function (aBindingComponent) { 287 'addBindingComponent': function (aBindingComponent) {
291 this.bindingComponents().push(aBindingComponent); 288 this.bindingComponents().push(aBindingComponent);
292 aBindingComponent.renderInNode(this.append(this.getElement('bindings'), {tag:'div'})); 289 aBindingComponent.renderInNode(this.append(this.getElement('bindings'), {tag:'div'}));
293 }, 290 },
294*/ 291*/
295 //========================================================================= 292 //=========================================================================
296/* 293/*
297 'formValueComponents': function () { 294 'formValueComponents': function () {
298 return this._formValueComponents; 295 return this._formValueComponents;
299 }, 296 },
300 297
301 'clearAllFormValueComponents': function () { 298 'clearAllFormValueComponents': function () {
302 MochiKit.Iter.forEach(this.formValueComponents(), MochiKit.Base.methodcaller('remove')); 299 MochiKit.Iter.forEach(this.formValueComponents(), MochiKit.Base.methodcaller('remove'));
303 this._formValueComponents = []; 300 this._formValueComponents = [];
304 this.getElement('formValues').innerHTML = ''; 301 this.getElement('formValues').innerHTML = '';
305 }, 302 },
306 303
307 'addFormValueComponent': function (aFormValueComponent) { 304 'addFormValueComponent': function (aFormValueComponent) {
308 this.formValueComponents().push(aFormValueComponent); 305 this.formValueComponents().push(aFormValueComponent);
309 aFormValueComponent.renderInNode(this.append(this.getElement('formValues'), {tag:'div'})); 306 aFormValueComponent.renderInNode(this.append(this.getElement('formValues'), {tag:'div'}));
310 }, 307 },
311*/ 308*/
312 //========================================================================= 309 //=========================================================================
313 310
314 'changedValue': function (anEvent) { 311 'changedValue': function (anEvent) {
315 MochiKit.Signal.signal(this, 'changedValue', anEvent); 312 MochiKit.Signal.signal(this, 'changedValue', anEvent);
316 313
317 this.incrementUpdateFaviconCounter(); 314 this.incrementUpdateFaviconCounter();
318 MochiKit.Async.callLater(1, MochiKit.Base.method(this, 'updateFavicon')); 315 MochiKit.Async.callLater(1, MochiKit.Base.method(this, 'updateFavicon'));
319 }, 316 },
320 317
321 //------------------------------------------------------------------------- 318 //-------------------------------------------------------------------------
322 319
323 'handleBackClick': function (anEvent) { 320 'handleBackClick': function (anEvent) {
324 anEvent.preventDefault(); 321 anEvent.preventDefault();
325 322
326 MochiKit.Signal.signal(this, 'back'); 323 MochiKit.Signal.signal(this, 'back');
327 }, 324 },
328 325
329 //========================================================================= 326 //=========================================================================
330 327
331 'bottomMargin': function () { 328 'bottomMargin': function () {
332 var result; 329 var result;
333 330
334 //TODO: WTF!!! 331 //TODO: WTF!!!
335 // result =MochiKit.Style.getElementPosition(this.element())['y'] + 332 // result =MochiKit.Style.getElementPosition(this.element())['y'] +
336 // MochiKit.Style.getElementDimensions(this.element())['h']; 333 // MochiKit.Style.getElementDimensions(this.element())['h'];
337 334
338 // result =MochiKit.Style.getElementPosition(this.getElement('footer'))['y']; 335 // result =MochiKit.Style.getElementPosition(this.getElement('footer'))['y'];
339//console.log("### bottomMargin"); 336//console.log("### bottomMargin");
340//console.log('displayElement', this.displayElement()); 337//console.log('displayElement', this.displayElement());
341//console.log('-- Clipperz.targetModalDimensionsAndPosition', Clipperz.Base.serializeJSON(Clipperz.PM.UI.Common.Components.BaseComponent.targetModalDimensionsAndPosition)); 338//console.log('-- Clipperz.targetModalDimensionsAndPosition', Clipperz.Base.serializeJSON(Clipperz.PM.UI.Common.Components.BaseComponent.targetModalDimensionsAndPosition));
342//console.log('element', MochiKit.Style.getElementPosition('modalDialog') ['y'], MochiKit.Style.getElementDimensions('modalDialog')['h']); 339//console.log('element', MochiKit.Style.getElementPosition('modalDialog') ['y'], MochiKit.Style.getElementDimensions('modalDialog')['h']);
343 // result = 450; 340 // result = 450;
344 341
345 result =Clipperz.PM.UI.Common.Components.BaseComponent.targetModalDimensionsAndPosition['position']['y'] + 342 result =Clipperz.PM.UI.Common.Components.BaseComponent.targetModalDimensionsAndPosition['position']['y'] +
346 Clipperz.PM.UI.Common.Components.BaseComponent.targetModalDimensionsAndPosition['dimensions']['h'] - 343 Clipperz.PM.UI.Common.Components.BaseComponent.targetModalDimensionsAndPosition['dimensions']['h'] -
347 60; 344 60;
348 345
349 return result; 346 return result;
350 }, 347 },
351 348
352 //========================================================================= 349 //=========================================================================
353 350
354 'focusOnUsernameElement': function () { 351 'focusOnUsernameElement': function () {
355 MochiKit.Async.callLater(0.1, MochiKit.Base.method(this.getElement('username'), 'focus')); 352 MochiKit.Async.callLater(0.1, MochiKit.Base.method(this.getElement('username'), 'focus'));
356 }, 353 },
357 354
358 'focusOnRePassphraseElement': function () { 355 'focusOnRePassphraseElement': function () {
359 this.getElement('re-passphrase').focus(); 356 this.getElement('re-passphrase').focus();
360 }, 357 },
361 /* 358 /*
362 'focusOnBookmarkletConfigurationElement': function () { 359 'focusOnBookmarkletConfigurationElement': function () {
363 this.getElement('bookmarkletConfiguration').focus(); 360 this.getElement('bookmarkletConfiguration').focus();
364 }, 361 },
365 362
366 'focusOnFaviconElement': function () { 363 'focusOnFaviconElement': function () {
367 this.getElement('faviconURL').focus(); 364 this.getElement('faviconURL').focus();
368 }, 365 },
369*/ 366*/
370 367
371 //========================================================================= 368 //=========================================================================
372 369
373 'hideAllProgeressStates': function () { 370 'hideAllProgeressStates': function () {
374 MochiKit.Style.hideElement(this.getElement('creatingRegistering')); 371 MochiKit.Style.hideElement(this.getElement('creatingRegistering'));
375 MochiKit.Style.hideElement(this.getElement('creatingDone')); 372 MochiKit.Style.hideElement(this.getElement('creatingDone'));
376 MochiKit.Style.hideElement(this.getElement('creatingFailed')); 373 MochiKit.Style.hideElement(this.getElement('creatingFailed'));
377 }, 374 },
378 375
379 'showProgressOnUserCreation': function () { 376 'showProgressOnUserCreation': function () {
380//Clipperz.log(">>> NewUserCreationComponent.showProgressOnUserCreation"); 377//Clipperz.log(">>> NewUserCreationComponent.showProgressOnUserCreation");
381 this.hideAllProgeressStates(); 378 this.hideAllProgeressStates();
382 MochiKit.Style.showElement(this.getElement('creatingRegistering')); 379 MochiKit.Style.showElement(this.getElement('creatingRegistering'));
383 }, 380 },
384 381
385 'showUserCreationDone': function () { 382 'showUserCreationDone': function () {
386//Clipperz.log(">>> NewUserCreationComponent.showUserCreationDone"); 383//Clipperz.log(">>> NewUserCreationComponent.showUserCreationDone");
387 this.hideAllProgeressStates(); 384 this.hideAllProgeressStates();
388 MochiKit.Style.showElement(this.getElement('creatingDone')); 385 MochiKit.Style.showElement(this.getElement('creatingDone'));
389//Clipperz.log("<<< NewUserCreationComponent.showUserCreationDone"); 386//Clipperz.log("<<< NewUserCreationComponent.showUserCreationDone");
390 }, 387 },
391 388
392 'showUserCreationFailed': function () { 389 'showUserCreationFailed': function () {
393//Clipperz.log(">>> NewUserCreationComponent.showUserCreationFailed"); 390//Clipperz.log(">>> NewUserCreationComponent.showUserCreationFailed");
394 this.hideAllProgeressStates(); 391 this.hideAllProgeressStates();
395 MochiKit.Style.showElement(this.getElement('creatingFailed')); 392 MochiKit.Style.showElement(this.getElement('creatingFailed'));
396 }, 393 },
397 394
398 //========================================================================= 395 //=========================================================================
399 396
400 'handleKeyEvent': function (anEvent) { 397 'handleKeyEvent': function (anEvent) {
401 MochiKit.Signal.signal(this, 'keyPressed', anEvent); 398 MochiKit.Signal.signal(this, 'keyPressed', anEvent);
402/* 399/*
403 if (anEvent.key().string == 'KEY_ENTER') { 400 if (anEvent.key().string == 'KEY_ENTER') {
404 if (anEvent.target().nodeName != 'TEXTAREA') { 401 if (anEvent.target().nodeName != 'TEXTAREA') {
405 MochiKit.Signal.signal(this, 'moveForward'); 402 MochiKit.Signal.signal(this, 'moveForward');
406 anEvent.preventDefault(); 403 anEvent.preventDefault();
407 } 404 }
408 } else if (anEvent.key().string == 'KEY_TAB') { 405 } else if (anEvent.key().string == 'KEY_TAB') {
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/Page.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/Page.js
index bed6675..3cc5a37 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/Page.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/Page.js
@@ -1,71 +1,68 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.Page = function(args) { 28Clipperz.PM.UI.Web.Components.Page = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.Page.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.Page.superclass.constructor.apply(this, arguments);
35 32
36 this._slots = { 33 this._slots = {
37 'header':'pageHeader', 34 'header':'pageHeader',
38 'body': 'pageBody', 35 'body': 'pageBody',
39 'footer':'pageFooter' 36 'footer':'pageFooter'
40 }; 37 };
41 38
42 return this; 39 return this;
43} 40}
44 41
45//============================================================================= 42//=============================================================================
46 43
47Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.Page, Clipperz.PM.UI.Common.Components.BaseComponent, { 44Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.Page, Clipperz.PM.UI.Common.Components.BaseComponent, {
48 45
49 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
50 47
51 'toString': function () { 48 'toString': function () {
52 return "Clipperz.PM.UI.Web.Components.Page component"; 49 return "Clipperz.PM.UI.Web.Components.Page component";
53 }, 50 },
54 51
55 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
56 53
57 'renderSelf': function(/*aContainer, aPosition*/) { 54 'renderSelf': function(/*aContainer, aPosition*/) {
58 this.append(this.element(), [ 55 this.append(this.element(), [
59 {tag:'div', id:'pageHeaderAndBody', cls:'pageHeaderAndBody', children:[ 56 {tag:'div', id:'pageHeaderAndBody', cls:'pageHeaderAndBody', children:[
60 {tag:'div', id:'pageHeader', cls:'pageHeader'}, 57 {tag:'div', id:'pageHeader', cls:'pageHeader'},
61 {tag:'div', id:'pageBody', cls:'pageBody'} 58 {tag:'div', id:'pageBody', cls:'pageBody'}
62 ]}, 59 ]},
63 {tag:'div', id:'pageFooter', cls:'pageFooter'} 60 {tag:'div', id:'pageFooter', cls:'pageFooter'}
64 ]); 61 ]);
65 62
66 }, 63 },
67 64
68 //------------------------------------------------------------------------- 65 //-------------------------------------------------------------------------
69 66
70 __syntaxFix__: "syntax fix" 67 __syntaxFix__: "syntax fix"
71}); 68});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageFooter.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageFooter.js
index 11135d8..5e8cd7f 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageFooter.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageFooter.js
@@ -1,71 +1,68 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.PageFooter = function(args) { 28Clipperz.PM.UI.Web.Components.PageFooter = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.PageFooter.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.PageFooter.superclass.constructor.apply(this, arguments);
35 32
36 return this; 33 return this;
37} 34}
38 35
39//============================================================================= 36//=============================================================================
40 37
41Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.PageFooter, Clipperz.PM.UI.Common.Components.BaseComponent, { 38Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.PageFooter, Clipperz.PM.UI.Common.Components.BaseComponent, {
42 39
43 //------------------------------------------------------------------------- 40 //-------------------------------------------------------------------------
44 41
45 'toString': function () { 42 'toString': function () {
46 return "Clipperz.PM.UI.Web.Components.PageFooter component"; 43 return "Clipperz.PM.UI.Web.Components.PageFooter component";
47 }, 44 },
48 45
49 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
50 47
51 'renderSelf': function(/*aContainer, aPosition*/) { 48 'renderSelf': function(/*aContainer, aPosition*/) {
52 this.append(this.element(), [ 49 this.append(this.element(), [
53 {tag:'div', cls:'footerWrapper', children:[ 50 {tag:'div', cls:'footerWrapper', children:[
54 {tag:'div', cls:'footerContent', children:[ 51 {tag:'div', cls:'footerContent', children:[
55 // {tag:'div', cls:'footerStarIcon'}, 52 // {tag:'div', cls:'footerStarIcon'},
56 {tag:'canvas', id:this.getId('footerStarIcon'), cls:'footerStarIcon'}, 53 {tag:'canvas', id:this.getId('footerStarIcon'), cls:'footerStarIcon'},
57 {tag:'span', cls:'copyright', html:'Copyright &copy; 2009 Clipperz Srl'}, 54 {tag:'span', cls:'copyright', html:'Copyright &copy; 2009 Clipperz Srl'},
58 {tag:'a', href:'http://www.clipperz.com/terms_of_service',target:'_blank', html:'terms of service'}, 55 {tag:'a', href:'http://www.clipperz.com/terms_of_service',target:'_blank', html:'terms of service'},
59 {tag:'a', href:'http://www.clipperz.com/privacy_policy',target:'_blank', html:'privacy policy'}, 56 {tag:'a', href:'http://www.clipperz.com/privacy_policy',target:'_blank', html:'privacy policy'},
60 {tag:'span', cls:'applicationVersion', html:'application version: [1992]'} 57 {tag:'span', cls:'applicationVersion', html:'application version: [1992]'}
61 ]} 58 ]}
62 ]} 59 ]}
63 ]); 60 ]);
64 61
65 Clipperz.PM.UI.Canvas.star.normal(this.getElement('footerStarIcon'), "#7e7e7e"); 62 Clipperz.PM.UI.Canvas.star.normal(this.getElement('footerStarIcon'), "#7e7e7e");
66 }, 63 },
67 64
68 //------------------------------------------------------------------------- 65 //-------------------------------------------------------------------------
69 66
70 __syntaxFix__: "syntax fix" 67 __syntaxFix__: "syntax fix"
71}); 68});
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 3924434..bce8395 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageHeader.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PageHeader.js
@@ -1,184 +1,181 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.PageHeader = function(args) { 28Clipperz.PM.UI.Web.Components.PageHeader = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.PageHeader.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.PageHeader.superclass.constructor.apply(this, arguments);
35 this._newsIsOpen = args.newsIsOpen || false; 32 this._newsIsOpen = args.newsIsOpen || false;
36 this._animationDuration = args.animationDuration || 0.5; 33 this._animationDuration = args.animationDuration || 0.5;
37 34
38 this._offset = 82; 35 this._offset = 82;
39 36
40 return this; 37 return this;
41} 38}
42 39
43//============================================================================= 40//=============================================================================
44 41
45Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.PageHeader, Clipperz.PM.UI.Common.Components.BaseComponent, { 42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.PageHeader, Clipperz.PM.UI.Common.Components.BaseComponent, {
46 43
47 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
48 45
49 'toString': function () { 46 'toString': function () {
50 return "Clipperz.PM.UI.Web.Components.PageHeader component"; 47 return "Clipperz.PM.UI.Web.Components.PageHeader component";
51 }, 48 },
52 49
53 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
54 51
55 'iframeURL': function () { 52 'iframeURL': function () {
56 // return './rss_view.html'; 53 // return './rss_view.html';
57 return 'http://www.clipperz.com/files/clipperz.com/appTips/index.html'; 54 return 'http://www.clipperz.com/files/clipperz.com/appTips/index.html';
58 }, 55 },
59 56
60 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
61 58
62 'renderSelf': function(/*aContainer, aPosition*/) { 59 'renderSelf': function(/*aContainer, aPosition*/) {
63 this.append(this.element(), [ 60 this.append(this.element(), [
64 {tag:'div', id:'miscLinks', children:[ 61 {tag:'div', id:'miscLinks', children:[
65 {tag:'ul', children:[ 62 {tag:'ul', children:[
66 {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')}]}, 63 {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')}]},
67 {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')}]}, 64 {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')}]},
68 {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')}]}, 65 {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')}]},
69 {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')}]}, 66 {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')}]},
70 {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')}]} 67 {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')}]}
71 ]} 68 ]}
72 ]}, 69 ]},
73 {tag:'div', id:'logoFrame', children:[ 70 {tag:'div', id:'logoFrame', children:[
74 {tag:'a', href:'http://www.clipperz.com', target:'_blank', children:[{tag:'div', id:'logo'}]}, 71 {tag:'a', href:'http://www.clipperz.com', target:'_blank', children:[{tag:'div', id:'logo'}]},
75 {tag:'h5', cls:'clipperzPayoff', html:'keep it to yourself!'} 72 {tag:'h5', cls:'clipperzPayoff', html:'keep it to yourself!'}
76 ]}, 73 ]},
77 {tag:'div', id:'news', cls:'hidden', children:[ 74 {tag:'div', id:'news', cls:'hidden', children:[
78 // {tag:'div', cls:'close', children:[ 75 // {tag:'div', cls:'close', children:[
79 // {tag:'a', href:'#', id:this.getId('closeTips'), html:'x'} 76 // {tag:'a', href:'#', id:this.getId('closeTips'), html:'x'}
80 // ]}, 77 // ]},
81 {tag:'div', id:'newsframe', children:[ 78 {tag:'div', id:'newsframe', children:[
82 {tag:'iframe', id:this.getId('iframe'), src:this.iframeURL()} 79 {tag:'iframe', id:this.getId('iframe'), src:this.iframeURL()}
83 ]}, 80 ]},
84 {tag:'div', id:this.getId('newsGrip'), cls:'grip', children:[]} 81 {tag:'div', id:this.getId('newsGrip'), cls:'grip', children:[]}
85 ]}, 82 ]},
86 {tag:'div', id:'featureTabs', children:[ 83 {tag:'div', id:'featureTabs', children:[
87 {tag:'table', children:[{tag:'tr', children:[ 84 {tag:'table', children:[{tag:'tr', children:[
88 {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"}]}]}, 85 {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"}]}]},
89 {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"}]}]}, 86 {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"}]}]},
90 {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"}]}]}, 87 {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"}]}]},
91 {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"}]}]} 88 {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"}]}]}
92 ]}]} 89 ]}]}
93 ]} 90 ]}
94 ]); 91 ]);
95 92
96 Clipperz.PM.UI.Canvas.features.store(this.getElement('storeIcon'), "#ffffff"); 93 Clipperz.PM.UI.Canvas.features.store(this.getElement('storeIcon'), "#ffffff");
97 Clipperz.PM.UI.Canvas.features.protect(this.getElement('protectIcon'), "#ffffff"); 94 Clipperz.PM.UI.Canvas.features.protect(this.getElement('protectIcon'), "#ffffff");
98 Clipperz.PM.UI.Canvas.features.directLogin(this.getElement('directLoginIcon'), "#ffffff"); 95 Clipperz.PM.UI.Canvas.features.directLogin(this.getElement('directLoginIcon'), "#ffffff");
99 Clipperz.PM.UI.Canvas.features.share(this.getElement('shareIcon'), "#ffffff", "#ffffff", "#ff0000"); 96 Clipperz.PM.UI.Canvas.features.share(this.getElement('shareIcon'), "#ffffff", "#ffffff", "#ff0000");
100 97
101 MochiKit.Signal.connect(this.getElement('newsGrip'), 'onclick', this, 'toggleTips'); 98 MochiKit.Signal.connect(this.getElement('newsGrip'), 'onclick', this, 'toggleTips');
102 MochiKit.Signal.connect(this.getElement('iframe'), 'onload', this, 'handleIframeDidLoad'); 99 MochiKit.Signal.connect(this.getElement('iframe'), 'onload', this, 'handleIframeDidLoad');
103 }, 100 },
104 101
105 //------------------------------------------------------------------------- 102 //-------------------------------------------------------------------------
106 103
107 'switchToLoggedMode': function() { 104 'switchToLoggedMode': function() {
108 // MochiKit.Style.addElementClass(this.element(), 'logged'); 105 // MochiKit.Style.addElementClass(this.element(), 'logged');
109 MochiKit.Style.hideElement('featureTabs'); 106 MochiKit.Style.hideElement('featureTabs');
110 }, 107 },
111 108
112 //------------------------------------------------------------------------- 109 //-------------------------------------------------------------------------
113 110
114 'animationDuration': function () { 111 'animationDuration': function () {
115 return this._animationDuration; 112 return this._animationDuration;
116 }, 113 },
117 114
118 'offset': function () { 115 'offset': function () {
119 return this._offset; 116 return this._offset;
120 }, 117 },
121 118
122 //------------------------------------------------------------------------- 119 //-------------------------------------------------------------------------
123 120
124 'isNewsOpen': function () { 121 'isNewsOpen': function () {
125 return this._newsIsOpen; 122 return this._newsIsOpen;
126 }, 123 },
127 124
128 'toggleNewsIsOpen': function () { 125 'toggleNewsIsOpen': function () {
129 this._newsIsOpen = !this._newsIsOpen; 126 this._newsIsOpen = !this._newsIsOpen;
130 }, 127 },
131 128
132 'toggleTips': function(anEvent) { 129 'toggleTips': function(anEvent) {
133 anEvent.preventDefault(); 130 anEvent.preventDefault();
134 131
135 if (this.isNewsOpen() == true) { 132 if (this.isNewsOpen() == true) {
136 MochiKit.Visual.Move(Clipperz.DOM.get('news'), { 133 MochiKit.Visual.Move(Clipperz.DOM.get('news'), {
137 x: 0, 134 x: 0,
138 y: -this.offset(), 135 y: -this.offset(),
139 mode: 'relative', 136 mode: 'relative',
140 duration: this.animationDuration(), 137 duration: this.animationDuration(),
141 beforeStart: function () { 138 beforeStart: function () {
142 MochiKit.DOM.setElementClass(Clipperz.DOM.get('news'), 'hiding'); 139 MochiKit.DOM.setElementClass(Clipperz.DOM.get('news'), 'hiding');
143 }, 140 },
144 afterFinish: function () { 141 afterFinish: function () {
145 Clipperz.DOM.get('newsframe').innerHTML = ""; 142 Clipperz.DOM.get('newsframe').innerHTML = "";
146 MochiKit.DOM.setElementClass(Clipperz.DOM.get('news'), 'hidden'); 143 MochiKit.DOM.setElementClass(Clipperz.DOM.get('news'), 'hidden');
147 } 144 }
148 }) 145 })
149 this.toggleNewsIsOpen(); 146 this.toggleNewsIsOpen();
150 } else { 147 } else {
151 MochiKit.DOM.addElementClass('newsframe', 'loading'); 148 MochiKit.DOM.addElementClass('newsframe', 'loading');
152 MochiKit.Visual.Move(Clipperz.DOM.get('news'), { 149 MochiKit.Visual.Move(Clipperz.DOM.get('news'), {
153 x: 0, 150 x: 0,
154 y: this.offset(), 151 y: this.offset(),
155 mode: 'relative', 152 mode: 'relative',
156 duration: this.animationDuration(), 153 duration: this.animationDuration(),
157 beforeStart: MochiKit.Base.bind(function () { 154 beforeStart: MochiKit.Base.bind(function () {
158 this.append(Clipperz.DOM.get('newsframe'), {tag:'iframe', id:this.getId('iframe'), src:this.iframeURL()}); 155 this.append(Clipperz.DOM.get('newsframe'), {tag:'iframe', id:this.getId('iframe'), src:this.iframeURL()});
159 156
160 MochiKit.Signal.connect(this.getElement('iframe'), 'onload', this, 'handleIframeDidLoad'); 157 MochiKit.Signal.connect(this.getElement('iframe'), 'onload', this, 'handleIframeDidLoad');
161 MochiKit.DOM.setElementClass(Clipperz.DOM.get('news'), 'opening'); 158 MochiKit.DOM.setElementClass(Clipperz.DOM.get('news'), 'opening');
162 }, this), 159 }, this),
163 afterFinish: function () { 160 afterFinish: function () {
164 MochiKit.DOM.setElementClass(Clipperz.DOM.get('news'), 'open'); 161 MochiKit.DOM.setElementClass(Clipperz.DOM.get('news'), 'open');
165 } 162 }
166 }) 163 })
167 this.toggleNewsIsOpen(); 164 this.toggleNewsIsOpen();
168 } 165 }
169 }, 166 },
170 167
171 //------------------------------------------------------------------------- 168 //-------------------------------------------------------------------------
172 169
173 'handleIframeDidLoad': function (anEvent) { 170 'handleIframeDidLoad': function (anEvent) {
174 if (this.isNewsOpen() == false) { 171 if (this.isNewsOpen() == false) {
175 this.toggleTips(anEvent); 172 this.toggleTips(anEvent);
176 } 173 }
177 174
178 MochiKit.DOM.removeElementClass('newsframe', 'loading'); 175 MochiKit.DOM.removeElementClass('newsframe', 'loading');
179 MochiKit.Signal.disconnectAllTo(this.getElement('iframe')); 176 MochiKit.Signal.disconnectAllTo(this.getElement('iframe'));
180 }, 177 },
181 178
182 //------------------------------------------------------------------------- 179 //-------------------------------------------------------------------------
183 __syntaxFix__: "syntax fix" 180 __syntaxFix__: "syntax fix"
184}); 181});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PasswordTooltip.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PasswordTooltip.js
index 79c8d4f..987e51e 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PasswordTooltip.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/PasswordTooltip.js
@@ -1,164 +1,161 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Common.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Common.Components');
30 27
31Clipperz.PM.UI.Web.Components.PasswordTooltip = function(args) { 28Clipperz.PM.UI.Web.Components.PasswordTooltip = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.PasswordTooltip.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.PasswordTooltip.superclass.constructor.apply(this, arguments);
35 32
36 this._referenceElement = args.referenceElement|| Clipperz.Base.exception.raise('MandatoryParameter'); 33 this._referenceElement = args.referenceElement|| Clipperz.Base.exception.raise('MandatoryParameter');
37 this._text = args.text || Clipperz.Base.exception.raise('MandatoryParameter'); 34 this._text = args.text || Clipperz.Base.exception.raise('MandatoryParameter');
38 35
39 this._boxDimensions = null; 36 this._boxDimensions = null;
40 this._isVisible = false; 37 this._isVisible = false;
41 38
42 this.renderSelf(); 39 this.renderSelf();
43 40
44 return this; 41 return this;
45} 42}
46 43
47//============================================================================= 44//=============================================================================
48 45
49Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.PasswordTooltip, Clipperz.PM.UI.Common.Components.BaseComponent, { 46Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.PasswordTooltip, Clipperz.PM.UI.Common.Components.BaseComponent, {
50 47
51 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
52 49
53 'toString': function () { 50 'toString': function () {
54 return "Clipperz.PM.UI.Web.Components.PasswordTooltip component"; 51 return "Clipperz.PM.UI.Web.Components.PasswordTooltip component";
55 }, 52 },
56 53
57 //------------------------------------------------------------------------- 54 //-------------------------------------------------------------------------
58 55
59 'referenceElement': function () { 56 'referenceElement': function () {
60 return this._referenceElement; 57 return this._referenceElement;
61 }, 58 },
62 59
63 //------------------------------------------------------------------------- 60 //-------------------------------------------------------------------------
64 61
65 'text': function () { 62 'text': function () {
66 return this._text; 63 return this._text;
67 }, 64 },
68 65
69 'setText': function (aValue) { 66 'setText': function (aValue) {
70 this._text = aValue; 67 this._text = aValue;
71 }, 68 },
72 69
73 //------------------------------------------------------------------------- 70 //-------------------------------------------------------------------------
74 71
75 'isVisible': function () { 72 'isVisible': function () {
76 return this._isVisible; 73 return this._isVisible;
77 }, 74 },
78 75
79 'setIsVisible': function (aValue) { 76 'setIsVisible': function (aValue) {
80 this._isVisible = aValue; 77 this._isVisible = aValue;
81 }, 78 },
82 79
83 //------------------------------------------------------------------------- 80 //-------------------------------------------------------------------------
84 81
85 'renderSelf': function() { 82 'renderSelf': function() {
86 this.append(MochiKit.DOM.getElement('Clipperz_PM_UI_Common_Components_Tooltip_wrapperNode'), {tag:'div', id:this.getId('tooltip'), cls:'passwordTooltip', children:[ 83 this.append(MochiKit.DOM.getElement('Clipperz_PM_UI_Common_Components_Tooltip_wrapperNode'), {tag:'div', id:this.getId('tooltip'), cls:'passwordTooltip', children:[
87 {tag:'div', id:this.getId('body'), cls:'passwordTooltip_body', children:[ 84 {tag:'div', id:this.getId('body'), cls:'passwordTooltip_body', children:[
88 {tag:'div', cls:'passwordTooltip_text', children:[ 85 {tag:'div', cls:'passwordTooltip_text', children:[
89 {tag:'span', html:this.text()} 86 {tag:'span', html:this.text()}
90 ]}, 87 ]},
91 {tag:'div', id:this.getId('footer'), cls:'passwordTooltip_footer'} 88 {tag:'div', id:this.getId('footer'), cls:'passwordTooltip_footer'}
92 ]}, 89 ]},
93 {tag:'div', id:this.getId('arrow'), cls:'passwordTooltip_arrow'} 90 {tag:'div', id:this.getId('arrow'), cls:'passwordTooltip_arrow'}
94 ]}); 91 ]});
95 92
96 this._boxDimensions = MochiKit.Style.getElementDimensions(this.getId('body')); 93 this._boxDimensions = MochiKit.Style.getElementDimensions(this.getId('body'));
97 // this._boxDimensions.h += MochiKit.Style.getElementDimensions(this.getId('footer')).h; 94 // this._boxDimensions.h += MochiKit.Style.getElementDimensions(this.getId('footer')).h;
98 95
99 MochiKit.Style.hideElement(this.displayElement()); 96 MochiKit.Style.hideElement(this.displayElement());
100 MochiKit.Signal.connect(this.element(), 'onmouseenter', this, 'show'); 97 MochiKit.Signal.connect(this.element(), 'onmouseenter', this, 'show');
101 MochiKit.Signal.connect(this.element(), 'onmouseleave', this, 'hide'); 98 MochiKit.Signal.connect(this.element(), 'onmouseleave', this, 'hide');
102 }, 99 },
103 100
104 //----------------------------------------------------- 101 //-----------------------------------------------------
105 102
106 'displayElement': function() { 103 'displayElement': function() {
107 return this.getElement('tooltip'); 104 return this.getElement('tooltip');
108 }, 105 },
109 106
110 //------------------------------------------------------------------------- 107 //-------------------------------------------------------------------------
111 108
112 'boxDimensions': function () { 109 'boxDimensions': function () {
113 return this._boxDimensions; 110 return this._boxDimensions;
114 }, 111 },
115 112
116 //------------------------------------------------------------------------- 113 //-------------------------------------------------------------------------
117 114
118 'show': function () { 115 'show': function () {
119 var elementSizeAndPosition; 116 var elementSizeAndPosition;
120 var arrowPosition; 117 var arrowPosition;
121 var bodyPosition; 118 var bodyPosition;
122 119
123 if (this.isVisible() == false) { 120 if (this.isVisible() == false) {
124 arrowPosition = {}; 121 arrowPosition = {};
125 bodyPosition = {}; 122 bodyPosition = {};
126 123
127 this.setIsVisible(true); 124 this.setIsVisible(true);
128 elementSizeAndPosition = Clipperz.Style.getSizeAndPosition(this.element()); 125 elementSizeAndPosition = Clipperz.Style.getSizeAndPosition(this.element());
129 126
130 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px'); 127 MochiKit.Style.setElementDimensions(this.getId('arrow'), {w:36, h:13}, 'px');
131 bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2); 128 bodyPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - this.boxDimensions().w/2);
132 bodyPosition.y = elementSizeAndPosition.position.y - this.boxDimensions().h - 13; 129 bodyPosition.y = elementSizeAndPosition.position.y - this.boxDimensions().h - 13;
133 130
134 arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2); 131 arrowPosition.x = elementSizeAndPosition.position.x + (elementSizeAndPosition.dimensions.w/2 - 36/2);
135 arrowPosition.y = elementSizeAndPosition.position.y - 13; 132 arrowPosition.y = elementSizeAndPosition.position.y - 13;
136 133
137 MochiKit.Style.setElementPosition(this.getId('body'), bodyPosition); 134 MochiKit.Style.setElementPosition(this.getId('body'), bodyPosition);
138 MochiKit.Style.setElementPosition(this.getId('arrow'), arrowPosition); 135 MochiKit.Style.setElementPosition(this.getId('arrow'), arrowPosition);
139 MochiKit.Visual.appear(this.displayElement(), {duration:0.4}); 136 MochiKit.Visual.appear(this.displayElement(), {duration:0.4});
140 } 137 }
141 }, 138 },
142 139
143 'hide': function () { 140 'hide': function () {
144 if (this.isVisible() == true) { 141 if (this.isVisible() == true) {
145 MochiKit.Visual.fade(this.displayElement(), {duration:0.4}); 142 MochiKit.Visual.fade(this.displayElement(), {duration:0.4});
146 this.setIsVisible(false); 143 this.setIsVisible(false);
147 } 144 }
148 }, 145 },
149 146
150 //------------------------------------------------------------------------- 147 //-------------------------------------------------------------------------
151/* 148/*
152 'shouldRemoveElementWhenClearningUp': function () { 149 'shouldRemoveElementWhenClearningUp': function () {
153 return false; 150 return false;
154 }, 151 },
155*/ 152*/
156 //------------------------------------------------------------------------- 153 //-------------------------------------------------------------------------
157 __syntaxFix__: "syntax fix" 154 __syntaxFix__: "syntax fix"
158}); 155});
159 156
160Clipperz.PM.UI.Web.Components.PasswordTooltip.initTooltips = function () { 157Clipperz.PM.UI.Web.Components.PasswordTooltip.initTooltips = function () {
161 Clipperz.DOM.Helper.insertBefore(MochiKit.DOM.currentDocument().body.childNodes[0], {tag:'div', id:'Clipperz_PM_UI_Web_Components_PasswordTooltip_wrapperNode'}); 158 Clipperz.DOM.Helper.insertBefore(MochiKit.DOM.currentDocument().body.childNodes[0], {tag:'div', id:'Clipperz_PM_UI_Web_Components_PasswordTooltip_wrapperNode'});
162} 159}
163 160
164MochiKit.DOM.addLoadEvent(Clipperz.PM.UI.Web.Components.PasswordTooltip.initTooltips); 161MochiKit.DOM.addLoadEvent(Clipperz.PM.UI.Web.Components.PasswordTooltip.initTooltips);
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/RulerComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/RulerComponent.js
index ab8a38c..69c1ede 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/RulerComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/RulerComponent.js
@@ -1,324 +1,321 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.RulerComponent = function(args) { 28Clipperz.PM.UI.Web.Components.RulerComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 Clipperz.PM.UI.Web.Components.RulerComponent.superclass.constructor.apply(this, arguments); 30 Clipperz.PM.UI.Web.Components.RulerComponent.superclass.constructor.apply(this, arguments);
34 31
35 this._translationContext = args.translationContext|| Clipperz.Base.exception.raise('MandatoryParameter'); 32 this._translationContext = args.translationContext|| Clipperz.Base.exception.raise('MandatoryParameter');
36 // this._steps = args.steps || Clipperz.Base.exception.raise('MandatoryParameter'); 33 // this._steps = args.steps || Clipperz.Base.exception.raise('MandatoryParameter');
37 this._steps = args.steps; 34 this._steps = args.steps;
38 35
39 this._currentStep = -1; 36 this._currentStep = -1;
40 37
41 return this; 38 return this;
42} 39}
43 40
44//============================================================================= 41//=============================================================================
45 42
46Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.RulerComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { 43Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.RulerComponent, Clipperz.PM.UI.Common.Components.BaseComponent, {
47 44
48 //------------------------------------------------------------------------- 45 //-------------------------------------------------------------------------
49 46
50 'toString': function () { 47 'toString': function () {
51 return "Clipperz.PM.UI.Web.Components.RulerComponent component"; 48 return "Clipperz.PM.UI.Web.Components.RulerComponent component";
52 }, 49 },
53 50
54 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
55 52
56 'resetStatus': function (args) { 53 'resetStatus': function (args) {
57 args = args || {}; 54 args = args || {};
58 55
59 if (this.currentStep() != 0) { 56 if (this.currentStep() != 0) {
60 var shouldAnimateTransition; 57 var shouldAnimateTransition;
61 58
62 shouldAnimateTransition = args.animateTransition || false; 59 shouldAnimateTransition = args.animateTransition || false;
63 60
64 if (shouldAnimateTransition) { 61 if (shouldAnimateTransition) {
65 this.moveToFirstStep(MochiKit.Base.method(this, 'cursorMoved')); 62 this.moveToFirstStep(MochiKit.Base.method(this, 'cursorMoved'));
66 } else { 63 } else {
67 this._currentStep = 0; 64 this._currentStep = 0;
68 this.cursorMoved(); 65 this.cursorMoved();
69 } 66 }
70 } 67 }
71 }, 68 },
72 69
73 //------------------------------------------------------------------------- 70 //-------------------------------------------------------------------------
74 71
75 'translationContext': function () { 72 'translationContext': function () {
76 return this._translationContext; 73 return this._translationContext;
77 }, 74 },
78 75
79 'steps': function () { 76 'steps': function () {
80 return this._steps; 77 return this._steps;
81 }, 78 },
82 79
83 'setSteps': function (aValue) { 80 'setSteps': function (aValue) {
84 this._steps = aValue; 81 this._steps = aValue;
85 this.renderStepsComponents(); 82 this.renderStepsComponents();
86 this.resetStatus(); 83 this.resetStatus();
87 }, 84 },
88 85
89 'translatedStepDescription': function (aStep) { 86 'translatedStepDescription': function (aStep) {
90 return Clipperz.PM.Strings.getValue(this.translationContext() + '.' + aStep + '.' + 'name'); 87 return Clipperz.PM.Strings.getValue(this.translationContext() + '.' + aStep + '.' + 'name');
91 }, 88 },
92 89
93 //------------------------------------------------------------------------- 90 //-------------------------------------------------------------------------
94 91
95 'renderSelf': function(/*aContainer, aPosition*/) { 92 'renderSelf': function(/*aContainer, aPosition*/) {
96 this.setElement(this.append(MochiKit.DOM.currentDocument().body, [ 93 this.setElement(this.append(MochiKit.DOM.currentDocument().body, [
97 {tag:'div', id:this.getId('rulerWrapper'), cls:'rulerWrapper fixed', children:[ 94 {tag:'div', id:this.getId('rulerWrapper'), cls:'rulerWrapper fixed', children:[
98 {tag:'div', cls:'ruler', children:[ 95 {tag:'div', cls:'ruler', children:[
99 {tag:'a', href:'#', id:this.getId('exit'), cls:'exit', html:'&nbsp;'}, 96 {tag:'a', href:'#', id:this.getId('exit'), cls:'exit', html:'&nbsp;'},
100 {tag:'a', href:'#', id:this.getId('smallPreviousButton'),cls:'smallButton previous', html:'&nbsp;'}, 97 {tag:'a', href:'#', id:this.getId('smallPreviousButton'),cls:'smallButton previous', html:'&nbsp;'},
101 {tag:'a', href:'#', id:this.getId('smallNextButton'), cls:'smallButton next', html:'&nbsp;'}, 98 {tag:'a', href:'#', id:this.getId('smallNextButton'), cls:'smallButton next', html:'&nbsp;'},
102 {tag:'div', cls:'marker', id:this.getId('marker'), children:[ 99 {tag:'div', cls:'marker', id:this.getId('marker'), children:[
103 {tag:'div', cls:'previous', id:this.getId('previousButton')}, 100 {tag:'div', cls:'previous', id:this.getId('previousButton')},
104 {tag:'div', cls:'markerBody'}, 101 {tag:'div', cls:'markerBody'},
105 {tag:'div', cls:'next', id:this.getId('nextButton')} 102 {tag:'div', cls:'next', id:this.getId('nextButton')}
106 ]}, 103 ]},
107 {tag:'div', cls:'steps', id:this.getId('stepsFrame')}, 104 {tag:'div', cls:'steps', id:this.getId('stepsFrame')},
108 // {tag:'div', cls:'steps' + ' ' + 'steps_' + this.steps().length, children:[ 105 // {tag:'div', cls:'steps' + ' ' + 'steps_' + this.steps().length, children:[
109 // {tag:'ul', id:this.getId('steps'), children:MochiKit.Base.map(MochiKit.Base.bind(function (aStep) { return {tag:'li', children:[{tag:'span', html:this.translatedStepDescription(aStep)}]}}, this), this.steps())} 106 // {tag:'ul', id:this.getId('steps'), children:MochiKit.Base.map(MochiKit.Base.bind(function (aStep) { return {tag:'li', children:[{tag:'span', html:this.translatedStepDescription(aStep)}]}}, this), this.steps())}
110 // ]}, 107 // ]},
111 {tag:'div', cls:'dots', id:this.getId('dotsFrame')} 108 {tag:'div', cls:'dots', id:this.getId('dotsFrame')}
112 // {tag:'div', cls:'dots' + ' ' + 'steps_' + this.steps().length, children:[ 109 // {tag:'div', cls:'dots' + ' ' + 'steps_' + this.steps().length, children:[
113 // {tag:'ul', id:this.getId('dots'), children:MochiKit.Base.map(function (aStep) { return {tag:'li', children:[{tag:'span', html:'*'}]}}, this.steps())} 110 // {tag:'ul', id:this.getId('dots'), children:MochiKit.Base.map(function (aStep) { return {tag:'li', children:[{tag:'span', html:'*'}]}}, this.steps())}
114 // ]} 111 // ]}
115 ]} 112 ]}
116 ]} 113 ]}
117 ])); 114 ]));
118//console.log("ELEMENT", this.element()); 115//console.log("ELEMENT", this.element());
119 116
120 MochiKit.Signal.connect(this.getElement('exit'), 'onclick', this, 'handleExit'); 117 MochiKit.Signal.connect(this.getElement('exit'), 'onclick', this, 'handleExit');
121 118
122 MochiKit.Signal.connect(this.getElement('previousButton'), 'onclick', this, 'handlePrevious'); 119 MochiKit.Signal.connect(this.getElement('previousButton'), 'onclick', this, 'handlePrevious');
123 MochiKit.Signal.connect(this.getElement('smallPreviousButton'),'onclick', this, 'handlePrevious'); 120 MochiKit.Signal.connect(this.getElement('smallPreviousButton'),'onclick', this, 'handlePrevious');
124 121
125 MochiKit.Signal.connect(this.getElement('nextButton'), 'onclick', this, 'handleNext'); 122 MochiKit.Signal.connect(this.getElement('nextButton'), 'onclick', this, 'handleNext');
126 MochiKit.Signal.connect(this.getElement('smallNextButton'), 'onclick', this, 'handleNext'); 123 MochiKit.Signal.connect(this.getElement('smallNextButton'), 'onclick', this, 'handleNext');
127 124
128 this.enablePrevious(false); 125 this.enablePrevious(false);
129 this.enableNext(false); 126 this.enableNext(false);
130 127
131 // this.cursorMoved(); 128 // this.cursorMoved();
132 }, 129 },
133 130
134 //......................................................................... 131 //.........................................................................
135 132
136 'renderStepsComponents': function () { 133 'renderStepsComponents': function () {
137 varstepsFrame; 134 varstepsFrame;
138 var dotsFrame; 135 var dotsFrame;
139 136
140 stepsFrames = this.getElement('stepsFrame'); 137 stepsFrames = this.getElement('stepsFrame');
141 MochiKit.DOM.setElementClass(stepsFrames, 'steps'); 138 MochiKit.DOM.setElementClass(stepsFrames, 'steps');
142 MochiKit.DOM.addElementClass(stepsFrames, 'steps_' + this.steps().length); 139 MochiKit.DOM.addElementClass(stepsFrames, 'steps_' + this.steps().length);
143 140
144 stepsFrames.innerHTML = ""; 141 stepsFrames.innerHTML = "";
145 this.append(stepsFrames, {tag:'ul', id:this.getId('steps'), children:MochiKit.Base.map( 142 this.append(stepsFrames, {tag:'ul', id:this.getId('steps'), children:MochiKit.Base.map(
146 MochiKit.Base.bind(function (aStep) { return {tag:'li', children:[{tag:'span', html:this.translatedStepDescription(aStep)}]}}, this), 143 MochiKit.Base.bind(function (aStep) { return {tag:'li', children:[{tag:'span', html:this.translatedStepDescription(aStep)}]}}, this),
147 this.steps())} 144 this.steps())}
148 ); 145 );
149 146
150 dotsFrames = this.getElement('dotsFrame'); 147 dotsFrames = this.getElement('dotsFrame');
151 MochiKit.DOM.setElementClass(dotsFrames, 'dots'); 148 MochiKit.DOM.setElementClass(dotsFrames, 'dots');
152 MochiKit.DOM.addElementClass(dotsFrames, 'steps_' + this.steps().length); 149 MochiKit.DOM.addElementClass(dotsFrames, 'steps_' + this.steps().length);
153 150
154 dotsFrames.innerHTML = ""; 151 dotsFrames.innerHTML = "";
155 this.append(dotsFrames, {tag:'ul', id:this.getId('dots'), children:MochiKit.Base.map( 152 this.append(dotsFrames, {tag:'ul', id:this.getId('dots'), children:MochiKit.Base.map(
156 function (aStep) { return {tag:'li', children:[{tag:'span', html:'*'}]}; }, 153 function (aStep) { return {tag:'li', children:[{tag:'span', html:'*'}]}; },
157 this.steps())} 154 this.steps())}
158 ); 155 );
159 }, 156 },
160 157
161 //------------------------------------------------------------------------- 158 //-------------------------------------------------------------------------
162 159
163 'handleExit': function (anEvent) { 160 'handleExit': function (anEvent) {
164 anEvent.preventDefault(); 161 anEvent.preventDefault();
165 162
166 MochiKit.Signal.signal(this, 'exit'); 163 MochiKit.Signal.signal(this, 'exit');
167 }, 164 },
168 165
169 //------------------------------------------------------------------------- 166 //-------------------------------------------------------------------------
170 167
171 'handlePrevious': function (anEvent) { 168 'handlePrevious': function (anEvent) {
172 anEvent.preventDefault(); 169 anEvent.preventDefault();
173 170
174 // if (!MochiKit.DOM.hasElementClass(this.getElement('previousButton'), 'disabled')) { 171 // if (!MochiKit.DOM.hasElementClass(this.getElement('previousButton'), 'disabled')) {
175 // this.moveBackward(); 172 // this.moveBackward();
176 // } 173 // }
177 174
178 MochiKit.Signal.signal(this, 'moveBackward'); 175 MochiKit.Signal.signal(this, 'moveBackward');
179 }, 176 },
180 177
181 'handleNext': function (anEvent) { 178 'handleNext': function (anEvent) {
182 anEvent.preventDefault(); 179 anEvent.preventDefault();
183 180
184 // if (!MochiKit.DOM.hasElementClass(this.getElement('nextButton'), 'disabled')) { 181 // if (!MochiKit.DOM.hasElementClass(this.getElement('nextButton'), 'disabled')) {
185 // this.moveForward(); 182 // this.moveForward();
186 // } 183 // }
187 184
188 MochiKit.Signal.signal(this, 'moveForward'); 185 MochiKit.Signal.signal(this, 'moveForward');
189 }, 186 },
190 187
191 //------------------------------------------------------------------------- 188 //-------------------------------------------------------------------------
192 189
193 'currentStep': function () { 190 'currentStep': function () {
194 return this._currentStep; 191 return this._currentStep;
195 }, 192 },
196 193
197 'markerInitialOffset': function () { 194 'markerInitialOffset': function () {
198 return -246; 195 return -246;
199 }, 196 },
200 197
201 'markerStepOffset': function () { 198 'markerStepOffset': function () {
202 return 410 / (this.steps().length - 1); 199 return 410 / (this.steps().length - 1);
203 // return 100; 200 // return 100;
204 }, 201 },
205 202
206 //------------------------------------------------------------------------- 203 //-------------------------------------------------------------------------
207 204
208 'moveToFirstStep': function (aCallback) { 205 'moveToFirstStep': function (aCallback) {
209 varstepsToMove; 206 varstepsToMove;
210 207
211 stepsToMove = this._currentStep; 208 stepsToMove = this._currentStep;
212 this._currentStep = 0; 209 this._currentStep = 0;
213 210
214 this.enablePrevious(false); 211 this.enablePrevious(false);
215 this.enableNext(false); 212 this.enableNext(false);
216 // MochiKit.Signal.signal(this, 'moveBackward'); 213 // MochiKit.Signal.signal(this, 'moveBackward');
217 MochiKit.Base.map( 214 MochiKit.Base.map(
218 function (anElement) { MochiKit.DOM.removeElementClass(anElement, 'selected'); }, 215 function (anElement) { MochiKit.DOM.removeElementClass(anElement, 'selected'); },
219 MochiKit.Selector.findChildElements(this.element(), ['li.selected']) 216 MochiKit.Selector.findChildElements(this.element(), ['li.selected'])
220 ); 217 );
221 new MochiKit.Visual.Move(this.getElement('marker'), { 218 new MochiKit.Visual.Move(this.getElement('marker'), {
222 x:-(this.markerStepOffset() * stepsToMove), 219 x:-(this.markerStepOffset() * stepsToMove),
223 mode:'relative', 220 mode:'relative',
224 duration:(0.5 * (stepsToMove/2)), 221 duration:(0.5 * (stepsToMove/2)),
225 // afterFinish:MochiKit.Base.method(this, 'cursorMoved') 222 // afterFinish:MochiKit.Base.method(this, 'cursorMoved')
226 afterFinish:MochiKit.Base.compose(MochiKit.Base.method(this, 'cursorMoved'), aCallback) 223 afterFinish:MochiKit.Base.compose(MochiKit.Base.method(this, 'cursorMoved'), aCallback)
227 }); 224 });
228 }, 225 },
229 226
230 'moveBackward': function (aCallback) { 227 'moveBackward': function (aCallback) {
231 this._currentStep --; 228 this._currentStep --;
232 229
233 this.enablePrevious(false); 230 this.enablePrevious(false);
234 this.enableNext(false); 231 this.enableNext(false);
235 // MochiKit.Signal.signal(this, 'moveBackward'); 232 // MochiKit.Signal.signal(this, 'moveBackward');
236 MochiKit.Base.map( 233 MochiKit.Base.map(
237 function (anElement) { MochiKit.DOM.removeElementClass(anElement, 'selected'); }, 234 function (anElement) { MochiKit.DOM.removeElementClass(anElement, 'selected'); },
238 MochiKit.Selector.findChildElements(this.element(), ['li.selected']) 235 MochiKit.Selector.findChildElements(this.element(), ['li.selected'])
239 ); 236 );
240 new MochiKit.Visual.Move(this.getElement('marker'), { 237 new MochiKit.Visual.Move(this.getElement('marker'), {
241 x:-this.markerStepOffset(), 238 x:-this.markerStepOffset(),
242 mode:'relative', 239 mode:'relative',
243 duration:0.5, 240 duration:0.5,
244 // afterFinish:MochiKit.Base.method(this, 'cursorMoved') 241 // afterFinish:MochiKit.Base.method(this, 'cursorMoved')
245 afterFinish:MochiKit.Base.compose(MochiKit.Base.method(this, 'cursorMoved'), aCallback) 242 afterFinish:MochiKit.Base.compose(MochiKit.Base.method(this, 'cursorMoved'), aCallback)
246 }); 243 });
247 }, 244 },
248 245
249 'moveForward': function (aCallback) { 246 'moveForward': function (aCallback) {
250 this._currentStep ++; 247 this._currentStep ++;
251 248
252 if (this._currentStep < this.steps().length) { 249 if (this._currentStep < this.steps().length) {
253 this.enablePrevious(false); 250 this.enablePrevious(false);
254 this.enableNext(false); 251 this.enableNext(false);
255 // MochiKit.Signal.signal(this, 'moveForward'); 252 // MochiKit.Signal.signal(this, 'moveForward');
256 MochiKit.Base.map( 253 MochiKit.Base.map(
257 function (anElement) { MochiKit.DOM.removeElementClass(anElement, 'selected'); }, 254 function (anElement) { MochiKit.DOM.removeElementClass(anElement, 'selected'); },
258 MochiKit.Selector.findChildElements(this.element(), ['li.selected']) 255 MochiKit.Selector.findChildElements(this.element(), ['li.selected'])
259 ); 256 );
260 new MochiKit.Visual.Move(this.getElement('marker'), { 257 new MochiKit.Visual.Move(this.getElement('marker'), {
261 x:this.markerStepOffset(), 258 x:this.markerStepOffset(),
262 mode:'relative', 259 mode:'relative',
263 duration:0.5, 260 duration:0.5,
264 // afterFinish:MochiKit.Base.method(this, 'cursorMoved') 261 // afterFinish:MochiKit.Base.method(this, 'cursorMoved')
265 afterFinish:MochiKit.Base.compose(MochiKit.Base.method(this, 'cursorMoved'), aCallback) 262 afterFinish:MochiKit.Base.compose(MochiKit.Base.method(this, 'cursorMoved'), aCallback)
266 }); 263 });
267 } else { 264 } else {
268 MochiKit.Signal.signal(this, 'done'); 265 MochiKit.Signal.signal(this, 'done');
269 } 266 }
270 }, 267 },
271 268
272 //------------------------------------------------------------------------- 269 //-------------------------------------------------------------------------
273 270
274 'enablePrevious': function (aValue) { 271 'enablePrevious': function (aValue) {
275 if (aValue == true) { 272 if (aValue == true) {
276 MochiKit.DOM.removeElementClass(this.getElement('previousButton'), 'disabled'); 273 MochiKit.DOM.removeElementClass(this.getElement('previousButton'), 'disabled');
277 MochiKit.DOM.removeElementClass(this.getElement('smallPreviousButton'), 'disabled'); 274 MochiKit.DOM.removeElementClass(this.getElement('smallPreviousButton'), 'disabled');
278 } else { 275 } else {
279 MochiKit.DOM.addElementClass(this.getElement('previousButton'), 'disabled'); 276 MochiKit.DOM.addElementClass(this.getElement('previousButton'), 'disabled');
280 MochiKit.DOM.addElementClass(this.getElement('smallPreviousButton'), 'disabled'); 277 MochiKit.DOM.addElementClass(this.getElement('smallPreviousButton'), 'disabled');
281 } 278 }
282 }, 279 },
283 280
284 //'disablePrevious': function () { 281 //'disablePrevious': function () {
285 // MochiKit.DOM.addElementClass(this.getElement('previousButton'), 'disabled'); 282 // MochiKit.DOM.addElementClass(this.getElement('previousButton'), 'disabled');
286 //}, 283 //},
287 284
288 //......................................................................... 285 //.........................................................................
289 286
290 'enableNext': function (aValue) { 287 'enableNext': function (aValue) {
291 if (aValue == true) { 288 if (aValue == true) {
292 MochiKit.DOM.removeElementClass(this.getElement('nextButton'), 'disabled'); 289 MochiKit.DOM.removeElementClass(this.getElement('nextButton'), 'disabled');
293 MochiKit.DOM.removeElementClass(this.getElement('smallNextButton'), 'disabled'); 290 MochiKit.DOM.removeElementClass(this.getElement('smallNextButton'), 'disabled');
294 } else { 291 } else {
295 MochiKit.DOM.addElementClass(this.getElement('nextButton'), 'disabled'); 292 MochiKit.DOM.addElementClass(this.getElement('nextButton'), 'disabled');
296 MochiKit.DOM.addElementClass(this.getElement('smallNextButton'), 'disabled'); 293 MochiKit.DOM.addElementClass(this.getElement('smallNextButton'), 'disabled');
297 } 294 }
298 }, 295 },
299 296
300 //'disableNext': function () { 297 //'disableNext': function () {
301 // MochiKit.DOM.addElementClass(this.getElement('nextButton'), 'disabled'); 298 // MochiKit.DOM.addElementClass(this.getElement('nextButton'), 'disabled');
302 //}, 299 //},
303 300
304 //------------------------------------------------------------------------- 301 //-------------------------------------------------------------------------
305 302
306 'cursorMoved': function () { 303 'cursorMoved': function () {
307 MochiKit.Style.setElementPosition(this.getElement('marker'), {x:this.markerStepOffset() * this.currentStep() + this.markerInitialOffset()}) 304 MochiKit.Style.setElementPosition(this.getElement('marker'), {x:this.markerStepOffset() * this.currentStep() + this.markerInitialOffset()})
308 MochiKit.Signal.signal(this, 'cursorMoved'); 305 MochiKit.Signal.signal(this, 'cursorMoved');
309 306
310 MochiKit.DOM.addElementClass(this.getElement('steps').childNodes[this.currentStep()], 'selected'); 307 MochiKit.DOM.addElementClass(this.getElement('steps').childNodes[this.currentStep()], 'selected');
311 MochiKit.DOM.addElementClass(this.getElement('dots').childNodes[this.currentStep()], 'selected'); 308 MochiKit.DOM.addElementClass(this.getElement('dots').childNodes[this.currentStep()], 'selected');
312 }, 309 },
313 310
314 //------------------------------------------------------------------------- 311 //-------------------------------------------------------------------------
315 312
316 'setDisplayMode': function (aValue) { 313 'setDisplayMode': function (aValue) {
317 MochiKit.DOM.removeElementClass(this.getElement('rulerWrapper'), 'fixed'); 314 MochiKit.DOM.removeElementClass(this.getElement('rulerWrapper'), 'fixed');
318 MochiKit.DOM.removeElementClass(this.getElement('rulerWrapper'), 'scrollable'); 315 MochiKit.DOM.removeElementClass(this.getElement('rulerWrapper'), 'scrollable');
319 MochiKit.DOM.addElementClass(this.getElement('rulerWrapper'), aValue); 316 MochiKit.DOM.addElementClass(this.getElement('rulerWrapper'), aValue);
320 }, 317 },
321 318
322 //------------------------------------------------------------------------- 319 //-------------------------------------------------------------------------
323 __syntaxFix__: "syntax fix" 320 __syntaxFix__: "syntax fix"
324}); 321});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/TabSidePanel.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/TabSidePanel.js
index 39a1ccb..666afe9 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/TabSidePanel.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/TabSidePanel.js
@@ -1,193 +1,190 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.TabSidePanel = function(args) { 28Clipperz.PM.UI.Web.Components.TabSidePanel = function(args) {
32 args = args || {}; 29 args = args || {};
33 Clipperz.PM.UI.Web.Components.TabSidePanel.superclass.constructor.call(this, args); 30 Clipperz.PM.UI.Web.Components.TabSidePanel.superclass.constructor.call(this, args);
34 31
35 this._element = args.element || null; 32 this._element = args.element || null;
36 33
37 this._slots = { 34 this._slots = {
38 }; 35 };
39 36
40 return this; 37 return this;
41} 38}
42 39
43//============================================================================= 40//=============================================================================
44 41
45Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.TabSidePanel, Clipperz.PM.UI.Common.Components.BaseComponent, { 42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.TabSidePanel, Clipperz.PM.UI.Common.Components.BaseComponent, {
46 43
47 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
48 45
49 'toString': function () { 46 'toString': function () {
50 return "Clipperz.PM.UI.Web.Components.TabSidePanel component"; 47 return "Clipperz.PM.UI.Web.Components.TabSidePanel component";
51 }, 48 },
52 49
53 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
54 51
55 'deselectAllTabs': function() { 52 'deselectAllTabs': function() {
56 var tabListItems; 53 var tabListItems;
57 54
58 tabListItems = [ 55 tabListItems = [
59 'cardsLI', 56 'cardsLI',
60 // 'directLoginLI', 57 // 'directLoginLI',
61 'accountLI', 58 'accountLI',
62 'dataLI', 59 'dataLI',
63 'toolsLI' 60 'toolsLI'
64 ]; 61 ];
65 62
66//Clipperz.log("=== TabSidePanel.tabSelected anEvent.src().id", anEvent.src().id); 63//Clipperz.log("=== TabSidePanel.tabSelected anEvent.src().id", anEvent.src().id);
67 for (var i in tabListItems) { 64 for (var i in tabListItems) {
68//Clipperz.log("=== TabSidePanel.tabSelected aTabListItem", tabListItems[i]); 65//Clipperz.log("=== TabSidePanel.tabSelected aTabListItem", tabListItems[i]);
69 MochiKit.DOM.removeElementClass(this.getId(tabListItems[i]), 'selected'); 66 MochiKit.DOM.removeElementClass(this.getId(tabListItems[i]), 'selected');
70 } 67 }
71 }, 68 },
72 69
73 'selectTab': function(aTabName) { 70 'selectTab': function(aTabName) {
74 this.deselectAllTabs(); 71 this.deselectAllTabs();
75 MochiKit.DOM.addElementClass(this.getId(this.listItemIdForTabNamed(aTabName)), 'selected'); 72 MochiKit.DOM.addElementClass(this.getId(this.listItemIdForTabNamed(aTabName)), 'selected');
76 MochiKit.Signal.signal(this, 'tabSelected', aTabName); 73 MochiKit.Signal.signal(this, 'tabSelected', aTabName);
77 }, 74 },
78 75
79 'tabNameForAnchorId': function(anId) { 76 'tabNameForAnchorId': function(anId) {
80 var result; 77 var result;
81 78
82 switch(anId) { 79 switch(anId) {
83 case 'cards_tabSidePanel': 80 case 'cards_tabSidePanel':
84 result = 'cards'; 81 result = 'cards';
85 break; 82 break;
86 // case 'directLogins_tabSidePanel': 83 // case 'directLogins_tabSidePanel':
87 // result = 'directLogins'; 84 // result = 'directLogins';
88 // break; 85 // break;
89 case 'account_tabSidePanel': 86 case 'account_tabSidePanel':
90 result = 'account'; 87 result = 'account';
91 break; 88 break;
92 case 'data_tabSidePanel': 89 case 'data_tabSidePanel':
93 result = 'data'; 90 result = 'data';
94 break; 91 break;
95 case 'tools_tabSidePanel': 92 case 'tools_tabSidePanel':
96 result = 'tools'; 93 result = 'tools';
97 break; 94 break;
98 } 95 }
99 96
100 return result; 97 return result;
101 }, 98 },
102 99
103 'listItemIdForTabNamed': function(aTabName) { 100 'listItemIdForTabNamed': function(aTabName) {
104 var result; 101 var result;
105 102
106 switch (aTabName) { 103 switch (aTabName) {
107 case 'cards': 104 case 'cards':
108 result = 'cardsLI'; 105 result = 'cardsLI';
109 break; 106 break;
110 // case 'directLogins': 107 // case 'directLogins':
111 // result = 'directLoginLI'; 108 // result = 'directLoginLI';
112 // break; 109 // break;
113 case 'account': 110 case 'account':
114 result = 'accountLI'; 111 result = 'accountLI';
115 break; 112 break;
116 case 'data': 113 case 'data':
117 result = 'dataLI'; 114 result = 'dataLI';
118 break; 115 break;
119 case 'tools': 116 case 'tools':
120 result = 'toolsLI'; 117 result = 'toolsLI';
121 break; 118 break;
122 } 119 }
123 120
124 return result; 121 return result;
125 }, 122 },
126 123
127 'tabSelected': function (anEvent) { 124 'tabSelected': function (anEvent) {
128 this.selectTab(this.tabNameForAnchorId(anEvent.src().id)); 125 this.selectTab(this.tabNameForAnchorId(anEvent.src().id));
129 // anEvent.stop(); 126 // anEvent.stop();
130 anEvent.preventDefault(); 127 anEvent.preventDefault();
131 }, 128 },
132 129
133 //------------------------------------------------------------------------- 130 //-------------------------------------------------------------------------
134 131
135 'addCard': function (anEvent) { 132 'addCard': function (anEvent) {
136 anEvent.stop(); 133 anEvent.stop();
137 MochiKit.Signal.signal(this, 'addCard', anEvent.src()); 134 MochiKit.Signal.signal(this, 'addCard', anEvent.src());
138 }, 135 },
139 136
140 //------------------------------------------------------------------------- 137 //-------------------------------------------------------------------------
141 138
142 'renderSelf': function(/*aContainer, aPosition*/) { 139 'renderSelf': function(/*aContainer, aPosition*/) {
143 this.append(this.element(), [ 140 this.append(this.element(), [
144 {tag:'div', cls:'header'}, 141 {tag:'div', cls:'header'},
145 {tag:'div', cls:'body', children:[ 142 {tag:'div', cls:'body', children:[
146 {tag:'ul', cls:'mainTabs', children:[ 143 {tag:'ul', cls:'mainTabs', children:[
147 {tag:'li', id:this.getId('cardsLI'), cls:'cards', children:[ 144 {tag:'li', id:this.getId('cardsLI'), cls:'cards', children:[
148 {tag:'a', id:'cards_tabSidePanel', href:'#', html:"cards"}, 145 {tag:'a', id:'cards_tabSidePanel', href:'#', html:"cards"},
149 {tag:'div', cls:'selectionHighlighter', children:[ 146 {tag:'div', cls:'selectionHighlighter', children:[
150 {tag:'img', src:'./images/old/main/tabs/selectionHighligher.png'}, 147 {tag:'img', src:'./images/old/main/tabs/selectionHighligher.png'},
151 {tag:'a', id:this.getId('addCardA'), cls:'add', href:'#', children:[ 148 {tag:'a', id:this.getId('addCardA'), cls:'add', href:'#', children:[
152 {tag:'span', html:"add"}, 149 {tag:'span', html:"add"},
153 {tag:'h3', html:"+"} 150 {tag:'h3', html:"+"}
154 ]} 151 ]}
155 ]} 152 ]}
156 ]} 153 ]}
157 ]}, 154 ]},
158 {tag:'ul', cls:'otherTabs', children:[ 155 {tag:'ul', cls:'otherTabs', children:[
159 {tag:'li', id:this.getId('accountLI'), children:[ 156 {tag:'li', id:this.getId('accountLI'), children:[
160 {tag:'a', id:'account_tabSidePanel', href:'#', html:"account"}, 157 {tag:'a', id:'account_tabSidePanel', href:'#', html:"account"},
161 {tag:'div', cls:'selectionHighlighter', children:[ 158 {tag:'div', cls:'selectionHighlighter', children:[
162 {tag:'img', src:'./images/old/main/tabs/selectionHighligherGray.png'} 159 {tag:'img', src:'./images/old/main/tabs/selectionHighligherGray.png'}
163 ]} 160 ]}
164 ]}, 161 ]},
165 {tag:'li', id:this.getId('dataLI'), children:[ 162 {tag:'li', id:this.getId('dataLI'), children:[
166 {tag:'a', id:'data_tabSidePanel', href:'#', html:"data"}, 163 {tag:'a', id:'data_tabSidePanel', href:'#', html:"data"},
167 {tag:'div', cls:'selectionHighlighter', children:[ 164 {tag:'div', cls:'selectionHighlighter', children:[
168 {tag:'img', src:'./images/old/main/tabs/selectionHighligherGray.png'} 165 {tag:'img', src:'./images/old/main/tabs/selectionHighligherGray.png'}
169 ]} 166 ]}
170 ]}, 167 ]},
171 {tag:'li', id:this.getId('toolsLI'), children:[ 168 {tag:'li', id:this.getId('toolsLI'), children:[
172 {tag:'a', id:'tools_tabSidePanel', href:'#', html:"tools"}, 169 {tag:'a', id:'tools_tabSidePanel', href:'#', html:"tools"},
173 {tag:'div', cls:'selectionHighlighter', children:[ 170 {tag:'div', cls:'selectionHighlighter', children:[
174 {tag:'img', src:'./images/old/main/tabs/selectionHighligherGray.png'} 171 {tag:'img', src:'./images/old/main/tabs/selectionHighligherGray.png'}
175 ]} 172 ]}
176 ]} 173 ]}
177 ]} 174 ]}
178 ]}, 175 ]},
179 {tag:'div', cls:'footer'} 176 {tag:'div', cls:'footer'}
180 ]); 177 ]);
181 178
182 MochiKit.Signal.connect('cards_tabSidePanel', 'onclick', this, 'tabSelected'); 179 MochiKit.Signal.connect('cards_tabSidePanel', 'onclick', this, 'tabSelected');
183 // MochiKit.Signal.connect('directLogins_tabSidePanel', 'onclick', this, 'tabSelected'); 180 // MochiKit.Signal.connect('directLogins_tabSidePanel', 'onclick', this, 'tabSelected');
184 MochiKit.Signal.connect('account_tabSidePanel', 'onclick', this, 'tabSelected'); 181 MochiKit.Signal.connect('account_tabSidePanel', 'onclick', this, 'tabSelected');
185 MochiKit.Signal.connect('data_tabSidePanel', 'onclick', this, 'tabSelected'); 182 MochiKit.Signal.connect('data_tabSidePanel', 'onclick', this, 'tabSelected');
186 MochiKit.Signal.connect('tools_tabSidePanel', 'onclick', this, 'tabSelected'); 183 MochiKit.Signal.connect('tools_tabSidePanel', 'onclick', this, 'tabSelected');
187 MochiKit.Signal.connect(this.getId('addCardA'), 'onclick', this, 'addCard'); 184 MochiKit.Signal.connect(this.getId('addCardA'), 'onclick', this, 'addCard');
188 }, 185 },
189 186
190 //------------------------------------------------------------------------- 187 //-------------------------------------------------------------------------
191 188
192 __syntaxFix__: "syntax fix" 189 __syntaxFix__: "syntax fix"
193}); 190});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/TextColumnManager.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/TextColumnManager.js
index 97e81b4..3dc9ce9 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/TextColumnManager.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/TextColumnManager.js
@@ -1,53 +1,50 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31//############################################################################# 28//#############################################################################
32 29
33Clipperz.PM.UI.Web.Components.TextColumnManager = function(args) { 30Clipperz.PM.UI.Web.Components.TextColumnManager = function(args) {
34 args = args || {}; 31 args = args || {};
35 Clipperz.PM.UI.Web.Components.TextColumnManager.superclass.constructor.call(this, args); 32 Clipperz.PM.UI.Web.Components.TextColumnManager.superclass.constructor.call(this, args);
36 33
37 return this; 34 return this;
38} 35}
39 36
40//============================================================================= 37//=============================================================================
41 38
42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.TextColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, { 39Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.TextColumnManager, Clipperz.PM.UI.Web.Components.ColumnManager, {
43 40
44 'toString': function () { 41 'toString': function () {
45 return "Clipperz.PM.UI.Web.Components.TextColumnManager component"; 42 return "Clipperz.PM.UI.Web.Components.TextColumnManager component";
46 }, 43 },
47 44
48 //----------------------------------------------------- 45 //-----------------------------------------------------
49 46
50 '__syntax_fix__' : 'syntax fix' 47 '__syntax_fix__' : 'syntax fix'
51 48
52}); 49});
53 50
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js
index 179c495..3ee6189 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js
@@ -1,113 +1,110 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.ToolsPanel = function(args) { 28Clipperz.PM.UI.Web.Components.ToolsPanel = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.ToolsPanel.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.ToolsPanel.superclass.constructor.apply(this, arguments);
35 32
36 this._initiallySelectedTab = args.selected || 'PASSWORD_GENERATOR'; 33 this._initiallySelectedTab = args.selected || 'PASSWORD_GENERATOR';
37 this._tabPanelControllerConfiguration = { 34 this._tabPanelControllerConfiguration = {
38 'PASSWORD_GENERATOR': { 35 'PASSWORD_GENERATOR': {
39 tab:'passwordGeneratorTab', 36 tab:'passwordGeneratorTab',
40 panel:'passwordGeneratorPanel' 37 panel:'passwordGeneratorPanel'
41 }, 38 },
42 'BOOKMARKLET': { 39 'BOOKMARKLET': {
43 tab:'bookmarkletTab', 40 tab:'bookmarkletTab',
44 panel:'bookmarkletPanel' 41 panel:'bookmarkletPanel'
45 }, 42 },
46 'COMPACT_EDITION': { 43 'COMPACT_EDITION': {
47 tab:'compactEditionTab', 44 tab:'compactEditionTab',
48 panel:'compactEditionPanel' 45 panel:'compactEditionPanel'
49 }, 46 },
50 'HTTP_AUTH': { 47 'HTTP_AUTH': {
51 tab:'httpAuthTab', 48 tab:'httpAuthTab',
52 panel:'httpAuthPanel' 49 panel:'httpAuthPanel'
53 } 50 }
54 }; 51 };
55 52
56 return this; 53 return this;
57} 54}
58 55
59//============================================================================= 56//=============================================================================
60 57
61Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.ToolsPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, { 58Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.ToolsPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, {
62 59
63 //------------------------------------------------------------------------- 60 //-------------------------------------------------------------------------
64 61
65 'toString': function () { 62 'toString': function () {
66 return "Clipperz.PM.UI.Web.Components.ToolsPanel component"; 63 return "Clipperz.PM.UI.Web.Components.ToolsPanel component";
67 }, 64 },
68 65
69 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
70 67
71 'renderSelf': function(/*aContainer, aPosition*/) { 68 'renderSelf': function(/*aContainer, aPosition*/) {
72 this.append(this.element(), [ 69 this.append(this.element(), [
73 {tag:'div', cls:'header', children:[ 70 {tag:'div', cls:'header', children:[
74 {tag:'div', cls:'subPanelTabs', children:[ 71 {tag:'div', cls:'subPanelTabs', children:[
75 {tag:'ul', children:[ 72 {tag:'ul', children:[
76 {tag:'li', id:this.getId('passwordGeneratorTab'),children:[{tag:'a', href:'#', html:'Password generator'}], cls:'first'}, 73 {tag:'li', id:this.getId('passwordGeneratorTab'),children:[{tag:'a', href:'#', html:'Password generator'}], cls:'first'},
77 {tag:'li', id:this.getId('bookmarkletTab'), children:[{tag:'a', href:'#', html:'Bookmarklet'}]}, 74 {tag:'li', id:this.getId('bookmarkletTab'), children:[{tag:'a', href:'#', html:'Bookmarklet'}]},
78 {tag:'li', id:this.getId('compactEditionTab'), children:[{tag:'a', href:'#', html:'Compact edition'}]}, 75 {tag:'li', id:this.getId('compactEditionTab'), children:[{tag:'a', href:'#', html:'Compact edition'}]},
79 {tag:'li', id:this.getId('httpAuthTab'), children:[{tag:'a', href:'#', html:'HTTP Auth'}]} 76 {tag:'li', id:this.getId('httpAuthTab'), children:[{tag:'a', href:'#', html:'HTTP Auth'}]}
80 ]} 77 ]}
81 ]} 78 ]}
82 ]}, 79 ]},
83 {tag:'div', cls:'body', children:[ 80 {tag:'div', cls:'body', children:[
84 {tag:'div', cls:'accountPanel', children:[ 81 {tag:'div', cls:'accountPanel', children:[
85 {tag:'div', cls:'subPanelContent', children:[ 82 {tag:'div', cls:'subPanelContent', children:[
86 {tag:'ul', children:[ 83 {tag:'ul', children:[
87 {tag:'li', id:this.getId('passwordGeneratorPanel'),children:[ 84 {tag:'li', id:this.getId('passwordGeneratorPanel'),children:[
88 {tag:'h3', html:"Password generator"} 85 {tag:'h3', html:"Password generator"}
89 ]}, 86 ]},
90 {tag:'li', id:this.getId('bookmarkletPanel'),children:[ 87 {tag:'li', id:this.getId('bookmarkletPanel'),children:[
91 {tag:'h3', html:"Bookmarklet"} 88 {tag:'h3', html:"Bookmarklet"}
92 ]}, 89 ]},
93 {tag:'li', id:this.getId('compactEditionPanel'), children:[ 90 {tag:'li', id:this.getId('compactEditionPanel'), children:[
94 {tag:'h3', html:"Compact edition"} 91 {tag:'h3', html:"Compact edition"}
95 ]}, 92 ]},
96 {tag:'li', id:this.getId('httpAuthPanel'), children:[ 93 {tag:'li', id:this.getId('httpAuthPanel'), children:[
97 {tag:'h3', html:"HTTP Auth"} 94 {tag:'h3', html:"HTTP Auth"}
98 ]} 95 ]}
99 ]} 96 ]}
100 ]} 97 ]}
101 ]} 98 ]}
102 ]}, 99 ]},
103 {tag:'div', cls:'footer'} 100 {tag:'div', cls:'footer'}
104 ]); 101 ]);
105 102
106 this.tabPanelController().setup({selected:this.initiallySelectedTab()}); 103 this.tabPanelController().setup({selected:this.initiallySelectedTab()});
107 }, 104 },
108 105
109 //------------------------------------------------------------------------- 106 //-------------------------------------------------------------------------
110 107
111 108
112 __syntaxFix__: "syntax fix" 109 __syntaxFix__: "syntax fix"
113}); 110});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/UnlockPasswordComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/UnlockPasswordComponent.js
index 5b9d522..21ccf2a 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/UnlockPasswordComponent.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/UnlockPasswordComponent.js
@@ -1,184 +1,181 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.UnlockPasswordComponent = function(args) { 28Clipperz.PM.UI.Web.Components.UnlockPasswordComponent = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.UnlockPasswordComponent.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.UnlockPasswordComponent.superclass.constructor.apply(this, arguments);
35 32
36 this._openFromElement = args.openFromElement || null; 33 this._openFromElement = args.openFromElement || null;
37 this._onOkCloseToElement = args.onOkCloseToElement || null; 34 this._onOkCloseToElement = args.onOkCloseToElement || null;
38 this._onCancelCloseToElement = args.onCancelCloseToElement|| null; 35 this._onCancelCloseToElement = args.onCancelCloseToElement|| null;
39 36
40 this._progressBarComponent = null; 37 this._progressBarComponent = null;
41 38
42 return this; 39 return this;
43} 40}
44 41
45//============================================================================= 42//=============================================================================
46 43
47Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.UnlockPasswordComponent, Clipperz.PM.UI.Common.Components.SimpleMessagePanel, { 44Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.UnlockPasswordComponent, Clipperz.PM.UI.Common.Components.SimpleMessagePanel, {
48 45
49 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
50 47
51 'toString': function () { 48 'toString': function () {
52 return "Clipperz.PM.UI.Web.Components.UnlockPasswordComponent component"; 49 return "Clipperz.PM.UI.Web.Components.UnlockPasswordComponent component";
53 }, 50 },
54 51
55 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
56 53
57 'getPassphrase': function () { 54 'getPassphrase': function () {
58 /* var deferredResult; 55 /* var deferredResult;
59 56
60 if (this.passphrase() == null) { 57 if (this.passphrase() == null) {
61 this.deferredShowModal({'openFromElement': this.openFromElement()}); 58 this.deferredShowModal({'openFromElement': this.openFromElement()});
62 deferredResult = this.deferred(); 59 deferredResult = this.deferred();
63 } else { 60 } else {
64 deferredResult = MochiKit.Async.succeed(this.passphrase()); 61 deferredResult = MochiKit.Async.succeed(this.passphrase());
65 } 62 }
66 63
67 return deferredResult; 64 return deferredResult;
68*/ 65*/
69 66
70 this.deferredShowModal({'openFromElement': this.openFromElement()}); 67 this.deferredShowModal({'openFromElement': this.openFromElement()});
71 68
72 return this.deferred(); 69 return this.deferred();
73 }, 70 },
74 71
75 //------------------------------------------------------------------------- 72 //-------------------------------------------------------------------------
76 73
77 'deferredShowModal': function (someParameters) { 74 'deferredShowModal': function (someParameters) {
78 return Clipperz.Async.callbacks("UnlockPasswordComponent.deferredShowModal", [ 75 return Clipperz.Async.callbacks("UnlockPasswordComponent.deferredShowModal", [
79 MochiKit.Base.bind(Clipperz.PM.UI.Web.Components.UnlockPasswordComponent.superclass.deferredShowModal, this, someParameters), 76 MochiKit.Base.bind(Clipperz.PM.UI.Web.Components.UnlockPasswordComponent.superclass.deferredShowModal, this, someParameters),
80 MochiKit.Base.method(this, 'getElement', 'passphrase'), 77 MochiKit.Base.method(this, 'getElement', 'passphrase'),
81 MochiKit.Base.methodcaller('focus') 78 MochiKit.Base.methodcaller('focus')
82 ], {trace:false}) 79 ], {trace:false})
83 }, 80 },
84 81
85 //------------------------------------------------------------------------- 82 //-------------------------------------------------------------------------
86 83
87 'openFromElement': function () { 84 'openFromElement': function () {
88 return this._openFromElement; 85 return this._openFromElement;
89 }, 86 },
90 87
91 'onOkCloseToElement': function () { 88 'onOkCloseToElement': function () {
92 return this._onOkCloseToElement; 89 return this._onOkCloseToElement;
93 }, 90 },
94 91
95 'onCancelCloseToElement': function () { 92 'onCancelCloseToElement': function () {
96 return this._onCancelCloseToElement; 93 return this._onCancelCloseToElement;
97 }, 94 },
98 95
99 //------------------------------------------------------------------------- 96 //-------------------------------------------------------------------------
100 97
101 'renderSelf': function() { 98 'renderSelf': function() {
102 Clipperz.PM.UI.Web.Components.UnlockPasswordComponent.superclass.renderSelf.apply(this, arguments); 99 Clipperz.PM.UI.Web.Components.UnlockPasswordComponent.superclass.renderSelf.apply(this, arguments);
103 100
104 this.append(this.getElement('container'), {tag:'div', cls:'passphrase', children: [ 101 this.append(this.getElement('container'), {tag:'div', cls:'passphrase', children: [
105 // {tag:'form', id:this.getId('passphraseForm'), children:[ 102 // {tag:'form', id:this.getId('passphraseForm'), children:[
106 {tag:'input', id:this.getId('passphrase'), type:'password', name:'passphrase', value:''} 103 {tag:'input', id:this.getId('passphrase'), type:'password', name:'passphrase', value:''}
107 // ]} 104 // ]}
108 ]}); 105 ]});
109 106
110 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'userSuccessfullyLoggedIn', this, 'userSuccessfullyLoggedInHandler'); 107 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'userSuccessfullyLoggedIn', this, 'userSuccessfullyLoggedInHandler');
111 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'userLoginFailed', this, 'userLoginFailedHandler'); 108 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'userLoginFailed', this, 'userLoginFailedHandler');
112 109
113 110
114 // MochiKit.Async.callLater(0.1, MochiKit.Base.method(this.getElement('passphrase'), 'focus')); 111 // MochiKit.Async.callLater(0.1, MochiKit.Base.method(this.getElement('passphrase'), 'focus'));
115 // this.getElement('passphrase').select(); 112 // this.getElement('passphrase').select();
116 }, 113 },
117 114
118 //------------------------------------------------------------------------- 115 //-------------------------------------------------------------------------
119 116
120 'showProgressBar': function () { 117 'showProgressBar': function () {
121 varprogressBarElement; 118 varprogressBarElement;
122 119
123 this.getElement('container').innerHTML = ''; 120 this.getElement('container').innerHTML = '';
124 121
125 progressBarElement = this.append(this.getElement('container'), {tag:'div', cls:'progressBarWrapper'}); 122 progressBarElement = this.append(this.getElement('container'), {tag:'div', cls:'progressBarWrapper'});
126 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':progressBarElement})); 123 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':progressBarElement}));
127 124
128 this.setButtons([{text:"Cancel", result:'CANCEL'}]); 125 this.setButtons([{text:"Cancel", result:'CANCEL'}]);
129 }, 126 },
130 127
131 //------------------------------------------------------------------------- 128 //-------------------------------------------------------------------------
132 129
133 'showFailure': function () { 130 'showFailure': function () {
134 this.setType('ALERT'); 131 this.setType('ALERT');
135 this.setTitle("Login failed"); 132 this.setTitle("Login failed");
136 this.setText("Wrong passphrase; the unlock has failed."); 133 this.setText("Wrong passphrase; the unlock has failed.");
137 this.getElement('container').innerHTML = ''; 134 this.getElement('container').innerHTML = '';
138 this.setButtons([{text:"Close", result:'CANCEL', isDefault:true}]); 135 this.setButtons([{text:"Close", result:'CANCEL', isDefault:true}]);
139 }, 136 },
140 137
141 //------------------------------------------------------------------------- 138 //-------------------------------------------------------------------------
142 139
143 'closeOk': function () { 140 'closeOk': function () {
144 var passphrase; 141 var passphrase;
145 142
146 passphrase = this.getElement('passphrase').value; 143 passphrase = this.getElement('passphrase').value;
147 this.showProgressBar(); 144 this.showProgressBar();
148 // this.deferred().callback(passphrase); 145 // this.deferred().callback(passphrase);
149 MochiKit.Async.callLater(0.5, MochiKit.Base.method(this.deferred(), 'callback', passphrase)); 146 MochiKit.Async.callLater(0.5, MochiKit.Base.method(this.deferred(), 'callback', passphrase));
150 this._deferred = null; 147 this._deferred = null;
151 }, 148 },
152 149
153 'closeCancel': function () { 150 'closeCancel': function () {
154 this.deferredHideModal({closeToElement:this.onCancelCloseToElement()}); 151 this.deferredHideModal({closeToElement:this.onCancelCloseToElement()});
155 this.deferred().cancel(); 152 this.deferred().cancel();
156 this._deferred = null; 153 this._deferred = null;
157 }, 154 },
158 155
159 //------------------------------------------------------------------------- 156 //-------------------------------------------------------------------------
160 157
161 'userSuccessfullyLoggedInHandler': function (anEvent) { 158 'userSuccessfullyLoggedInHandler': function (anEvent) {
162 this.deferredHideModal({closeToElement:this.onOkCloseToElement()}); 159 this.deferredHideModal({closeToElement:this.onOkCloseToElement()});
163 }, 160 },
164 161
165 'userLoginFailedHandler': function (anEvent) { 162 'userLoginFailedHandler': function (anEvent) {
166//console.log("############### FAILED LOGIN ################"); 163//console.log("############### FAILED LOGIN ################");
167 this.showFailure(); 164 this.showFailure();
168 }, 165 },
169 166
170 //------------------------------------------------------------------------- 167 //-------------------------------------------------------------------------
171/* 168/*
172 'deferredShow': function (someArgs, aResult) { 169 'deferredShow': function (someArgs, aResult) {
173 this.deferredShowModal(someArgs); 170 this.deferredShowModal(someArgs);
174 171
175 // this.deferred().addMethod(this, 'deferredHideModal', {closeToElement:someArgs.onOkCloseToElement }); 172 // this.deferred().addMethod(this, 'deferredHideModal', {closeToElement:someArgs.onOkCloseToElement });
176 // this.deferred().addErrback (MochiKit.Base.method(this, 'deferredHideModal', {closeToElement:someArgs.onCancelCloseToElement })); 173 // this.deferred().addErrback (MochiKit.Base.method(this, 'deferredHideModal', {closeToElement:someArgs.onCancelCloseToElement }));
177 // this.deferred().addCallback(MochiKit.Async.succeed, aResult); 174 // this.deferred().addCallback(MochiKit.Async.succeed, aResult);
178 175
179 return this.deferred(); 176 return this.deferred();
180 }, 177 },
181*/ 178*/
182 //------------------------------------------------------------------------- 179 //-------------------------------------------------------------------------
183 __syntaxFix__: "syntax fix" 180 __syntaxFix__: "syntax fix"
184}); 181});
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 f26118e..d699dc6 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/UserInfoBox.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/UserInfoBox.js
@@ -1,346 +1,343 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
30 27
31Clipperz.PM.UI.Web.Components.UserInfoBox = function(args) { 28Clipperz.PM.UI.Web.Components.UserInfoBox = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Components.UserInfoBox.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.UserInfoBox.superclass.constructor.apply(this, arguments);
35 32
36 this._slots = {}; 33 this._slots = {};
37 this._isLocked = false; 34 this._isLocked = false;
38 this._lockTooltip = null; 35 this._lockTooltip = null;
39 36
40 return this; 37 return this;
41} 38}
42 39
43//============================================================================= 40//=============================================================================
44 41
45Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.UserInfoBox, Clipperz.PM.UI.Common.Components.BaseComponent, { 42Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.UserInfoBox, Clipperz.PM.UI.Common.Components.BaseComponent, {
46 43
47 //------------------------------------------------------------------------- 44 //-------------------------------------------------------------------------
48 45
49 'toString': function () { 46 'toString': function () {
50 return "Clipperz.PM.UI.Web.Components.UserInfoBox component"; 47 return "Clipperz.PM.UI.Web.Components.UserInfoBox component";
51 }, 48 },
52 49
53 //------------------------------------------------------------------------- 50 //-------------------------------------------------------------------------
54 51
55 'handleLogout': function(anEvent) { 52 'handleLogout': function(anEvent) {
56//Clipperz.log(">>> UserInfoBox.handleLogout"); 53//Clipperz.log(">>> UserInfoBox.handleLogout");
57 anEvent.preventDefault(); 54 anEvent.preventDefault();
58 MochiKit.Signal.signal(this, 'logout'); 55 MochiKit.Signal.signal(this, 'logout');
59//Clipperz.log("<<< UserInfoBox.handleLogout"); 56//Clipperz.log("<<< UserInfoBox.handleLogout");
60 }, 57 },
61 58
62 //------------------------------------------------------------------------- 59 //-------------------------------------------------------------------------
63 60
64 'lockTooltip': function () { 61 'lockTooltip': function () {
65 return this._lockTooltip; 62 return this._lockTooltip;
66 }, 63 },
67 64
68 //------------------------------------------------------------------------- 65 //-------------------------------------------------------------------------
69 66
70 'isLocked': function () { 67 'isLocked': function () {
71 return this._isLocked; 68 return this._isLocked;
72 }, 69 },
73 70
74 'setIsLocked': function (aValue) { 71 'setIsLocked': function (aValue) {
75 this._isLocked = aValue; 72 this._isLocked = aValue;
76 }, 73 },
77 74
78 'toggleLock': function(anEvent) { 75 'toggleLock': function(anEvent) {
79 var deferredResult; 76 var deferredResult;
80 var shouldLock; 77 var shouldLock;
81 78
82//console.log(">>> UserInfoBox.toggleLock [locked: " + this.isLocked() + "]"); 79//console.log(">>> UserInfoBox.toggleLock [locked: " + this.isLocked() + "]");
83 anEvent.preventDefault(); 80 anEvent.preventDefault();
84 this.lockTooltip().hide(); 81 this.lockTooltip().hide();
85 82
86 shouldLock = (this.isLocked() == false); 83 shouldLock = (this.isLocked() == false);
87 84
88 if (shouldLock) { 85 if (shouldLock) {
89 var maskElement; 86 var maskElement;
90 87
91 this.setIsLocked(true); 88 this.setIsLocked(true);
92 maskElement = this.getId('modalDialogMask'); 89 maskElement = this.getId('modalDialogMask');
93 deferredResult = Clipperz.Async.callbacks("UserInfoBox.toggleLock [lock]", [ 90 deferredResult = Clipperz.Async.callbacks("UserInfoBox.toggleLock [lock]", [
94 MochiKit.Base.partial(MochiKit.DOM.addElementClass, this.element(), 'locked'), 91 MochiKit.Base.partial(MochiKit.DOM.addElementClass, this.element(), 'locked'),
95 MochiKit.Base.partial(Clipperz.Visual.deferredAnimation, MochiKit.Visual.appear, maskElement, {from:0.0, to:0.75, duration:0.5}), 92 MochiKit.Base.partial(Clipperz.Visual.deferredAnimation, MochiKit.Visual.appear, maskElement, {from:0.0, to:0.75, duration:0.5}),
96 MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'setPassphraseDelegate', MochiKit.Base.method(this, 'askForPassphrase')), 93 MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'setPassphraseDelegate', MochiKit.Base.method(this, 'askForPassphrase')),
97 MochiKit.Base.partial(MochiKit.Signal.signal, this, 'lock') 94 MochiKit.Base.partial(MochiKit.Signal.signal, this, 'lock')
98 ], {trace:false}); 95 ], {trace:false});
99 } else { 96 } else {
100 deferredResult = Clipperz.Async.callbacks("UserInfoBox.toggleLock [unlock]", [ 97 deferredResult = Clipperz.Async.callbacks("UserInfoBox.toggleLock [unlock]", [
101 MochiKit.Base.partial(MochiKit.Signal.signal, this, 'unlock') 98 MochiKit.Base.partial(MochiKit.Signal.signal, this, 'unlock')
102 ], {trace:false}); 99 ], {trace:false});
103 } 100 }
104//console.log("<<< UserInfoBox.toggleLock"); 101//console.log("<<< UserInfoBox.toggleLock");
105 102
106 return deferredResult; 103 return deferredResult;
107 }, 104 },
108 105
109 //------------------------------------------------------------------------- 106 //-------------------------------------------------------------------------
110 107
111 'unlock': function () { 108 'unlock': function () {
112 var deferredResult; 109 var deferredResult;
113 var maskElement; 110 var maskElement;
114 111
115 this.setIsLocked(false); 112 this.setIsLocked(false);
116 maskElement = this.getId('modalDialogMask'); 113 maskElement = this.getId('modalDialogMask');
117 114
118 deferredResult = Clipperz.Async.callbacks("UserInfoBox.unlock", [ 115 deferredResult = Clipperz.Async.callbacks("UserInfoBox.unlock", [
119 MochiKit.Base.partial(Clipperz.Visual.deferredAnimation, MochiKit.Visual.fade, maskElement, {from:0.75, to:0.0, duration:0.5}), 116 MochiKit.Base.partial(Clipperz.Visual.deferredAnimation, MochiKit.Visual.fade, maskElement, {from:0.75, to:0.0, duration:0.5}),
120 // Clipperz.Visual.deferredAnimation(MochiKit.Visual.fade, maskElement, {from:0.75, to:0.0, duration:0.5}), 117 // Clipperz.Visual.deferredAnimation(MochiKit.Visual.fade, maskElement, {from:0.75, to:0.0, duration:0.5}),
121 MochiKit.Base.partial(MochiKit.DOM.removeElementClass, this.element(), 'locked') 118 MochiKit.Base.partial(MochiKit.DOM.removeElementClass, this.element(), 'locked')
122 ], {trace:false}); 119 ], {trace:false});
123 }, 120 },
124 121
125 //------------------------------------------------------------------------- 122 //-------------------------------------------------------------------------
126 123
127 'askForPassphrase': function () { 124 'askForPassphrase': function () {
128 varunlockPasswordComponent; 125 varunlockPasswordComponent;
129/* 126/*
130 vardeferredResult; 127 vardeferredResult;
131 128
132 deferredResult = new Clipperz.Async.Deferred("UserInfoBox.askForPassphrase", {trace:false}); 129 deferredResult = new Clipperz.Async.Deferred("UserInfoBox.askForPassphrase", {trace:false});
133 deferredResult.addCallback(MochiKit.Async.succeed, 'test'); 130 deferredResult.addCallback(MochiKit.Async.succeed, 'test');
134 131
135 deferredResult.callback(); 132 deferredResult.callback();
136 133
137 return deferredResult; 134 return deferredResult;
138*/ 135*/
139//console.log(">>> UserInfoBox.askForPassphrase"); 136//console.log(">>> UserInfoBox.askForPassphrase");
140 unlockPasswordComponent = new Clipperz.PM.UI.Web.Components.UnlockPasswordComponent({ 137 unlockPasswordComponent = new Clipperz.PM.UI.Web.Components.UnlockPasswordComponent({
141 'title':"Unlock account", 138 'title':"Unlock account",
142 'text': "Insert the passprase to unlock the account", 139 'text': "Insert the passprase to unlock the account",
143 'type': 'INFO', 140 'type': 'INFO',
144 'buttons': [ 141 'buttons': [
145 {text:"Cancel",result:'CANCEL'}, 142 {text:"Cancel",result:'CANCEL'},
146 {text:"Unlock", result:'OK',isDefault:true} 143 {text:"Unlock", result:'OK',isDefault:true}
147 ], 144 ],
148 'openFromElement': this.getElement('lock'), 145 'openFromElement': this.getElement('lock'),
149 'onOkCloseToElement': null, 146 'onOkCloseToElement': null,
150 'onCancelCloseToElement':this.getId('lock') 147 'onCancelCloseToElement':this.getId('lock')
151 }); 148 });
152//console.log("<<< UserInfoBox.askForPassphrase"); 149//console.log("<<< UserInfoBox.askForPassphrase");
153 150
154 return unlockPasswordComponent.getPassphrase(); 151 return unlockPasswordComponent.getPassphrase();
155 }, 152 },
156 153
157 //========================================================================= 154 //=========================================================================
158 155
159 'renderSelf': function(/*aContainer, aPosition*/) { 156 'renderSelf': function(/*aContainer, aPosition*/) {
160 this.append(this.element(), [ 157 this.append(this.element(), [
161 // {tag:'canvas', id:this.getId('canvas'), cls:'canvas', width:'188', height:'154'}, 158 // {tag:'canvas', id:this.getId('canvas'), cls:'canvas', width:'188', height:'154'},
162 {tag:'div', cls:'header', children:[ 159 {tag:'div', cls:'header', children:[
163 {tag:'h1', html:"Welcome"}, 160 {tag:'h1', html:"Welcome"},
164 {tag:'a', cls:'lockButton', href:'#', id:this.getId('lock'), html:'&nbsp;'} 161 {tag:'a', cls:'lockButton', href:'#', id:this.getId('lock'), html:'&nbsp;'}
165 ]}, 162 ]},
166 {tag:'div', cls:'body', children:[ 163 {tag:'div', cls:'body', children:[
167 {tag:'h3', id:this.getId('username'), html:""}, 164 {tag:'h3', id:this.getId('username'), html:""},
168 {tag:'ul', children:[ 165 {tag:'ul', children:[
169 {tag:'li', id:this.getId('cards'), children:[ 166 {tag:'li', id:this.getId('cards'), children:[
170 {tag:'span', id:this.getId('cardsNumber'), cls:'number', html:"-"}, 167 {tag:'span', id:this.getId('cardsNumber'), cls:'number', html:"-"},
171 {tag:'span', id:this.getId('cardsLabel'), html:"cards"} 168 {tag:'span', id:this.getId('cardsLabel'), html:"cards"}
172 ]}, 169 ]},
173 {tag:'li', id:this.getId('directLogins'), children:[ 170 {tag:'li', id:this.getId('directLogins'), children:[
174 {tag:'span', id:this.getId('directLoginsNumber'), cls:'number', html:"-"}, 171 {tag:'span', id:this.getId('directLoginsNumber'), cls:'number', html:"-"},
175 {tag:'span', id:this.getId('directLoginsLabel'), html:"direct logins"} 172 {tag:'span', id:this.getId('directLoginsLabel'), html:"direct logins"}
176 ]} 173 ]}
177 ]}, 174 ]},
178 {tag:'a', href:'#', id:this.getId('logout'), html:"logout >"} 175 {tag:'a', href:'#', id:this.getId('logout'), html:"logout >"}
179 ]}, 176 ]},
180 {tag:'div', cls:'footer'} 177 {tag:'div', cls:'footer'}
181 ]); 178 ]);
182 179
183 MochiKit.Signal.connect(this.getElement('logout'), 'onclick', this, 'handleLogout'); 180 MochiKit.Signal.connect(this.getElement('logout'), 'onclick', this, 'handleLogout');
184 MochiKit.Signal.connect(this.getElement('lock'), 'onclick', this, 'toggleLock'); 181 MochiKit.Signal.connect(this.getElement('lock'), 'onclick', this, 'toggleLock');
185 182
186 this._lockTooltip = new Clipperz.PM.UI.Common.Components.Tooltip({ 183 this._lockTooltip = new Clipperz.PM.UI.Common.Components.Tooltip({
187 element:this.getElement('lock'), 184 element:this.getElement('lock'),
188 text: "Click here to lock/unlock your account.", 185 text: "Click here to lock/unlock your account.",
189 position:'RIGHT' 186 position:'RIGHT'
190 }); 187 });
191 188
192 Clipperz.DOM.Helper.append(MochiKit.DOM.currentDocument().body, 189 Clipperz.DOM.Helper.append(MochiKit.DOM.currentDocument().body,
193 {tag:'div', id:this.getId('modalDialogWrapper'), cls:'modalDialogWrapper', children:[ 190 {tag:'div', id:this.getId('modalDialogWrapper'), cls:'modalDialogWrapper', children:[
194 {tag:'div', id:this.getId('modalDialogMask'), cls:'modalDialogMask userInfoBoxMask'} 191 {tag:'div', id:this.getId('modalDialogMask'), cls:'modalDialogMask userInfoBoxMask'}
195 ]} 192 ]}
196 ); 193 );
197 MochiKit.Style.hideElement(this.getId('modalDialogMask')); 194 MochiKit.Style.hideElement(this.getId('modalDialogMask'));
198 195
199 // this.drawUserInfoBackground(this.getElement('canvas')); 196 // this.drawUserInfoBackground(this.getElement('canvas'));
200 }, 197 },
201 198
202 //------------------------------------------------------------------------- 199 //-------------------------------------------------------------------------
203/* 200/*
204 'drawUserInfoBackground': function (canvas) { 201 'drawUserInfoBackground': function (canvas) {
205 var kMyDrawingFunctionWidth = 188.0; 202 var kMyDrawingFunctionWidth = 188.0;
206 var kMyDrawingFunctionHeight = 154.0; 203 var kMyDrawingFunctionHeight = 154.0;
207 204
208 var context = canvas.getContext("2d"); 205 var context = canvas.getContext("2d");
209 var color; 206 var color;
210 var resolution; 207 var resolution;
211 var alignStroke; 208 var alignStroke;
212 var path; 209 var path;
213 var pointX; 210 var pointX;
214 var pointY; 211 var pointY;
215 var controlPoint1X; 212 var controlPoint1X;
216 var controlPoint1Y; 213 var controlPoint1Y;
217 var controlPoint2X; 214 var controlPoint2X;
218 var controlPoint2Y; 215 var controlPoint2Y;
219 var gradient; 216 var gradient;
220 if (window.devicePixelRatio) 217 if (window.devicePixelRatio)
221 resolution = window.devicePixelRatio; 218 resolution = window.devicePixelRatio;
222 else 219 else
223 resolution = 1.0; 220 resolution = 1.0;
224 resolution *= 0.5 * (canvas.width / kMyDrawingFunctionWidth + canvas.height / kMyDrawingFunctionHeight); 221 resolution *= 0.5 * (canvas.width / kMyDrawingFunctionWidth + canvas.height / kMyDrawingFunctionHeight);
225 222
226 context.save(); 223 context.save();
227 context.scale(canvas.width / kMyDrawingFunctionWidth, canvas.height / kMyDrawingFunctionHeight); 224 context.scale(canvas.width / kMyDrawingFunctionWidth, canvas.height / kMyDrawingFunctionHeight);
228 context.clearRect(0.0, 0.0, kMyDrawingFunctionWidth, kMyDrawingFunctionHeight); 225 context.clearRect(0.0, 0.0, kMyDrawingFunctionWidth, kMyDrawingFunctionHeight);
229 226
230 // Setup for Shadow Effect 227 // Setup for Shadow Effect
231 color = "rgba(0.0%, 0.0%, 0.0%, 0.667)"; 228 color = "rgba(0.0%, 0.0%, 0.0%, 0.667)";
232 context.save(); 229 context.save();
233 context.shadowColor = color; 230 context.shadowColor = color;
234 context.shadowBlur = 3.0; 231 context.shadowBlur = 3.0;
235 context.shadowOffsetX = 5.729 * Math.cos(7.592) * resolution; 232 context.shadowOffsetX = 5.729 * Math.cos(7.592) * resolution;
236 context.shadowOffsetY = 5.729 * Math.sin(7.592) * resolution; 233 context.shadowOffsetY = 5.729 * Math.sin(7.592) * resolution;
237 234
238 // Layer 1 235 // Layer 1
239 236
240 alignStroke = 0.0; 237 alignStroke = 0.0;
241 context.beginPath(); 238 context.beginPath();
242 pointX = 169.5; 239 pointX = 169.5;
243 pointY = 141.5; 240 pointY = 141.5;
244 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 241 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
245 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 242 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
246 context.moveTo(pointX, pointY); 243 context.moveTo(pointX, pointY);
247 pointX = 177.5; 244 pointX = 177.5;
248 pointY = 133.5; 245 pointY = 133.5;
249 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 246 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
250 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 247 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
251 controlPoint1X = 173.889; 248 controlPoint1X = 173.889;
252 controlPoint1Y = 141.5; 249 controlPoint1Y = 141.5;
253 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 250 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
254 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 251 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
255 controlPoint2X = 177.5; 252 controlPoint2X = 177.5;
256 controlPoint2Y = 137.889; 253 controlPoint2Y = 137.889;
257 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 254 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
258 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 255 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
259 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 256 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
260 pointX = 177.5; 257 pointX = 177.5;
261 pointY = 19.5; 258 pointY = 19.5;
262 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 259 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
263 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 260 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
264 context.lineTo(pointX, pointY); 261 context.lineTo(pointX, pointY);
265 pointX = 169.5; 262 pointX = 169.5;
266 pointY = 11.5; 263 pointY = 11.5;
267 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 264 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
268 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 265 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
269 controlPoint1X = 177.5; 266 controlPoint1X = 177.5;
270 controlPoint1Y = 15.111; 267 controlPoint1Y = 15.111;
271 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 268 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
272 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 269 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
273 controlPoint2X = 173.889; 270 controlPoint2X = 173.889;
274 controlPoint2Y = 11.5; 271 controlPoint2Y = 11.5;
275 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 272 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
276 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 273 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
277 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 274 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
278 pointX = 18.5; 275 pointX = 18.5;
279 pointY = 11.5; 276 pointY = 11.5;
280 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 277 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
281 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 278 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
282 context.lineTo(pointX, pointY); 279 context.lineTo(pointX, pointY);
283 pointX = 10.5; 280 pointX = 10.5;
284 pointY = 19.5; 281 pointY = 19.5;
285 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 282 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
286 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 283 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
287 controlPoint1X = 14.111; 284 controlPoint1X = 14.111;
288 controlPoint1Y = 11.5; 285 controlPoint1Y = 11.5;
289 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 286 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
290 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 287 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
291 controlPoint2X = 10.5; 288 controlPoint2X = 10.5;
292 controlPoint2Y = 15.111; 289 controlPoint2Y = 15.111;
293 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 290 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
294 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 291 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
295 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 292 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
296 pointX = 10.5; 293 pointX = 10.5;
297 pointY = 133.5; 294 pointY = 133.5;
298 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 295 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
299 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 296 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
300 context.lineTo(pointX, pointY); 297 context.lineTo(pointX, pointY);
301 pointX = 18.5; 298 pointX = 18.5;
302 pointY = 141.5; 299 pointY = 141.5;
303 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 300 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
304 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 301 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
305 controlPoint1X = 10.5; 302 controlPoint1X = 10.5;
306 controlPoint1Y = 137.889; 303 controlPoint1Y = 137.889;
307 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution; 304 controlPoint1X = (Math.round(resolution * controlPoint1X + alignStroke) - alignStroke) / resolution;
308 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution; 305 controlPoint1Y = (Math.round(resolution * controlPoint1Y + alignStroke) - alignStroke) / resolution;
309 controlPoint2X = 14.111; 306 controlPoint2X = 14.111;
310 controlPoint2Y = 141.5; 307 controlPoint2Y = 141.5;
311 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution; 308 controlPoint2X = (Math.round(resolution * controlPoint2X + alignStroke) - alignStroke) / resolution;
312 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution; 309 controlPoint2Y = (Math.round(resolution * controlPoint2Y + alignStroke) - alignStroke) / resolution;
313 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY); 310 context.bezierCurveTo(controlPoint1X, controlPoint1Y, controlPoint2X, controlPoint2Y, pointX, pointY);
314 pointX = 169.5; 311 pointX = 169.5;
315 pointY = 141.5; 312 pointY = 141.5;
316 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution; 313 pointX = (Math.round(resolution * pointX + alignStroke) - alignStroke) / resolution;
317 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution; 314 pointY = (Math.round(resolution * pointY + alignStroke) - alignStroke) / resolution;
318 context.lineTo(pointX, pointY); 315 context.lineTo(pointX, pointY);
319 context.closePath(); 316 context.closePath();
320 gradient = context.createLinearGradient(94.0, 11.5, 94.0, 141.5); 317 gradient = context.createLinearGradient(94.0, 11.5, 94.0, 141.5);
321 color = "#EE9B69"; 318 color = "#EE9B69";
322 gradient.addColorStop(0.0, color); 319 gradient.addColorStop(0.0, color);
323 color = "#E38D62"; 320 color = "#E38D62";
324 gradient.addColorStop(1.0, color); 321 gradient.addColorStop(1.0, color);
325 context.fillStyle = gradient; 322 context.fillStyle = gradient;
326 context.fill(); 323 context.fill();
327 324
328 // Shadow Effect 325 // Shadow Effect
329 context.restore(); 326 context.restore();
330 327
331 context.restore(); 328 context.restore();
332 }, 329 },
333*/ 330*/
334 //------------------------------------------------------------------------- 331 //-------------------------------------------------------------------------
335 332
336 'updateUserDetails': function (someUserInfo) { 333 'updateUserDetails': function (someUserInfo) {
337 varelementName; 334 varelementName;
338 335
339 for (elementName in someUserInfo) { 336 for (elementName in someUserInfo) {
340 this.getElement(elementName).innerHTML = someUserInfo[elementName]; 337 this.getElement(elementName).innerHTML = someUserInfo[elementName];
341 } 338 }
342 }, 339 },
343 340
344 //------------------------------------------------------------------------- 341 //-------------------------------------------------------------------------
345 __syntaxFix__: "syntax fix" 342 __syntaxFix__: "syntax fix"
346}); 343});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js
index 05563bf..9a0e744 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js
@@ -1,329 +1,326 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers');
30 27
31Clipperz.PM.UI.Web.Controllers.AppController = function(args) { 28Clipperz.PM.UI.Web.Controllers.AppController = function(args) {
32 29
33 this._user = null; 30 this._user = null;
34 this._tabSlotNames = { 31 this._tabSlotNames = {
35 //tabName: slotName 32 //tabName: slotName
36 'cards': 'cardGrid', 33 'cards': 'cardGrid',
37 // 'directLogins':'directLoginGrid', 34 // 'directLogins':'directLoginGrid',
38 'account': 'accountPanel', 35 'account': 'accountPanel',
39 'data': 'dataPanel', 36 'data': 'dataPanel',
40 'tools': 'toolsPanel' 37 'tools': 'toolsPanel'
41 }; 38 };
42 39
43 //controllers 40 //controllers
44 this._cardsController= null; 41 this._cardsController= null;
45 //this._directLoginsController = null; 42 //this._directLoginsController = null;
46 this._filterController = null; //new Clipperz.PM.UI.Web.Controllers.FilterController(); 43 this._filterController = null; //new Clipperz.PM.UI.Web.Controllers.FilterController();
47 44
48 //components 45 //components
49 this._appPage = null; 46 this._appPage = null;
50 this._userInfoBox = null; 47 this._userInfoBox = null;
51 this._tabSidePanel = null; 48 this._tabSidePanel = null;
52 49
53 // MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'editCard', this, 'handleEditCard'); 50 // MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'editCard', this, 'handleEditCard');
54 // MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'deleteCard',this, 'handleDeleteCard'); 51 // MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'deleteCard',this, 'handleDeleteCard');
55 52
56 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'userDataSuccessfullySaved',this, 'userDataSuccessfullySavedHandler'); 53 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'userDataSuccessfullySaved',this, 'userDataSuccessfullySavedHandler');
57 54
58 return this; 55 return this;
59} 56}
60 57
61MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.AppController.prototype, { 58MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.AppController.prototype, {
62 59
63 'toString': function() { 60 'toString': function() {
64 return "Clipperz.PM.UI.Web.Controllers.AppController"; 61 return "Clipperz.PM.UI.Web.Controllers.AppController";
65 }, 62 },
66 63
67 //----------------------------------------------------------------------------- 64 //-----------------------------------------------------------------------------
68 65
69 'setUser': function(anUser) { 66 'setUser': function(anUser) {
70 this._user = anUser; 67 this._user = anUser;
71 }, 68 },
72 69
73 'user': function() { 70 'user': function() {
74 return this._user; 71 return this._user;
75 }, 72 },
76 73
77 //----------------------------------------------------------------------------- 74 //-----------------------------------------------------------------------------
78 /* 75 /*
79 'tabSlotNames': function() { 76 'tabSlotNames': function() {
80 return this._tabSlotNames; 77 return this._tabSlotNames;
81 }, 78 },
82*/ 79*/
83 'slotNameForTab': function(aTabName) { 80 'slotNameForTab': function(aTabName) {
84 return this._tabSlotNames[aTabName]; 81 return this._tabSlotNames[aTabName];
85 }, 82 },
86 83
87 'hideAllAppPageTabSlots': function() { 84 'hideAllAppPageTabSlots': function() {
88 var aTabName; 85 var aTabName;
89 86
90 for (aTabName in this._tabSlotNames) { 87 for (aTabName in this._tabSlotNames) {
91 this.appPage().hideSlot(this.slotNameForTab(aTabName)); 88 this.appPage().hideSlot(this.slotNameForTab(aTabName));
92 } 89 }
93 }, 90 },
94 91
95 //----------------------------------------------------------------------------- 92 //-----------------------------------------------------------------------------
96 93
97 'appPage': function() { 94 'appPage': function() {
98 if (this._appPage == null) { 95 if (this._appPage == null) {
99 this._appPage = new Clipperz.PM.UI.Web.Components.AppPage(); 96 this._appPage = new Clipperz.PM.UI.Web.Components.AppPage();
100 } 97 }
101 98
102 return this._appPage; 99 return this._appPage;
103 }, 100 },
104 101
105 //----------------------------------------------------------------------------- 102 //-----------------------------------------------------------------------------
106 103
107 'tabSidePanel': function() { 104 'tabSidePanel': function() {
108 if (this._tabSidePanel == null) { 105 if (this._tabSidePanel == null) {
109 this._tabSidePanel = new Clipperz.PM.UI.Web.Components.TabSidePanel(); 106 this._tabSidePanel = new Clipperz.PM.UI.Web.Components.TabSidePanel();
110 } 107 }
111 108
112 return this._tabSidePanel; 109 return this._tabSidePanel;
113 }, 110 },
114 111
115 //----------------------------------------------------------------------------- 112 //-----------------------------------------------------------------------------
116 113
117 'userInfoBox': function() { 114 'userInfoBox': function() {
118 if (this._userInfoBox == null) { 115 if (this._userInfoBox == null) {
119 this._userInfoBox = new Clipperz.PM.UI.Web.Components.UserInfoBox(); 116 this._userInfoBox = new Clipperz.PM.UI.Web.Components.UserInfoBox();
120 117
121 MochiKit.Signal.connect(this._userInfoBox, 'logout',this, 'handleLogout'); 118 MochiKit.Signal.connect(this._userInfoBox, 'logout',this, 'handleLogout');
122 MochiKit.Signal.connect(this._userInfoBox, 'lock', this, 'handleLock'); 119 MochiKit.Signal.connect(this._userInfoBox, 'lock', this, 'handleLock');
123 MochiKit.Signal.connect(this._userInfoBox, 'unlock',this, 'handleUnlock'); 120 MochiKit.Signal.connect(this._userInfoBox, 'unlock',this, 'handleUnlock');
124 } 121 }
125 122
126 return this._userInfoBox; 123 return this._userInfoBox;
127 }, 124 },
128 125
129 //----------------------------------------------------------------------------- 126 //-----------------------------------------------------------------------------
130 127
131 'accountPanel': function () { 128 'accountPanel': function () {
132 if (this._accountPanel == null) { 129 if (this._accountPanel == null) {
133 this._accountPanel = new Clipperz.PM.UI.Web.Components.AccountPanel(/*{selected:'Preferences'}*/); 130 this._accountPanel = new Clipperz.PM.UI.Web.Components.AccountPanel(/*{selected:'Preferences'}*/);
134 } 131 }
135 132
136 return this._accountPanel; 133 return this._accountPanel;
137 }, 134 },
138 135
139 //......................................................................... 136 //.........................................................................
140 137
141 'dataPanel': function () { 138 'dataPanel': function () {
142 if (this._dataPanel == null) { 139 if (this._dataPanel == null) {
143 this._dataPanel = new Clipperz.PM.UI.Web.Components.DataPanel(); 140 this._dataPanel = new Clipperz.PM.UI.Web.Components.DataPanel();
144 } 141 }
145 142
146 return this._dataPanel; 143 return this._dataPanel;
147 }, 144 },
148 145
149 //......................................................................... 146 //.........................................................................
150 147
151 'toolsPanel': function () { 148 'toolsPanel': function () {
152 if (this._toolsPanel == null) { 149 if (this._toolsPanel == null) {
153 this._toolsPanel = new Clipperz.PM.UI.Web.Components.ToolsPanel(); 150 this._toolsPanel = new Clipperz.PM.UI.Web.Components.ToolsPanel();
154 } 151 }
155 152
156 return this._toolsPanel; 153 return this._toolsPanel;
157 }, 154 },
158 155
159 //----------------------------------------------------------------------------- 156 //-----------------------------------------------------------------------------
160 157
161 'filterController': function () { 158 'filterController': function () {
162 if (this._filterController == null) { 159 if (this._filterController == null) {
163 this._filterController = new Clipperz.PM.UI.Web.Controllers.FilterController(); 160 this._filterController = new Clipperz.PM.UI.Web.Controllers.FilterController();
164 } 161 }
165 162
166 return this._filterController; 163 return this._filterController;
167 }, 164 },
168 165
169 'cardsController': function() { 166 'cardsController': function() {
170 if (this._cardsController == null) { 167 if (this._cardsController == null) {
171 this._cardsController = new Clipperz.PM.UI.Web.Controllers.CardsController({'filterController':this._filterController}); 168 this._cardsController = new Clipperz.PM.UI.Web.Controllers.CardsController({'filterController':this._filterController});
172 } 169 }
173 170
174 return this._cardsController; 171 return this._cardsController;
175 }, 172 },
176 173
177 //----------------------------------------------------------------------------- 174 //-----------------------------------------------------------------------------
178/* 175/*
179 'directLoginsController': function() { 176 'directLoginsController': function() {
180//Clipperz.log(">>> AppController.directLoginsController"); 177//Clipperz.log(">>> AppController.directLoginsController");
181 if (this._directLoginsController == null) { 178 if (this._directLoginsController == null) {
182 this._directLoginsController = new Clipperz.PM.UI.Web.Controllers.DirectLoginsController({'filterController':this._filterController}); 179 this._directLoginsController = new Clipperz.PM.UI.Web.Controllers.DirectLoginsController({'filterController':this._filterController});
183 } 180 }
184//Clipperz.log("<<< AppController.directLoginsController"); 181//Clipperz.log("<<< AppController.directLoginsController");
185 182
186 return this._directLoginsController; 183 return this._directLoginsController;
187 }, 184 },
188*/ 185*/
189 //----------------------------------------------------------------------------- 186 //-----------------------------------------------------------------------------
190 187
191 'populateUserInfo': function() { 188 'populateUserInfo': function() {
192 var deferredResult; 189 var deferredResult;
193 190
194 deferredResult = new Clipperz.Async.Deferred("AppController.populateUserInfo", {trace:false}); 191 deferredResult = new Clipperz.Async.Deferred("AppController.populateUserInfo", {trace:false});
195 deferredResult.collectResults({ 192 deferredResult.collectResults({
196 'username':MochiKit.Base.methodcaller('displayName'), 193 'username':MochiKit.Base.methodcaller('displayName'),
197 'cardsNumber':[ 194 'cardsNumber':[
198 MochiKit.Base.methodcaller('getRecords'), 195 MochiKit.Base.methodcaller('getRecords'),
199 function (someResults) { return someResults.length; } 196 function (someResults) { return someResults.length; }
200 ], 197 ],
201 'directLoginsNumber': [ 198 'directLoginsNumber': [
202 MochiKit.Base.methodcaller('getDirectLogins'), 199 MochiKit.Base.methodcaller('getDirectLogins'),
203 function (someResults) { return someResults.length; } 200 function (someResults) { return someResults.length; }
204 ] 201 ]
205 }) 202 })
206 deferredResult.addMethod(this.userInfoBox(), 'updateUserDetails'); 203 deferredResult.addMethod(this.userInfoBox(), 'updateUserDetails');
207 deferredResult.callback(this.user()); 204 deferredResult.callback(this.user());
208 205
209 return deferredResult; 206 return deferredResult;
210 }, 207 },
211 208
212 //----------------------------------------------------------------------------- 209 //-----------------------------------------------------------------------------
213 210
214 'run': function(args) { 211 'run': function(args) {
215 var deferredResult; 212 var deferredResult;
216 varslot; 213 varslot;
217 varpage; 214 varpage;
218 var user; 215 var user;
219 216
220 slot = args.slot; 217 slot = args.slot;
221 user = args.user; 218 user = args.user;
222 219
223 this.setUser(user); 220 this.setUser(user);
224 221
225 slot.setContent(this.appPage()); 222 slot.setContent(this.appPage());
226 223
227 this.appPage().slotNamed('userInfoBox').setContent(this.userInfoBox()); 224 this.appPage().slotNamed('userInfoBox').setContent(this.userInfoBox());
228 this.appPage().slotNamed('tabSidePanel').setContent(this.tabSidePanel()); 225 this.appPage().slotNamed('tabSidePanel').setContent(this.tabSidePanel());
229 226
230 this.appPage().slotNamed('accountPanel').setContent(this.accountPanel()); 227 this.appPage().slotNamed('accountPanel').setContent(this.accountPanel());
231 this.appPage().slotNamed('dataPanel').setContent(this.dataPanel()); 228 this.appPage().slotNamed('dataPanel').setContent(this.dataPanel());
232 this.appPage().slotNamed('toolsPanel').setContent(this.toolsPanel()); 229 this.appPage().slotNamed('toolsPanel').setContent(this.toolsPanel());
233 230
234 this.hideAllAppPageTabSlots(); 231 this.hideAllAppPageTabSlots();
235 this.appPage().showSlot(this.slotNameForTab('cards')); 232 this.appPage().showSlot(this.slotNameForTab('cards'));
236 233
237 MochiKit.Signal.connect(this.tabSidePanel(), 'tabSelected',this, 'handleTabSelected'); 234 MochiKit.Signal.connect(this.tabSidePanel(), 'tabSelected',this, 'handleTabSelected');
238 MochiKit.Signal.connect(this.tabSidePanel(), 'addCard', this, 'handleAddCard'); 235 MochiKit.Signal.connect(this.tabSidePanel(), 'addCard', this, 'handleAddCard');
239 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'addCard', this, 'handleAddCard'); 236 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'addCard', this, 'handleAddCard');
240 237
241 deferredResult = new Clipperz.Async.Deferred("AppController.run", {trace:false}); 238 deferredResult = new Clipperz.Async.Deferred("AppController.run", {trace:false});
242 239
243 deferredResult.addMethod(this.cardsController(), 'run', {slot:this.appPage().slotNamed('cardGrid'), user:user}); 240 deferredResult.addMethod(this.cardsController(), 'run', {slot:this.appPage().slotNamed('cardGrid'), user:user});
244 // deferredResult.addMethod(this.directLoginsController(), 'run', {slot:this.appPage().slotNamed('directLoginGrid'), user:user}); 241 // deferredResult.addMethod(this.directLoginsController(), 'run', {slot:this.appPage().slotNamed('directLoginGrid'), user:user});
245 deferredResult.addMethod(this, 'populateUserInfo'); 242 deferredResult.addMethod(this, 'populateUserInfo');
246 243
247 deferredResult.addCallback(MochiKit.Visual.ScrollTo, 'miscLinks', {duration:0}); 244 deferredResult.addCallback(MochiKit.Visual.ScrollTo, 'miscLinks', {duration:0});
248 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN'); 245 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN');
249 deferredResult.addMethod(this.tabSidePanel(), 'selectTab', 'cards'); 246 deferredResult.addMethod(this.tabSidePanel(), 'selectTab', 'cards');
250 deferredResult.callback(); 247 deferredResult.callback();
251 }, 248 },
252 249
253 //----------------------------------------------------------------------------- 250 //-----------------------------------------------------------------------------
254 251
255 'handleTabSelected': function (selectedTabName) { 252 'handleTabSelected': function (selectedTabName) {
256 var aTabName; 253 var aTabName;
257 var aSlotName; 254 var aSlotName;
258 255
259//Clipperz.log(">>> AppController.handleTabSelected", selectedTabName); 256//Clipperz.log(">>> AppController.handleTabSelected", selectedTabName);
260 this.hideAllAppPageTabSlots(); 257 this.hideAllAppPageTabSlots();
261 this.appPage().showSlot(this.slotNameForTab(selectedTabName)); 258 this.appPage().showSlot(this.slotNameForTab(selectedTabName));
262 259
263 switch (selectedTabName) { 260 switch (selectedTabName) {
264 case 'cards': 261 case 'cards':
265 this.cardsController().focus(); 262 this.cardsController().focus();
266 break; 263 break;
267 // case 'directLogins': 264 // case 'directLogins':
268 // this.directLoginsController().focus(); 265 // this.directLoginsController().focus();
269 // break; 266 // break;
270 case 'data': 267 case 'data':
271 break; 268 break;
272 case 'account': 269 case 'account':
273 break; 270 break;
274 case 'tools': 271 case 'tools':
275 break; 272 break;
276 } 273 }
277//Clipperz.log("<-- AppController.handleTabSelected", aTabName); 274//Clipperz.log("<-- AppController.handleTabSelected", aTabName);
278 }, 275 },
279 276
280 //============================================================================= 277 //=============================================================================
281 278
282 'handleAddCard': function (aSourceElement) { 279 'handleAddCard': function (aSourceElement) {
283//Clipperz.log("=== AppController.addCard", aSourceElement); 280//Clipperz.log("=== AppController.addCard", aSourceElement);
284 this.cardsController().addCard(aSourceElement); 281 this.cardsController().addCard(aSourceElement);
285 }, 282 },
286 283
287 //============================================================================= 284 //=============================================================================
288 285
289 'userDataSuccessfullySavedHandler': function (anEvent) { 286 'userDataSuccessfullySavedHandler': function (anEvent) {
290 this.populateUserInfo(); 287 this.populateUserInfo();
291 }, 288 },
292 289
293 //============================================================================= 290 //=============================================================================
294 291
295 'handleLogout': function(anEvent) { 292 'handleLogout': function(anEvent) {
296 var deferredResult; 293 var deferredResult;
297 294
298 deferredResult = new Clipperz.Async.Deferred("AppController.handleLogout", {trace:false}); 295 deferredResult = new Clipperz.Async.Deferred("AppController.handleLogout", {trace:false});
299 deferredResult.addMethod(this.user(), 'logout'); 296 deferredResult.addMethod(this.user(), 'logout');
300 deferredResult.addCallback(MochiKit.Signal.signal, this, 'logout'); 297 deferredResult.addCallback(MochiKit.Signal.signal, this, 'logout');
301 deferredResult.callback(); 298 deferredResult.callback();
302 299
303 return deferredResult; 300 return deferredResult;
304 }, 301 },
305 302
306 //----------------------------------------------------------------------------- 303 //-----------------------------------------------------------------------------
307 304
308 'handleLock': function (anEvent) { 305 'handleLock': function (anEvent) {
309 return Clipperz.Async.callbacks("AppController.handleLock", [ 306 return Clipperz.Async.callbacks("AppController.handleLock", [
310 MochiKit.Base.method(this.cardsController(), 'deleteAllCleanTextData'), 307 MochiKit.Base.method(this.cardsController(), 'deleteAllCleanTextData'),
311 MochiKit.Base.method(this.user(), 'lock') 308 MochiKit.Base.method(this.user(), 'lock')
312 ], {trace:false}); 309 ], {trace:false});
313 }, 310 },
314 311
315 //............................................................................. 312 //.............................................................................
316 313
317 'handleUnlock': function (anEvent) { 314 'handleUnlock': function (anEvent) {
318 return Clipperz.Async.callbacks("AppController.handleUnock", [ 315 return Clipperz.Async.callbacks("AppController.handleUnock", [
319 MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress'), 316 MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress'),
320 MochiKit.Base.method(this.user(), 'login'), 317 MochiKit.Base.method(this.user(), 'login'),
321 MochiKit.Base.method(this.cardsController(), 'focus'), 318 MochiKit.Base.method(this.cardsController(), 'focus'),
322 MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'progressDone'), 319 MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'progressDone'),
323 MochiKit.Base.method(this.userInfoBox(), 'unlock') 320 MochiKit.Base.method(this.userInfoBox(), 'unlock')
324 ], {trace:false}); 321 ], {trace:false});
325 }, 322 },
326 323
327 //============================================================================= 324 //=============================================================================
328 __syntaxFix__: "syntax fix" 325 __syntaxFix__: "syntax fix"
329}); 326});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/CardDialogController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/CardDialogController.js
index 2340aeb..effde31 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/CardDialogController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/CardDialogController.js
@@ -1,408 +1,405 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers');
30 27
31Clipperz.PM.UI.Web.Controllers.CardDialogController = function(args) { 28Clipperz.PM.UI.Web.Controllers.CardDialogController = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Controllers.CardDialogController.superclass.constructor.call(this, args); 31 Clipperz.PM.UI.Web.Controllers.CardDialogController.superclass.constructor.call(this, args);
35 32
36 this._record = args.record || Clipperz.Base.exception.raise('MandatoryParameter'); 33 this._record = args.record || Clipperz.Base.exception.raise('MandatoryParameter');
37 this._delegate = args.delegate || Clipperz.Base.exception.raise('MandatoryParameter'); 34 this._delegate = args.delegate || Clipperz.Base.exception.raise('MandatoryParameter');
38 35
39 this._referenceElement = null; 36 this._referenceElement = null;
40 this._cardDialogComponent = null; 37 this._cardDialogComponent = null;
41 38
42 this._fieldsReferences = {}; 39 this._fieldsReferences = {};
43 this._directLoginReferences = {}; 40 this._directLoginReferences = {};
44 41
45 this._directLoginWizardController = null; 42 this._directLoginWizardController = null;
46 this._directLoginEditingComponent = null; 43 this._directLoginEditingComponent = null;
47 this._isDirectLoginEditingComponentVisible = false; 44 this._isDirectLoginEditingComponentVisible = false;
48 45
49 return this; 46 return this;
50}; 47};
51 48
52Clipperz.Base.extend(Clipperz.PM.UI.Web.Controllers.CardDialogController, Object, { 49Clipperz.Base.extend(Clipperz.PM.UI.Web.Controllers.CardDialogController, Object, {
53 50
54 'toString': function() { 51 'toString': function() {
55 return "Clipperz.PM.UI.Web.Controllers.CardDialogController"; 52 return "Clipperz.PM.UI.Web.Controllers.CardDialogController";
56 }, 53 },
57 54
58 //------------------------------------------------------------------------- 55 //-------------------------------------------------------------------------
59 56
60 'record': function () { 57 'record': function () {
61 return this._record; 58 return this._record;
62 }, 59 },
63 60
64 'delegate': function () { 61 'delegate': function () {
65 return this._delegate; 62 return this._delegate;
66 }, 63 },
67 64
68 //------------------------------------------------------------------------- 65 //-------------------------------------------------------------------------
69 66
70 'fieldsReferences': function () { 67 'fieldsReferences': function () {
71 return this._fieldsReferences; 68 return this._fieldsReferences;
72 }, 69 },
73 70
74 'directLoginReferences': function () { 71 'directLoginReferences': function () {
75 return this._directLoginReferences; 72 return this._directLoginReferences;
76 }, 73 },
77 74
78 //------------------------------------------------------------------------- 75 //-------------------------------------------------------------------------
79 76
80 'referenceElement': function () { 77 'referenceElement': function () {
81 return this._referenceElement; 78 return this._referenceElement;
82 }, 79 },
83 80
84 'setReferenceElement': function (anElement) { 81 'setReferenceElement': function (anElement) {
85 this._referenceElement = anElement; 82 this._referenceElement = anElement;
86 }, 83 },
87 84
88 //------------------------------------------------------------------------- 85 //-------------------------------------------------------------------------
89 86
90 'cardDialogComponent': function () { 87 'cardDialogComponent': function () {
91 if (this._cardDialogComponent == null) { 88 if (this._cardDialogComponent == null) {
92 this._cardDialogComponent = new Clipperz.PM.UI.Web.Components.CardDialogComponent(); 89 this._cardDialogComponent = new Clipperz.PM.UI.Web.Components.CardDialogComponent();
93 90
94 MochiKit.Signal.connect(this._cardDialogComponent, 'cancel', this, 'handleCancel'); 91 MochiKit.Signal.connect(this._cardDialogComponent, 'cancel', this, 'handleCancel');
95 MochiKit.Signal.connect(this._cardDialogComponent, 'save', this, 'handleSave'); 92 MochiKit.Signal.connect(this._cardDialogComponent, 'save', this, 'handleSave');
96 93
97 MochiKit.Signal.connect(this._cardDialogComponent, 'addField', this, 'handleAddField'); 94 MochiKit.Signal.connect(this._cardDialogComponent, 'addField', this, 'handleAddField');
98 MochiKit.Signal.connect(this._cardDialogComponent, 'changedValue',this, 'handleChangedValue'); 95 MochiKit.Signal.connect(this._cardDialogComponent, 'changedValue',this, 'handleChangedValue');
99 96
100 MochiKit.Signal.connect(this._cardDialogComponent, 'addDirectLogin',this, 'handleAddDirectLogin'); 97 MochiKit.Signal.connect(this._cardDialogComponent, 'addDirectLogin',this, 'handleAddDirectLogin');
101 MochiKit.Signal.connect(this._cardDialogComponent, 'keyPressed',this, 'handleCardDialogComponentKeyPressed'); 98 MochiKit.Signal.connect(this._cardDialogComponent, 'keyPressed',this, 'handleCardDialogComponentKeyPressed');
102 } 99 }
103 100
104 return this._cardDialogComponent; 101 return this._cardDialogComponent;
105 }, 102 },
106 103
107 //========================================================================= 104 //=========================================================================
108 105
109 'directLoginWizardController': function () { 106 'directLoginWizardController': function () {
110 if (this._directLoginWizardController == null) { 107 if (this._directLoginWizardController == null) {
111 this._directLoginWizardController = new Clipperz.PM.UI.Web.Controllers.DirectLoginWizardController({ 108 this._directLoginWizardController = new Clipperz.PM.UI.Web.Controllers.DirectLoginWizardController({
112 'cardLabel': this.cardDialogComponent().title(), 109 'cardLabel': this.cardDialogComponent().title(),
113 'directLoginEditingComponent': this.directLoginEditingComponent() 110 'directLoginEditingComponent': this.directLoginEditingComponent()
114 }) 111 })
115 112
116 MochiKit.Signal.connect(this._directLoginWizardController, 'exit',this, 'handleHideDirectLoginEditingComponent'); 113 MochiKit.Signal.connect(this._directLoginWizardController, 'exit',this, 'handleHideDirectLoginEditingComponent');
117 MochiKit.Signal.connect(this._directLoginWizardController, 'done',this, 'handleCompleteDirectLoginEditingComponent'); 114 MochiKit.Signal.connect(this._directLoginWizardController, 'done',this, 'handleCompleteDirectLoginEditingComponent');
118 } 115 }
119 116
120 return this._directLoginWizardController; 117 return this._directLoginWizardController;
121 }, 118 },
122 119
123 //------------------------------------------------------------------------- 120 //-------------------------------------------------------------------------
124 121
125 'directLoginEditingComponent': function () { 122 'directLoginEditingComponent': function () {
126 if (this._directLoginEditingComponent == null) { 123 if (this._directLoginEditingComponent == null) {
127 this._directLoginEditingComponent = new Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent(); 124 this._directLoginEditingComponent = new Clipperz.PM.UI.Web.Components.DirectLoginEditingComponent();
128 125
129 this.cardDialogComponent().renderDirectLoginEditingComponent(this._directLoginEditingComponent); 126 this.cardDialogComponent().renderDirectLoginEditingComponent(this._directLoginEditingComponent);
130 127
131 // MochiKit.Signal.connect(this._directLoginEditingComponent, 'back', this, 'handleHideDirectLoginEditingComponent') 128 // MochiKit.Signal.connect(this._directLoginEditingComponent, 'back', this, 'handleHideDirectLoginEditingComponent')
132 // MochiKit.Signal.connect(this._directLoginEditingComponent, 'changedValue',this, 'handleChangedValue'); 129 // MochiKit.Signal.connect(this._directLoginEditingComponent, 'changedValue',this, 'handleChangedValue');
133 // MochiKit.Signal.connect(this.__directLoginEditingComponent, 'keyPressed',this, 'handleDirectLoginEditingComponentKeyPressed'); 130 // MochiKit.Signal.connect(this.__directLoginEditingComponent, 'keyPressed',this, 'handleDirectLoginEditingComponentKeyPressed');
134 } 131 }
135 132
136 return this._directLoginEditingComponent; 133 return this._directLoginEditingComponent;
137 }, 134 },
138 135
139 //------------------------------------------------------------------------- 136 //-------------------------------------------------------------------------
140 137
141 'isDirectLoginEditingComponentVisible': function () { 138 'isDirectLoginEditingComponentVisible': function () {
142 return this._isDirectLoginEditingComponentVisible; 139 return this._isDirectLoginEditingComponentVisible;
143 }, 140 },
144 141
145 'setIsDirectLoginEditingComponentVisible': function (aValue) { 142 'setIsDirectLoginEditingComponentVisible': function (aValue) {
146 this._isDirectLoginEditingComponentVisible = aValue; 143 this._isDirectLoginEditingComponentVisible = aValue;
147 }, 144 },
148 145
149 //========================================================================= 146 //=========================================================================
150 147
151 'run': function (anElement) { 148 'run': function (anElement) {
152 var deferredResult; 149 var deferredResult;
153 150
154 this.setReferenceElement(anElement); 151 this.setReferenceElement(anElement);
155 152
156 deferredResult = new Clipperz.Async.Deferred("CardDialogController.run", {trace:false}); 153 deferredResult = new Clipperz.Async.Deferred("CardDialogController.run", {trace:false});
157 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':11}); 154 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':11});
158 155
159 deferredResult.addMethod(this.cardDialogComponent(), 'deferredShowModal', {openFromElement:this.referenceElement()}); 156 deferredResult.addMethod(this.cardDialogComponent(), 'deferredShowModal', {openFromElement:this.referenceElement()});
160 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); 157 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress');
161 158
162 deferredResult.addMethod(this.record(), 'label'); 159 deferredResult.addMethod(this.record(), 'label');
163 deferredResult.addMethod(this.cardDialogComponent(), 'setTitle'); 160 deferredResult.addMethod(this.cardDialogComponent(), 'setTitle');
164 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); 161 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress');
165 162
166 deferredResult.addMethod(this, 'updateComponentState'); 163 deferredResult.addMethod(this, 'updateComponentState');
167 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress'); 164 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'advanceProgress');
168 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'progressDone'); 165 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'progressDone');
169 166
170 deferredResult.addMethod(this.cardDialogComponent(), 'fixRendering'); 167 deferredResult.addMethod(this.cardDialogComponent(), 'fixRendering');
171 deferredResult.addMethod(this.cardDialogComponent(), 'hideProgressMask'); 168 deferredResult.addMethod(this.cardDialogComponent(), 'hideProgressMask');
172 169
173 if (this.record().isBrandNew()) { 170 if (this.record().isBrandNew()) {
174 deferredResult.addMethod(this.cardDialogComponent(), 'setHintMode', 'ON'); 171 deferredResult.addMethod(this.cardDialogComponent(), 'setHintMode', 'ON');
175 deferredResult.addMethod(this.cardDialogComponent(), 'setFocusOnTitleField'); 172 deferredResult.addMethod(this.cardDialogComponent(), 'setFocusOnTitleField');
176 } 173 }
177 174
178 deferredResult.addErrback(MochiKit.Base.method(this.cardDialogComponent(), 'showError')); 175 deferredResult.addErrback(MochiKit.Base.method(this.cardDialogComponent(), 'showError'));
179 deferredResult.callback(); 176 deferredResult.callback();
180 177
181 return deferredResult; 178 return deferredResult;
182 }, 179 },
183 180
184 //========================================================================= 181 //=========================================================================
185 182
186 'updateComponentState': function () { 183 'updateComponentState': function () {
187 return Clipperz.Async.callbacks("CardDialogController.updateComponentState", [ 184 return Clipperz.Async.callbacks("CardDialogController.updateComponentState", [
188 MochiKit.Base.method(this.record(), 'hasPendingChanges'), 185 MochiKit.Base.method(this.record(), 'hasPendingChanges'),
189 MochiKit.Base.method(this.cardDialogComponent(), 'setShouldEnableSaving'), 186 MochiKit.Base.method(this.cardDialogComponent(), 'setShouldEnableSaving'),
190 187
191 MochiKit.Base.method(this.record(), 'label'), 188 MochiKit.Base.method(this.record(), 'label'),
192 MochiKit.Base.method(this.cardDialogComponent(), 'setTitle'), 189 MochiKit.Base.method(this.cardDialogComponent(), 'setTitle'),
193 MochiKit.Base.method(this.record(), 'notes'), 190 MochiKit.Base.method(this.record(), 'notes'),
194 MochiKit.Base.method(this.cardDialogComponent(), 'setNotes'), 191 MochiKit.Base.method(this.cardDialogComponent(), 'setNotes'),
195 192
196 MochiKit.Base.method(this.record(), 'fields'), 193 MochiKit.Base.method(this.record(), 'fields'),
197 MochiKit.Base.values, 194 MochiKit.Base.values,
198 MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addCardDialogComponentWithField')), 195 MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addCardDialogComponentWithField')),
199 196
200 MochiKit.Base.method(this.record(), 'directLogins'), 197 MochiKit.Base.method(this.record(), 'directLogins'),
201 MochiKit.Base.values, 198 MochiKit.Base.values,
202 MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addCardDialogComponentWithDirectLogin')), 199 MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addCardDialogComponentWithDirectLogin')),
203 200
204 MochiKit.Base.method(this.cardDialogComponent(), 'resetNewFieldInputs'), 201 MochiKit.Base.method(this.cardDialogComponent(), 'resetNewFieldInputs'),
205 MochiKit.Base.noop 202 MochiKit.Base.noop
206 ], {trace:false}); 203 ], {trace:false});
207 }, 204 },
208 205
209 //------------------------------------------------------------------------- 206 //-------------------------------------------------------------------------
210 207
211 'addCardDialogComponentWithField': function (aField) { 208 'addCardDialogComponentWithField': function (aField) {
212 varfieldComponent; 209 varfieldComponent;
213 210
214 fieldComponent = new Clipperz.PM.UI.Web.Components.CardDialogRecordFieldComponent({reference: aField.reference()}); 211 fieldComponent = new Clipperz.PM.UI.Web.Components.CardDialogRecordFieldComponent({reference: aField.reference()});
215 MochiKit.Signal.connect(fieldComponent, 'changedValue',this, 'handleChangedValue'); 212 MochiKit.Signal.connect(fieldComponent, 'changedValue',this, 'handleChangedValue');
216 MochiKit.Signal.connect(fieldComponent, 'performAction',this, 'handlePerformFieldAction'); 213 MochiKit.Signal.connect(fieldComponent, 'performAction',this, 'handlePerformFieldAction');
217 MochiKit.Signal.connect(fieldComponent, 'deleteField',this, 'handleDeleteField'); 214 MochiKit.Signal.connect(fieldComponent, 'deleteField',this, 'handleDeleteField');
218 215
219 // this.fieldsReferences().push({'field':aField, 'component':fieldComponent}); 216 // this.fieldsReferences().push({'field':aField, 'component':fieldComponent});
220 this.fieldsReferences()[aField.reference()] = {'field':aField, 'component':fieldComponent}; 217 this.fieldsReferences()[aField.reference()] = {'field':aField, 'component':fieldComponent};
221 218
222 return Clipperz.Async.callbacks("CardDialogController.addCardDialogComponentWithField", [ 219 return Clipperz.Async.callbacks("CardDialogController.addCardDialogComponentWithField", [
223 MochiKit.Base.method(this.cardDialogComponent(), 'addFieldRowComponent', fieldComponent), 220 MochiKit.Base.method(this.cardDialogComponent(), 'addFieldRowComponent', fieldComponent),
224 221
225 MochiKit.Base.method(aField, 'label'), 222 MochiKit.Base.method(aField, 'label'),
226 MochiKit.Base.method(fieldComponent, 'setLabel'), 223 MochiKit.Base.method(fieldComponent, 'setLabel'),
227 MochiKit.Base.method(aField, 'value'), 224 MochiKit.Base.method(aField, 'value'),
228 MochiKit.Base.method(fieldComponent, 'setValue'), 225 MochiKit.Base.method(fieldComponent, 'setValue'),
229 MochiKit.Base.method(aField, 'actionType'), 226 MochiKit.Base.method(aField, 'actionType'),
230 MochiKit.Base.method(fieldComponent, 'setActionType'), 227 MochiKit.Base.method(fieldComponent, 'setActionType'),
231 MochiKit.Base.method(aField, 'isHidden'), 228 MochiKit.Base.method(aField, 'isHidden'),
232 MochiKit.Base.method(fieldComponent, 'setIsHidden') 229 MochiKit.Base.method(fieldComponent, 'setIsHidden')
233 ], {trace:false}); 230 ], {trace:false});
234 }, 231 },
235 232
236 //------------------------------------------------------------------------- 233 //-------------------------------------------------------------------------
237 234
238 'addCardDialogComponentWithDirectLogin': function (aDirectLogin) { 235 'addCardDialogComponentWithDirectLogin': function (aDirectLogin) {
239 var directLoginComponent; 236 var directLoginComponent;
240 237
241 directLoginComponent = new Clipperz.PM.UI.Web.Components.CardDialogRecordDirectLoginComponent({reference: aDirectLogin.reference()}); 238 directLoginComponent = new Clipperz.PM.UI.Web.Components.CardDialogRecordDirectLoginComponent({reference: aDirectLogin.reference()});
242 MochiKit.Signal.connect(directLoginComponent, 'changedValue', this, 'handleChangedValue'); 239 MochiKit.Signal.connect(directLoginComponent, 'changedValue', this, 'handleChangedValue');
243 MochiKit.Signal.connect(directLoginComponent, 'deleteDirectLogin',this, 'handleDeleteDirectLogin'); 240 MochiKit.Signal.connect(directLoginComponent, 'deleteDirectLogin',this, 'handleDeleteDirectLogin');
244 MochiKit.Signal.connect(directLoginComponent, 'editDirectLogin',this, 'handleEditDirectLogin'); 241 MochiKit.Signal.connect(directLoginComponent, 'editDirectLogin',this, 'handleEditDirectLogin');
245 MochiKit.Signal.connect(directLoginComponent, 'openDirectLogin',this, 'handleOpenDirectLogin'); 242 MochiKit.Signal.connect(directLoginComponent, 'openDirectLogin',this, 'handleOpenDirectLogin');
246 243
247 this.directLoginReferences()[aDirectLogin.reference()] = {'directLogin':aDirectLogin, 'component':directLoginComponent}; 244 this.directLoginReferences()[aDirectLogin.reference()] = {'directLogin':aDirectLogin, 'component':directLoginComponent};
248 245
249 return Clipperz.Async.callbacks("CardDialogController.addCardDialogComponentWithDirectLogin", [ 246 return Clipperz.Async.callbacks("CardDialogController.addCardDialogComponentWithDirectLogin", [
250 MochiKit.Base.method(this.cardDialogComponent(), 'addDirectLoginComponent', directLoginComponent), 247 MochiKit.Base.method(this.cardDialogComponent(), 'addDirectLoginComponent', directLoginComponent),
251 MochiKit.Base.method(this, 'refreshDirectLoginComponent', this.directLoginReferences()[aDirectLogin.reference()]) 248 MochiKit.Base.method(this, 'refreshDirectLoginComponent', this.directLoginReferences()[aDirectLogin.reference()])
252 ], {trace:false}); 249 ], {trace:false});
253 }, 250 },
254 251
255 //------------------------------------------------------------------------- 252 //-------------------------------------------------------------------------
256 253
257 'refreshDirectLoginComponent': function (aDirectLoginReference) { 254 'refreshDirectLoginComponent': function (aDirectLoginReference) {
258 return Clipperz.Async.callbacks("CardDialogController.refreshDirectLoginComponent", [ 255 return Clipperz.Async.callbacks("CardDialogController.refreshDirectLoginComponent", [
259 MochiKit.Base.method(aDirectLoginReference['directLogin'],'favicon'), 256 MochiKit.Base.method(aDirectLoginReference['directLogin'],'favicon'),
260 // MochiKit.Base.method(aDirectLoginReference['directLogin'],'faviconData'), 257 // MochiKit.Base.method(aDirectLoginReference['directLogin'],'faviconData'),
261 MochiKit.Base.method(aDirectLoginReference['component'],'setFavicon'), 258 MochiKit.Base.method(aDirectLoginReference['component'],'setFavicon'),
262 MochiKit.Base.method(aDirectLoginReference['directLogin'],'label'), 259 MochiKit.Base.method(aDirectLoginReference['directLogin'],'label'),
263 MochiKit.Base.method(aDirectLoginReference['component'],'setLabel') 260 MochiKit.Base.method(aDirectLoginReference['component'],'setLabel')
264 ], {trace:false}); 261 ], {trace:false});
265 }, 262 },
266 263
267 'refreshDirectLoginComponents': function () { 264 'refreshDirectLoginComponents': function () {
268 return Clipperz.Async.callbacks("CardDialogController.refreshDirectLoginComponents", [ 265 return Clipperz.Async.callbacks("CardDialogController.refreshDirectLoginComponents", [
269 MochiKit.Base.method(this, 'directLoginReferences'), 266 MochiKit.Base.method(this, 'directLoginReferences'),
270 MochiKit.Base.values, 267 MochiKit.Base.values,
271 MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'refreshDirectLoginComponent')), 268 MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'refreshDirectLoginComponent')),
272 Clipperz.Async.collectAll 269 Clipperz.Async.collectAll
273 ]) 270 ])
274 }, 271 },
275 272
276 //------------------------------------------------------------------------- 273 //-------------------------------------------------------------------------
277 274
278 'updateRecordValues': function () { 275 'updateRecordValues': function () {
279 return Clipperz.Async.callbacks('CardDialogController.updateRecordValues', [ 276 return Clipperz.Async.callbacks('CardDialogController.updateRecordValues', [
280 MochiKit.Base.method(this.cardDialogComponent(), 'title'), 277 MochiKit.Base.method(this.cardDialogComponent(), 'title'),
281 MochiKit.Base.method(this.record(), 'setLabel'), 278 MochiKit.Base.method(this.record(), 'setLabel'),
282 MochiKit.Base.method(this.cardDialogComponent(), 'notes'), 279 MochiKit.Base.method(this.cardDialogComponent(), 'notes'),
283 MochiKit.Base.method(this.record(), 'setNotes'), 280 MochiKit.Base.method(this.record(), 'setNotes'),
284 281
285 MochiKit.Base.method(this, 'fieldsReferences'), 282 MochiKit.Base.method(this, 'fieldsReferences'),
286 MochiKit.Base.values, 283 MochiKit.Base.values,
287 MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'updateRecordFieldValues')), 284 MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'updateRecordFieldValues')),
288 285
289 MochiKit.Base.method(this, 'directLoginReferences'), 286 MochiKit.Base.method(this, 'directLoginReferences'),
290 MochiKit.Base.values, 287 MochiKit.Base.values,
291 MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'updateRecordDirectLoginValues')), 288 MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'updateRecordDirectLoginValues')),
292 289
293 MochiKit.Base.method(this.directLoginEditingComponent(), 'directLoginReference'), 290 MochiKit.Base.method(this.directLoginEditingComponent(), 'directLoginReference'),
294 MochiKit.Base.method(this.record(), 'directLoginWithReference'), 291 MochiKit.Base.method(this.record(), 'directLoginWithReference'),
295 MochiKit.Base.method(this, 'updateRecordDirectLoginDetails'), 292 MochiKit.Base.method(this, 'updateRecordDirectLoginDetails'),
296 293
297 MochiKit.Base.noop 294 MochiKit.Base.noop
298 ], {trace:false}); 295 ], {trace:false});
299 }, 296 },
300 297
301 //------------------------------------------------------------------------- 298 //-------------------------------------------------------------------------
302 299
303 'updateRecordFieldValues': function (aFieldReference) { 300 'updateRecordFieldValues': function (aFieldReference) {
304 var deferredResult; 301 var deferredResult;
305 302
306 deferredResult = Clipperz.Async.callbacks('CardDialogController.updateRecordFieldValues', [ 303 deferredResult = Clipperz.Async.callbacks('CardDialogController.updateRecordFieldValues', [
307 MochiKit.Base.method(aFieldReference['component'],'label'), 304 MochiKit.Base.method(aFieldReference['component'],'label'),
308 MochiKit.Base.method(aFieldReference['field'], 'setLabel'), 305 MochiKit.Base.method(aFieldReference['field'], 'setLabel'),
309 306
310 MochiKit.Base.method(aFieldReference['component'],'value'), 307 MochiKit.Base.method(aFieldReference['component'],'value'),
311 MochiKit.Base.method(aFieldReference['field'], 'setValue'), 308 MochiKit.Base.method(aFieldReference['field'], 'setValue'),
312 309
313 MochiKit.Base.method(aFieldReference['component'],'isHidden'), 310 MochiKit.Base.method(aFieldReference['component'],'isHidden'),
314 MochiKit.Base.method(aFieldReference['field'], 'setIsHidden'), 311 MochiKit.Base.method(aFieldReference['field'], 'setIsHidden'),
315 312
316 MochiKit.Base.method(aFieldReference['field'], 'actionType'), 313 MochiKit.Base.method(aFieldReference['field'], 'actionType'),
317 MochiKit.Base.method(aFieldReference['component'],'setActionType') 314 MochiKit.Base.method(aFieldReference['component'],'setActionType')
318 ], {trace:false}); 315 ], {trace:false});
319 316
320 return deferredResult; 317 return deferredResult;
321 }, 318 },
322 319
323 //------------------------------------------------------------------------- 320 //-------------------------------------------------------------------------
324 321
325 'updateRecordDirectLoginValues': function (aDirectLoginReference) { 322 'updateRecordDirectLoginValues': function (aDirectLoginReference) {
326 var deferredResult; 323 var deferredResult;
327 324
328 deferredResult = Clipperz.Async.callbacks('CardDialogController.updateRecordDirectLoginValues', [ 325 deferredResult = Clipperz.Async.callbacks('CardDialogController.updateRecordDirectLoginValues', [
329 MochiKit.Base.method(aDirectLoginReference['component'], 'label'), 326 MochiKit.Base.method(aDirectLoginReference['component'], 'label'),
330 MochiKit.Base.method(aDirectLoginReference['directLogin'], 'setLabel') 327 MochiKit.Base.method(aDirectLoginReference['directLogin'], 'setLabel')
331 ], {trace:false}); 328 ], {trace:false});
332 329
333 return deferredResult; 330 return deferredResult;
334 }, 331 },
335 332
336 //------------------------------------------------------------------------- 333 //-------------------------------------------------------------------------
337 334
338 'updateRecordDirectLoginDetails': function (aDirectLogin) { 335 'updateRecordDirectLoginDetails': function (aDirectLogin) {
339 var result; 336 var result;
340 337
341 if (MochiKit.Base.isUndefinedOrNull(aDirectLogin)) { 338 if (MochiKit.Base.isUndefinedOrNull(aDirectLogin)) {
342 result = MochiKit.Async.succeed(); 339 result = MochiKit.Async.succeed();
343 } else { 340 } else {
344 result = Clipperz.Async.callbacks("CardDialogController.updateRecordDirectLoginDetails", [ 341 result = Clipperz.Async.callbacks("CardDialogController.updateRecordDirectLoginDetails", [
345 MochiKit.Base.method(this.directLoginEditingComponent(), 'label'), 342 MochiKit.Base.method(this.directLoginEditingComponent(), 'label'),
346 MochiKit.Base.method(aDirectLogin, 'setLabel'), 343 MochiKit.Base.method(aDirectLogin, 'setLabel'),
347 MochiKit.Base.method(this.directLoginEditingComponent(), 'favicon'), 344 MochiKit.Base.method(this.directLoginEditingComponent(), 'favicon'),
348 MochiKit.Base.method(aDirectLogin, 'setFavicon') 345 MochiKit.Base.method(aDirectLogin, 'setFavicon')
349 ], {trace:false}); 346 ], {trace:false});
350 } 347 }
351 348
352 return result; 349 return result;
353 }, 350 },
354 351
355 //========================================================================= 352 //=========================================================================
356 353
357 'addField': function () { 354 'addField': function () {
358 return this.record().addField({ 355 return this.record().addField({
359 'label':this.cardDialogComponent().newFieldLabel(), 356 'label':this.cardDialogComponent().newFieldLabel(),
360 'value':this.cardDialogComponent().newFieldValue(), 357 'value':this.cardDialogComponent().newFieldValue(),
361 'isHidden':this.cardDialogComponent().newFieldIsHidden() 358 'isHidden':this.cardDialogComponent().newFieldIsHidden()
362 }); 359 });
363 }, 360 },
364 361
365 'handleAddField': function () { 362 'handleAddField': function () {
366 return Clipperz.Async.callbacks("CardDialogController.handleAddField", [ 363 return Clipperz.Async.callbacks("CardDialogController.handleAddField", [
367 MochiKit.Base.method(this, 'addField'), 364 MochiKit.Base.method(this, 'addField'),
368 365
369 MochiKit.Base.method(this, 'addCardDialogComponentWithField'), 366 MochiKit.Base.method(this, 'addCardDialogComponentWithField'),
370 MochiKit.Base.method(this.cardDialogComponent(), 'resetNewFieldInputs'), 367 MochiKit.Base.method(this.cardDialogComponent(), 'resetNewFieldInputs'),
371 368
372 MochiKit.Base.method(this.cardDialogComponent(), 'fixRendering'), 369 MochiKit.Base.method(this.cardDialogComponent(), 'fixRendering'),
373 MochiKit.Base.method(this, 'handleChangedValue') 370 MochiKit.Base.method(this, 'handleChangedValue')
374 ], {trace:false}) 371 ], {trace:false})
375 }, 372 },
376 373
377 //------------------------------------------------------------------------- 374 //-------------------------------------------------------------------------
378 375
379 'handlePerformFieldAction': function (aFieldID, aTargetElement) { 376 'handlePerformFieldAction': function (aFieldID, aTargetElement) {
380//console.log("### targetElement", aTargetElement); 377//console.log("### targetElement", aTargetElement);
381 return Clipperz.Async.callbacks("CardDialogController.handleDeleteField", [ 378 return Clipperz.Async.callbacks("CardDialogController.handleDeleteField", [
382 MochiKit.Base.method(this.record(), 'fields'), 379 MochiKit.Base.method(this.record(), 'fields'),
383 MochiKit.Base.itemgetter(aFieldID), 380 MochiKit.Base.itemgetter(aFieldID),
384 Clipperz.Async.collectResults("CardDialogController.handleDeleteField <collect results>", { 381 Clipperz.Async.collectResults("CardDialogController.handleDeleteField <collect results>", {
385 'value':MochiKit.Base.methodcaller('value'), 382 'value':MochiKit.Base.methodcaller('value'),
386 'type': MochiKit.Base.methodcaller('actionType') 383 'type': MochiKit.Base.methodcaller('actionType')
387 }, {trace:false}), 384 }, {trace:false}),
388 MochiKit.Base.bind(function (someValues) { 385 MochiKit.Base.bind(function (someValues) {
389 switch (someValues['type']) { 386 switch (someValues['type']) {
390 case 'NONE': 387 case 'NONE':
391 throw "this event handler should not be triggered for fields with type 'NONE'"; 388 throw "this event handler should not be triggered for fields with type 'NONE'";
392 break; 389 break;
393 case 'URL': 390 case 'URL':
394 var url; 391 var url;
395 392
396 url = someValues['value']; 393 url = someValues['value'];
397 if (/^https?\:\/\//.test(url) == false) { 394 if (/^https?\:\/\//.test(url) == false) {
398 url = 'http://' + url; 395 url = 'http://' + url;
399 } 396 }
400 397
401 window.open(url); 398 window.open(url);
402 break; 399 break;
403 case 'EMAIL': 400 case 'EMAIL':
404 var url; 401 var url;
405 402
406 url = 'mailto:' + someValues['value']; 403 url = 'mailto:' + someValues['value'];
407 404
408 MochiKit.DOM.currentWindow().location = url; 405 MochiKit.DOM.currentWindow().location = url;
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/CardsController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/CardsController.js
index b1a34b2..f58f0b8 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/CardsController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/CardsController.js
@@ -1,207 +1,204 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers');
30 27
31Clipperz.PM.UI.Web.Controllers.CardsController = function() { 28Clipperz.PM.UI.Web.Controllers.CardsController = function() {
32 Clipperz.PM.UI.Web.Controllers.CardsController.superclass.constructor.apply(this, arguments); 29 Clipperz.PM.UI.Web.Controllers.CardsController.superclass.constructor.apply(this, arguments);
33 30
34 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'cardDialogComponentClosed', this, 'handleHideCard'); 31 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'cardDialogComponentClosed', this, 'handleHideCard');
35 32
36 return this; 33 return this;
37} 34}
38 35
39Clipperz.Base.extend(Clipperz.PM.UI.Web.Controllers.CardsController, Clipperz.PM.UI.Web.Controllers.GridController, { 36Clipperz.Base.extend(Clipperz.PM.UI.Web.Controllers.CardsController, Clipperz.PM.UI.Web.Controllers.GridController, {
40 37
41 'toString': function() { 38 'toString': function() {
42 return "Clipperz.PM.UI.Web.Controllers.CardsController"; 39 return "Clipperz.PM.UI.Web.Controllers.CardsController";
43 }, 40 },
44 41
45 'createGrid': function () { 42 'createGrid': function () {
46 var grid; 43 var grid;
47 44
48 grid = new Clipperz.PM.UI.Web.Components.GridComponent({columnsManagers: [ 45 grid = new Clipperz.PM.UI.Web.Components.GridComponent({columnsManagers: [
49 new Clipperz.PM.UI.Web.Components.FaviconColumnManager({ 46 new Clipperz.PM.UI.Web.Components.FaviconColumnManager({
50 'name': 'Cards.favicon', 47 'name': 'Cards.favicon',
51 'selector': MochiKit.Base.methodcaller('favicon'), 48 'selector': MochiKit.Base.methodcaller('favicon'),
52 'cssClass': 'favicon' 49 'cssClass': 'favicon'
53 }), 50 }),
54 new Clipperz.PM.UI.Web.Components.LinkColumnManager({ 51 new Clipperz.PM.UI.Web.Components.LinkColumnManager({
55 'name': 'Cards.title', 52 'name': 'Cards.title',
56 'selector': MochiKit.Base.methodcaller('label'), 53 'selector': MochiKit.Base.methodcaller('label'),
57 'label': 'title', 54 'label': 'title',
58 'cssClass': 'title', 55 'cssClass': 'title',
59 'comparator': Clipperz.Base.caseInsensitiveCompare, 56 'comparator': Clipperz.Base.caseInsensitiveCompare,
60 'sortable': true, 57 'sortable': true,
61 'sorted': 'ASCENDING', 58 'sorted': 'ASCENDING',
62 // 'actionMethod': function(anObject, anEvent) { MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'editCard', {objectData:anObject, element:anEvent.src()})} 59 // 'actionMethod': function(anObject, anEvent) { MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'editCard', {objectData:anObject, element:anEvent.src()})}
63 'actionMethod': MochiKit.Base.method(this, 'handleShowCard') 60 'actionMethod': MochiKit.Base.method(this, 'handleShowCard')
64 }), 61 }),
65 new Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager({ 62 new Clipperz.PM.UI.Web.Components.DirectLoginsColumnManager({
66 'name': 'Cards.directLogins', 63 'name': 'Cards.directLogins',
67 'selector': MochiKit.Base.methodcaller('directLoginReferences'), 64 'selector': MochiKit.Base.methodcaller('directLoginReferences'),
68 'label': 'direct logins', 65 'label': 'direct logins',
69 'cssClass': 'directLogin' 66 'cssClass': 'directLogin'
70 }), 67 }),
71 new Clipperz.PM.UI.Web.Components.DateColumnManager({ 68 new Clipperz.PM.UI.Web.Components.DateColumnManager({
72 'name': 'Cards.latestUpdate', 69 'name': 'Cards.latestUpdate',
73 'selector': MochiKit.Base.methodcaller('updateDate'), 70 'selector': MochiKit.Base.methodcaller('updateDate'),
74 'label': 'latest update', 71 'label': 'latest update',
75 'cssClass': 'latestUpdate', 72 'cssClass': 'latestUpdate',
76 'format': 'd-m-Y', 73 'format': 'd-m-Y',
77 'comparator': MochiKit.Base.compare, 74 'comparator': MochiKit.Base.compare,
78 'sortable': true, 75 'sortable': true,
79 'sorted': 'UNSORTED' 76 'sorted': 'UNSORTED'
80 }), 77 }),
81 new Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager({ 78 new Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager({
82 'name': 'Cards.delete', 79 'name': 'Cards.delete',
83 'selector': MochiKit.Base.noop, 80 'selector': MochiKit.Base.noop,
84 'cssClass': 'delete', 81 'cssClass': 'delete',
85 // 'actionMethod': function(anObject, anEvent) { MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'deleteCard', {objectData:anObject, element:anEvent.src()})} 82 // 'actionMethod': function(anObject, anEvent) { MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'deleteCard', {objectData:anObject, element:anEvent.src()})}
86 'actionMethod': MochiKit.Base.method(this, 'handleDeleteCard') 83 'actionMethod': MochiKit.Base.method(this, 'handleDeleteCard')
87 }) 84 })
88 ]}); 85 ]});
89 86
90 grid.setComponentForSlotNamed(new Clipperz.PM.UI.Web.Components.BookmarkletComponent(), 'headerSlot'); 87 grid.setComponentForSlotNamed(new Clipperz.PM.UI.Web.Components.BookmarkletComponent(), 'headerSlot');
91 88
92 return grid; 89 return grid;
93 }, 90 },
94 91
95 //----------------------------------------------------------------------------- 92 //-----------------------------------------------------------------------------
96 93
97 'getRows': function () { 94 'getRows': function () {
98 //TODO relying on user() in GridController, bad code smell :| 95 //TODO relying on user() in GridController, bad code smell :|
99 return this.user().getRecords(); 96 return this.user().getRecords();
100 }, 97 },
101 98
102 //============================================================================= 99 //=============================================================================
103 100
104 'displayEmptyContent': function () { 101 'displayEmptyContent': function () {
105 varemptyGridComponent; 102 varemptyGridComponent;
106 103
107 emptyGridComponent = new Clipperz.PM.UI.Web.Components.CreateNewCardSplashComponent(); 104 emptyGridComponent = new Clipperz.PM.UI.Web.Components.CreateNewCardSplashComponent();
108 105
109 return Clipperz.Async.callbacks("CardsController.displayEmptyContent", [ 106 return Clipperz.Async.callbacks("CardsController.displayEmptyContent", [
110 MochiKit.Base.method(this.grid(), 'setNoRowsGridComponent', emptyGridComponent), 107 MochiKit.Base.method(this.grid(), 'setNoRowsGridComponent', emptyGridComponent),
111 MochiKit.Base.bind(Clipperz.PM.UI.Web.Controllers.CardsController.superclass.displayEmptyContent, this) 108 MochiKit.Base.bind(Clipperz.PM.UI.Web.Controllers.CardsController.superclass.displayEmptyContent, this)
112 ], {trace:false}); 109 ], {trace:false});
113 }, 110 },
114 111
115 'displaySelectedRows': function (aFilter) { 112 'displaySelectedRows': function (aFilter) {
116 this.columnManagerWithName('Cards.directLogins').hideDirectLoginListPopup(); 113 this.columnManagerWithName('Cards.directLogins').hideDirectLoginListPopup();
117 114
118 return Clipperz.PM.UI.Web.Controllers.CardsController.superclass.displaySelectedRows.apply(this, arguments); 115 return Clipperz.PM.UI.Web.Controllers.CardsController.superclass.displaySelectedRows.apply(this, arguments);
119 }, 116 },
120 117
121 //============================================================================= 118 //=============================================================================
122 119
123 'handleShowCard': function (anObject, anEvent) { 120 'handleShowCard': function (anObject, anEvent) {
124 var cardDialogController; 121 var cardDialogController;
125 122
126 cardDialogController = new Clipperz.PM.UI.Web.Controllers.CardDialogController({record:anObject, delegate:this}); 123 cardDialogController = new Clipperz.PM.UI.Web.Controllers.CardDialogController({record:anObject, delegate:this});
127 this.grid().selectRow(anObject); 124 this.grid().selectRow(anObject);
128 125
129 cardDialogController.run(anEvent.src()); 126 cardDialogController.run(anEvent.src());
130 }, 127 },
131 128
132 //......................................................................... 129 //.........................................................................
133 130
134 'handleHideCard': function () { 131 'handleHideCard': function () {
135 this.focus(); 132 this.focus();
136 }, 133 },
137 134
138 //----------------------------------------------------------------------------- 135 //-----------------------------------------------------------------------------
139 136
140 'addCard': function (aSourceElement) { 137 'addCard': function (aSourceElement) {
141 return Clipperz.Async.callbacks("CardsController.addCard", [ 138 return Clipperz.Async.callbacks("CardsController.addCard", [
142 Clipperz.Async.collectResults("CardsController.addCard <inner results>", { 139 Clipperz.Async.collectResults("CardsController.addCard <inner results>", {
143 'record': MochiKit.Base.method(this.user(), 'createNewRecord'), 140 'record': MochiKit.Base.method(this.user(), 'createNewRecord'),
144 'delegate':MochiKit.Base.partial(MochiKit.Async.succeed, this) 141 'delegate':MochiKit.Base.partial(MochiKit.Async.succeed, this)
145 }, {trace:false}), 142 }, {trace:false}),
146 function (someParameters) { 143 function (someParameters) {
147 return new Clipperz.PM.UI.Web.Controllers.CardDialogController(someParameters); 144 return new Clipperz.PM.UI.Web.Controllers.CardDialogController(someParameters);
148 }, 145 },
149 MochiKit.Base.methodcaller('run', aSourceElement) 146 MochiKit.Base.methodcaller('run', aSourceElement)
150 ], {trace:false}); 147 ], {trace:false});
151 }, 148 },
152 149
153 //----------------------------------------------------------------------------- 150 //-----------------------------------------------------------------------------
154 151
155 'handleDeleteCard': function (anObject, anEvent) { 152 'handleDeleteCard': function (anObject, anEvent) {
156 var deferredResult; 153 var deferredResult;
157 var confirmationDialog; 154 var confirmationDialog;
158 155
159 // confirmationDialog = new Clipperz.PM.UI.Common.Components.SimpleMessagePanel({ 156 // confirmationDialog = new Clipperz.PM.UI.Common.Components.SimpleMessagePanel({
160 confirmationDialog = new Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar({ 157 confirmationDialog = new Clipperz.PM.UI.Common.Components.MessagePanelWithProgressBar({
161 'title':"Delete Card", 158 'title':"Delete Card",
162 'text': "Do you want to delete …", 159 'text': "Do you want to delete …",
163 'type': 'ALERT', 160 'type': 'ALERT',
164 'buttons': [ 161 'buttons': [
165 {text:"Cancel",result:'CANCEL'}, 162 {text:"Cancel",result:'CANCEL'},
166 {text:"Delete", result:'OK', isDefault:true} 163 {text:"Delete", result:'OK', isDefault:true}
167 ], 164 ],
168 'canCancelWhileProcessing':false 165 'canCancelWhileProcessing':false
169 }); 166 });
170 167
171 deferredResult = new Clipperz.Async.Deferred("AppController.handleDeleteCard", {trace:false}); 168 deferredResult = new Clipperz.Async.Deferred("AppController.handleDeleteCard", {trace:false});
172 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':5}), 169 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':5}),
173 deferredResult.addMethod(this.grid(), 'selectRow', anObject); 170 deferredResult.addMethod(this.grid(), 'selectRow', anObject);
174 deferredResult.addMethod(confirmationDialog, 'deferredShowModal', { 171 deferredResult.addMethod(confirmationDialog, 'deferredShowModal', {
175 'openFromElement': anEvent.src(), 172 'openFromElement': anEvent.src(),
176 'onOkCloseToElement': null, //MochiKit.DOM.currentDocument().body, 173 'onOkCloseToElement': null, //MochiKit.DOM.currentDocument().body,
177 'onCancelCloseToElement':anEvent.src() 174 'onCancelCloseToElement':anEvent.src()
178 }); 175 });
179 // deferredResult.addCallback(function () { Clipperz.log("DELETE: " + anObject.toString(), anObject); }); 176 // deferredResult.addCallback(function () { Clipperz.log("DELETE: " + anObject.toString(), anObject); });
180 deferredResult.addMethod(this.user(), 'deleteRecord', anObject); 177 deferredResult.addMethod(this.user(), 'deleteRecord', anObject);
181 deferredResult.addBothPass(MochiKit.Base.method(this.grid(), 'unselectRow', anObject)); 178 deferredResult.addBothPass(MochiKit.Base.method(this.grid(), 'unselectRow', anObject));
182 deferredResult.addMethod(this, 'saveChanges'); 179 deferredResult.addMethod(this, 'saveChanges');
183 deferredResult.addMethod(confirmationDialog, 'deferredDone'); 180 deferredResult.addMethod(confirmationDialog, 'deferredDone');
184 deferredResult.addErrbackPass(function (anError) { 181 deferredResult.addErrbackPass(function (anError) {
185 var result; 182 var result;
186 183
187 if (! (anError instanceof MochiKit.Async.CancelledError)) { 184 if (! (anError instanceof MochiKit.Async.CancelledError)) {
188 result = confirmationDialog.deferredError({ 185 result = confirmationDialog.deferredError({
189 'type': 'ALERT', 186 'type': 'ALERT',
190 'title':"Error", 187 'title':"Error",
191 'text': Clipperz.PM.Strings.errorDescriptionForException(anError), 188 'text': Clipperz.PM.Strings.errorDescriptionForException(anError),
192 'buttons':[{text:"Close", result:'CANCEL', isDefault:true}] 189 'buttons':[{text:"Close", result:'CANCEL', isDefault:true}]
193 }) 190 })
194 } else { 191 } else {
195 result = anError; 192 result = anError;
196 } 193 }
197 194
198 return result; 195 return result;
199 }); 196 });
200 deferredResult.callback(); 197 deferredResult.callback();
201 198
202 return deferredResult; 199 return deferredResult;
203 }, 200 },
204 201
205 //============================================================================= 202 //=============================================================================
206 __syntaxFix__: "syntax fix" 203 __syntaxFix__: "syntax fix"
207}); 204});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/DirectLoginWizardController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/DirectLoginWizardController.js
index 38fdc08..c025a51 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/DirectLoginWizardController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/DirectLoginWizardController.js
@@ -1,408 +1,405 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers');
30 27
31Clipperz.PM.UI.Web.Controllers.DirectLoginWizardController = function(args) { 28Clipperz.PM.UI.Web.Controllers.DirectLoginWizardController = function(args) {
32 this._directLoginEditingComponent = args.directLoginEditingComponent|| Clipperz.Base.exception.raise('MandatoryParameter'); 29 this._directLoginEditingComponent = args.directLoginEditingComponent|| Clipperz.Base.exception.raise('MandatoryParameter');
33 this._cardLabel = args.cardLabel || Clipperz.Base.exception.raise('MandatoryParameter'); 30 this._cardLabel = args.cardLabel || Clipperz.Base.exception.raise('MandatoryParameter');
34 31
35 MochiKit.Signal.connect(this._directLoginEditingComponent, 'changedValue',this, 'handleChangedValue'); 32 MochiKit.Signal.connect(this._directLoginEditingComponent, 'changedValue',this, 'handleChangedValue');
36 MochiKit.Signal.connect(this._directLoginEditingComponent, 'moveForward',this, 'handleMoveForward'); 33 MochiKit.Signal.connect(this._directLoginEditingComponent, 'moveForward',this, 'handleMoveForward');
37 MochiKit.Signal.connect(this._directLoginEditingComponent, 'keyPressed',this, 'handleDirectLoginEditingComponentKeyPressed'); 34 MochiKit.Signal.connect(this._directLoginEditingComponent, 'keyPressed',this, 'handleDirectLoginEditingComponentKeyPressed');
38 35
39 this._directLogin = null; 36 this._directLogin = null;
40 this._directLoginHasJustBeenAdded = false; 37 this._directLoginHasJustBeenAdded = false;
41 38
42 this._rulerComponent = null; 39 this._rulerComponent = null;
43 40
44 this._steps = null; 41 this._steps = null;
45 this._currentStepIndex = 0; 42 this._currentStepIndex = 0;
46 this._isNextEnabled = false; 43 this._isNextEnabled = false;
47 44
48 this._recordFields = null; 45 this._recordFields = null;
49 this._originalBindings = null; 46 this._originalBindings = null;
50 47
51 this._bindingComponents = []; 48 this._bindingComponents = [];
52 this._formValueComponents = []; 49 this._formValueComponents = [];
53 50
54 return this; 51 return this;
55} 52}
56 53
57MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.DirectLoginWizardController.prototype, { 54MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.DirectLoginWizardController.prototype, {
58 55
59 'toString': function() { 56 'toString': function() {
60 return "Clipperz.PM.UI.Web.Controllers.DirectLoginWizardController"; 57 return "Clipperz.PM.UI.Web.Controllers.DirectLoginWizardController";
61 }, 58 },
62 59
63 //------------------------------------------------------------------------- 60 //-------------------------------------------------------------------------
64 61
65 'directLogin': function () { 62 'directLogin': function () {
66 return this._directLogin; 63 return this._directLogin;
67 }, 64 },
68 65
69 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
70 67
71 'directLoginHasJustBeenAdded': function () { 68 'directLoginHasJustBeenAdded': function () {
72 return this._directLoginHasJustBeenAdded; 69 return this._directLoginHasJustBeenAdded;
73 }, 70 },
74 71
75 'setDirectLoginHasJustBeenAdded': function (aValue) { 72 'setDirectLoginHasJustBeenAdded': function (aValue) {
76 this._directLoginHasJustBeenAdded = aValue; 73 this._directLoginHasJustBeenAdded = aValue;
77 }, 74 },
78 75
79 //------------------------------------------------------------------------- 76 //-------------------------------------------------------------------------
80 77
81 'directLoginEditingComponent': function () { 78 'directLoginEditingComponent': function () {
82 return this._directLoginEditingComponent; 79 return this._directLoginEditingComponent;
83 }, 80 },
84 81
85 //============================================================================= 82 //=============================================================================
86 83
87 'cardLabel': function () { 84 'cardLabel': function () {
88 return this._cardLabel; 85 return this._cardLabel;
89 }, 86 },
90 87
91 //============================================================================= 88 //=============================================================================
92 89
93 'resetCurrentStepIndex': function () { 90 'resetCurrentStepIndex': function () {
94 this._currentStepIndex = 0; 91 this._currentStepIndex = 0;
95 this.rulerComponent().resetStatus(); 92 this.rulerComponent().resetStatus();
96 }, 93 },
97 94
98 //----------------------------------------------------------------------------- 95 //-----------------------------------------------------------------------------
99 96
100 'enableNext': function (aValue) { 97 'enableNext': function (aValue) {
101 this.rulerComponent().enableNext(aValue); 98 this.rulerComponent().enableNext(aValue);
102 this._isNextEnabled = aValue; 99 this._isNextEnabled = aValue;
103 }, 100 },
104 101
105 'isNextEnabled': function () { 102 'isNextEnabled': function () {
106 return this._isNextEnabled; 103 return this._isNextEnabled;
107 }, 104 },
108 105
109 //----------------------------------------------------------------------------- 106 //-----------------------------------------------------------------------------
110 107
111 'enablePrevious': function (aValue) { 108 'enablePrevious': function (aValue) {
112 this.rulerComponent().enablePrevious(aValue); 109 this.rulerComponent().enablePrevious(aValue);
113 }, 110 },
114 111
115 //============================================================================= 112 //=============================================================================
116 113
117 'bindingComponents': function () { 114 'bindingComponents': function () {
118 return this._bindingComponents; 115 return this._bindingComponents;
119 }, 116 },
120 117
121 'resetBindingComponents': function () { 118 'resetBindingComponents': function () {
122 this.directLoginEditingComponent().clearAllBindingsComponents(); 119 this.directLoginEditingComponent().clearAllBindingsComponents();
123 this._bindingComponents = []; 120 this._bindingComponents = [];
124 }, 121 },
125 122
126 //============================================================================= 123 //=============================================================================
127 124
128 'formValueComponents': function () { 125 'formValueComponents': function () {
129 return this._formValueComponents; 126 return this._formValueComponents;
130 }, 127 },
131 128
132 'resetFormValueComponents': function () { 129 'resetFormValueComponents': function () {
133 this.directLoginEditingComponent().clearAllFormValueComponents(); 130 this.directLoginEditingComponent().clearAllFormValueComponents();
134 this._formValueComponents = []; 131 this._formValueComponents = [];
135 }, 132 },
136 133
137 //============================================================================= 134 //=============================================================================
138 135
139 'recordFields': function () { 136 'recordFields': function () {
140 return this._recordFields; 137 return this._recordFields;
141 }, 138 },
142 139
143 'setRecordFields': function (aValue) { 140 'setRecordFields': function (aValue) {
144 this._recordFields = aValue; 141 this._recordFields = aValue;
145 }, 142 },
146 143
147 'recordFieldWithReference': function (aReference) { 144 'recordFieldWithReference': function (aReference) {
148 var matchingValues; 145 var matchingValues;
149 var result; 146 var result;
150 147
151 matchingValues = MochiKit.Base.filter(function (aField) { return aField['reference'] == aReference; }, this.recordFields()); 148 matchingValues = MochiKit.Base.filter(function (aField) { return aField['reference'] == aReference; }, this.recordFields());
152 149
153 if (matchingValues.length == 0) { 150 if (matchingValues.length == 0) {
154 result = null; 151 result = null;
155 } else { 152 } else {
156 result = matchingValues[0]; 153 result = matchingValues[0];
157 } 154 }
158 155
159 return result; 156 return result;
160 }, 157 },
161 158
162 //----------------------------------------------------------------------------- 159 //-----------------------------------------------------------------------------
163 160
164 'originalBindings': function () { 161 'originalBindings': function () {
165 return this._originalBindings; 162 return this._originalBindings;
166 }, 163 },
167 164
168 'setOriginalBindings': function (aValue) { 165 'setOriginalBindings': function (aValue) {
169//console.log("BINDINGS", aValue); 166//console.log("BINDINGS", aValue);
170 this._originalBindings = aValue; 167 this._originalBindings = aValue;
171 }, 168 },
172 169
173 //============================================================================= 170 //=============================================================================
174 171
175 'rulerComponent': function () { 172 'rulerComponent': function () {
176 if (this._rulerComponent == null) { 173 if (this._rulerComponent == null) {
177 this._rulerComponent = new Clipperz.PM.UI.Web.Components.RulerComponent({ 174 this._rulerComponent = new Clipperz.PM.UI.Web.Components.RulerComponent({
178 translationContext:'Wizards.DirectLoginWizard' 175 translationContext:'Wizards.DirectLoginWizard'
179 }); 176 });
180 this._rulerComponent.render(); 177 this._rulerComponent.render();
181 178
182 MochiKit.Signal.connect(this._rulerComponent, 'exit', this, 'handleExit'); 179 MochiKit.Signal.connect(this._rulerComponent, 'exit', this, 'handleExit');
183 MochiKit.Signal.connect(this._rulerComponent, 'done', this, 'done'); 180 MochiKit.Signal.connect(this._rulerComponent, 'done', this, 'done');
184 MochiKit.Signal.connect(this._rulerComponent, 'moveForward',this, 'handleMoveForward'); 181 MochiKit.Signal.connect(this._rulerComponent, 'moveForward',this, 'handleMoveForward');
185 MochiKit.Signal.connect(this._rulerComponent, 'moveBackward',this, 'handleMoveBackward'); 182 MochiKit.Signal.connect(this._rulerComponent, 'moveBackward',this, 'handleMoveBackward');
186 MochiKit.Signal.connect(this._rulerComponent, 'cursorMoved',this, 'handleCursorMoved'); 183 MochiKit.Signal.connect(this._rulerComponent, 'cursorMoved',this, 'handleCursorMoved');
187 } 184 }
188 185
189 return this._rulerComponent; 186 return this._rulerComponent;
190 }, 187 },
191 188
192 //----------------------------------------------------------------------------- 189 //-----------------------------------------------------------------------------
193 190
194 'showRuler': function (someSteps) { 191 'showRuler': function (someSteps) {
195 var rulerElement; 192 var rulerElement;
196 193
197 this.setSteps(someSteps); 194 this.setSteps(someSteps);
198 195
199 rulerElement = this.rulerComponent().element(); 196 rulerElement = this.rulerComponent().element();
200 this.directLoginEditingComponent().disableAllPanels(); 197 this.directLoginEditingComponent().disableAllPanels();
201 198
202 MochiKit.Style.showElement(rulerElement); 199 MochiKit.Style.showElement(rulerElement);
203 MochiKit.Style.setElementPosition(rulerElement, {x:-1000, y:this.directLoginEditingComponent().bottomMargin()}); 200 MochiKit.Style.setElementPosition(rulerElement, {x:-1000, y:this.directLoginEditingComponent().bottomMargin()});
204 new MochiKit.Visual.Move(rulerElement, { 201 new MochiKit.Visual.Move(rulerElement, {
205 x:0, y:this.directLoginEditingComponent().bottomMargin(), 202 x:0, y:this.directLoginEditingComponent().bottomMargin(),
206 mode:'absolute', 203 mode:'absolute',
207 duration:1, 204 duration:1,
208 afterFinish:MochiKit.Base.method(this, 'handleCursorMoved') 205 afterFinish:MochiKit.Base.method(this, 'handleCursorMoved')
209 }); 206 });
210 }, 207 },
211 208
212 'fixRulerRendering': function (aValue) { 209 'fixRulerRendering': function (aValue) {
213 this.rulerComponent().setDisplayMode(aValue); 210 this.rulerComponent().setDisplayMode(aValue);
214 }, 211 },
215 212
216 //----------------------------------------------------------------------------- 213 //-----------------------------------------------------------------------------
217 214
218 'hideRuler': function () { 215 'hideRuler': function () {
219 new MochiKit.Visual.Move(this.rulerComponent().element(), {x:-1000, mode:'relative', duration:1}); 216 new MochiKit.Visual.Move(this.rulerComponent().element(), {x:-1000, mode:'relative', duration:1});
220 }, 217 },
221 218
222 'doneWithRuler': function () { 219 'doneWithRuler': function () {
223 var rulerComponentElement; 220 var rulerComponentElement;
224 221
225 rulerComponentElement = this.rulerComponent().element(); 222 rulerComponentElement = this.rulerComponent().element();
226 new MochiKit.Visual.Move(this.rulerComponent().element(), { 223 new MochiKit.Visual.Move(this.rulerComponent().element(), {
227 x:1000, 224 x:1000,
228 mode:'relative', 225 mode:'relative',
229 duration:1, 226 duration:1,
230 // afterFinish:MochiKit.Base.partial(MochiKit.Style.hideElement, rulerComponentElement) 227 // afterFinish:MochiKit.Base.partial(MochiKit.Style.hideElement, rulerComponentElement)
231 afterFinish:function () { MochiKit.Style.hideElement(rulerComponentElement); } 228 afterFinish:function () { MochiKit.Style.hideElement(rulerComponentElement); }
232 }); 229 });
233 }, 230 },
234 231
235 //============================================================================= 232 //=============================================================================
236 233
237 'addNewDirectLoginRulerSteps': function () { 234 'addNewDirectLoginRulerSteps': function () {
238 return MochiKit.Base.concat([ 'LABEL'], this.editDirectLoginRulerSteps()); 235 return MochiKit.Base.concat([ 'LABEL'], this.editDirectLoginRulerSteps());
239 236
240 }, 237 },
241 238
242 'editDirectLoginRulerSteps': function () { 239 'editDirectLoginRulerSteps': function () {
243 return [ /*'TYPE',*/ 'CONFIGURATION', 'BINDINGS','FAVICON', 'DONE']; 240 return [ /*'TYPE',*/ 'CONFIGURATION', 'BINDINGS','FAVICON', 'DONE'];
244 }, 241 },
245 242
246 //------------------------------------------------------------------------- 243 //-------------------------------------------------------------------------
247 244
248 'runWithDirectLogin': function (aDirectLogin, hasJustBeenAdded) { 245 'runWithDirectLogin': function (aDirectLogin, hasJustBeenAdded) {
249 this._directLogin = aDirectLogin; 246 this._directLogin = aDirectLogin;
250 this.setDirectLoginHasJustBeenAdded(hasJustBeenAdded); 247 this.setDirectLoginHasJustBeenAdded(hasJustBeenAdded);
251 248
252 return Clipperz.Async.callbacks("DirectLoginWizardController.runWithDirectLogin", [ 249 return Clipperz.Async.callbacks("DirectLoginWizardController.runWithDirectLogin", [
253 MochiKit.Base.method(aDirectLogin, 'label'), 250 MochiKit.Base.method(aDirectLogin, 'label'),
254 MochiKit.Base.method(this.directLoginEditingComponent(), 'setLabel'), 251 MochiKit.Base.method(this.directLoginEditingComponent(), 'setLabel'),
255 252
256 MochiKit.Base.method(aDirectLogin, 'favicon'), 253 MochiKit.Base.method(aDirectLogin, 'favicon'),
257 MochiKit.Base.method(this.directLoginEditingComponent(), 'setDirectLoginFavicon'), 254 MochiKit.Base.method(this.directLoginEditingComponent(), 'setDirectLoginFavicon'),
258 255
259 MochiKit.Base.method(aDirectLogin, 'bookmarkletConfiguration'), 256 MochiKit.Base.method(aDirectLogin, 'bookmarkletConfiguration'),
260 MochiKit.Base.method(this.directLoginEditingComponent(), 'setBookmarkletConfiguration'), 257 MochiKit.Base.method(this.directLoginEditingComponent(), 'setBookmarkletConfiguration'),
261 258
262 MochiKit.Base.method(aDirectLogin, 'bindings'), 259 MochiKit.Base.method(aDirectLogin, 'bindings'),
263 MochiKit.Base.method(this, 'setOriginalBindings'), 260 MochiKit.Base.method(this, 'setOriginalBindings'),
264 261
265 MochiKit.Base.method(aDirectLogin, 'record'), 262 MochiKit.Base.method(aDirectLogin, 'record'),
266 MochiKit.Base.methodcaller('fields'), 263 MochiKit.Base.methodcaller('fields'),
267 MochiKit.Base.values, 264 MochiKit.Base.values,
268 MochiKit.Base.partial(MochiKit.Base.map, Clipperz.Async.collectResults("Record.directLoginReferences - collectResults", { 265 MochiKit.Base.partial(MochiKit.Base.map, Clipperz.Async.collectResults("Record.directLoginReferences - collectResults", {
269 'reference': MochiKit.Base.methodcaller('reference'), 266 'reference': MochiKit.Base.methodcaller('reference'),
270 'label': MochiKit.Base.methodcaller('label'), 267 'label': MochiKit.Base.methodcaller('label'),
271 'isHidden': MochiKit.Base.methodcaller('isHidden'), 268 'isHidden': MochiKit.Base.methodcaller('isHidden'),
272 'value': MochiKit.Base.methodcaller('value') 269 'value': MochiKit.Base.methodcaller('value')
273 }, {trace:false})), 270 }, {trace:false})),
274 Clipperz.Async.collectAll, 271 Clipperz.Async.collectAll,
275 272
276 MochiKit.Base.method(this, 'setRecordFields'), 273 MochiKit.Base.method(this, 'setRecordFields'),
277 274
278 MochiKit.Base.partial(MochiKit.Async.succeed, hasJustBeenAdded), 275 MochiKit.Base.partial(MochiKit.Async.succeed, hasJustBeenAdded),
279 Clipperz.Async.deferredIf("Direct login has just been added", [ 276 Clipperz.Async.deferredIf("Direct login has just been added", [
280 MochiKit.Base.method(this, 'addNewDirectLoginRulerSteps') 277 MochiKit.Base.method(this, 'addNewDirectLoginRulerSteps')
281 ], [ 278 ], [
282 MochiKit.Base.method(this, 'editDirectLoginRulerSteps') 279 MochiKit.Base.method(this, 'editDirectLoginRulerSteps')
283 ]), 280 ]),
284 MochiKit.Base.method(this, 'showRuler') 281 MochiKit.Base.method(this, 'showRuler')
285 ], {trace:false}); 282 ], {trace:false});
286 }, 283 },
287 284
288 //----------------------------------------------------------------------------- 285 //-----------------------------------------------------------------------------
289 286
290 'checkState': function () { 287 'checkState': function () {
291 var enablePrevious; 288 var enablePrevious;
292 var enableNext; 289 var enableNext;
293 290
294 enablePrevious = true; 291 enablePrevious = true;
295 enableNext = false; 292 enableNext = false;
296 293
297 this.directLoginEditingComponent().disableAllPanels(); 294 this.directLoginEditingComponent().disableAllPanels();
298 295
299 switch(this.currentStep()) { 296 switch(this.currentStep()) {
300 case 'LABEL': 297 case 'LABEL':
301 this.directLoginEditingComponent().enableLabelField(); 298 this.directLoginEditingComponent().enableLabelField();
302 299
303 enableNext = (this.directLoginEditingComponent().label() != ''); 300 enableNext = (this.directLoginEditingComponent().label() != '');
304 enablePrevious = false; 301 enablePrevious = false;
305 break; 302 break;
306 case 'TYPE': 303 case 'TYPE':
307 this.directLoginEditingComponent().enableTypeField(); 304 this.directLoginEditingComponent().enableTypeField();
308 305
309 enableNext = true; 306 enableNext = true;
310 enablePrevious = true; 307 enablePrevious = true;
311 break 308 break
312 case 'CONFIGURATION': 309 case 'CONFIGURATION':
313 this.directLoginEditingComponent().enableConfigurationField(); 310 this.directLoginEditingComponent().enableConfigurationField();
314 311
315 enableNext = (this.directLoginEditingComponent().bookmarkletConfiguration() != ''); 312 enableNext = (this.directLoginEditingComponent().bookmarkletConfiguration() != '');
316 313
317 if (enableNext == true) { 314 if (enableNext == true) {
318 try { 315 try {
319 Clipperz.PM.DataModel.DirectLogin.checkBookmarkletConfiguration(this.directLoginEditingComponent().bookmarkletConfiguration()); 316 Clipperz.PM.DataModel.DirectLogin.checkBookmarkletConfiguration(this.directLoginEditingComponent().bookmarkletConfiguration());
320 this.directLoginEditingComponent().removeHighlightConfigurationSyntaxError(); 317 this.directLoginEditingComponent().removeHighlightConfigurationSyntaxError();
321 } catch (e) { 318 } catch (e) {
322 this.directLoginEditingComponent().highlightConfigurationSyntaxError(); 319 this.directLoginEditingComponent().highlightConfigurationSyntaxError();
323 enableNext = false; 320 enableNext = false;
324 } 321 }
325 } 322 }
326 break; 323 break;
327 case 'BINDINGS': 324 case 'BINDINGS':
328 enableNext = MochiKit.Iter.every(this.bindingComponents(), function (aBindingComponent) { return aBindingComponent.selectedValue() != null; }) 325 enableNext = MochiKit.Iter.every(this.bindingComponents(), function (aBindingComponent) { return aBindingComponent.selectedValue() != null; })
329 this.directLoginEditingComponent().enableBindingFields(); 326 this.directLoginEditingComponent().enableBindingFields();
330 break; 327 break;
331 case 'FAVICON': 328 case 'FAVICON':
332 enableNext = true; 329 enableNext = true;
333 this.directLoginEditingComponent().enableFaviconField(); 330 this.directLoginEditingComponent().enableFaviconField();
334 break; 331 break;
335 case 'DONE': 332 case 'DONE':
336 enableNext = true; 333 enableNext = true;
337 this.directLoginEditingComponent().enableDonePanel(); 334 this.directLoginEditingComponent().enableDonePanel();
338 break; 335 break;
339 } 336 }
340 337
341 if (this.currentStepIndex() > 0) { 338 if (this.currentStepIndex() > 0) {
342 this.enablePrevious(enablePrevious); 339 this.enablePrevious(enablePrevious);
343 } else { 340 } else {
344 this.enablePrevious(false); 341 this.enablePrevious(false);
345 } 342 }
346 this.enableNext(enableNext); 343 this.enableNext(enableNext);
347 }, 344 },
348 345
349 //----------------------------------------------------------------------------- 346 //-----------------------------------------------------------------------------
350 347
351 'setFocus': function () { 348 'setFocus': function () {
352 switch(this.currentStep()) { 349 switch(this.currentStep()) {
353 case 'LABEL': 350 case 'LABEL':
354 this.directLoginEditingComponent().focusOnLabelElement(); 351 this.directLoginEditingComponent().focusOnLabelElement();
355 break; 352 break;
356 case 'TYPE': 353 case 'TYPE':
357 break; 354 break;
358 case 'CONFIGURATION': 355 case 'CONFIGURATION':
359 this.directLoginEditingComponent().focusOnBookmarkletConfigurationElement(); 356 this.directLoginEditingComponent().focusOnBookmarkletConfigurationElement();
360 break; 357 break;
361 case 'BINDINGS': 358 case 'BINDINGS':
362 // this.directLoginEditingComponent().getElement('???').focus(); 359 // this.directLoginEditingComponent().getElement('???').focus();
363 break; 360 break;
364 case 'FAVICON': 361 case 'FAVICON':
365 this.directLoginEditingComponent().focusOnFaviconElement(); 362 this.directLoginEditingComponent().focusOnFaviconElement();
366 break; 363 break;
367 case 'DONE': 364 case 'DONE':
368 break; 365 break;
369 } 366 }
370 }, 367 },
371 368
372 //============================================================================= 369 //=============================================================================
373 370
374 'steps': function () { 371 'steps': function () {
375 return this._steps; 372 return this._steps;
376 }, 373 },
377 374
378 'setSteps': function (aValue) { 375 'setSteps': function (aValue) {
379 this._steps = aValue; 376 this._steps = aValue;
380 377
381 this.rulerComponent().setSteps(aValue); 378 this.rulerComponent().setSteps(aValue);
382 this.resetCurrentStepIndex(); 379 this.resetCurrentStepIndex();
383 }, 380 },
384 381
385 'currentStepIndex': function () { 382 'currentStepIndex': function () {
386 return this._currentStepIndex; 383 return this._currentStepIndex;
387 }, 384 },
388 385
389 'currentStep': function () { 386 'currentStep': function () {
390 return this.steps()[this.currentStepIndex()]; 387 return this.steps()[this.currentStepIndex()];
391 }, 388 },
392 389
393 //============================================================================= 390 //=============================================================================
394 391
395 'handleExit': function () { 392 'handleExit': function () {
396 MochiKit.Signal.signal(this, 'exit'); 393 MochiKit.Signal.signal(this, 'exit');
397 }, 394 },
398 395
399 'done': function () { 396 'done': function () {
400 this.doneWithRuler(); 397 this.doneWithRuler();
401 398
402 Clipperz.Async.callbacks("DirectLoginWizardController.done", [ 399 Clipperz.Async.callbacks("DirectLoginWizardController.done", [
403 MochiKit.Base.method(this.directLoginEditingComponent(), 'label'), 400 MochiKit.Base.method(this.directLoginEditingComponent(), 'label'),
404 MochiKit.Base.method(this.directLogin(), 'setLabel'), 401 MochiKit.Base.method(this.directLogin(), 'setLabel'),
405 402
406 MochiKit.Base.method(this.directLoginEditingComponent(), 'bookmarkletConfiguration'), 403 MochiKit.Base.method(this.directLoginEditingComponent(), 'bookmarkletConfiguration'),
407 MochiKit.Base.method(this.directLogin(), 'setBookmarkletConfiguration'), 404 MochiKit.Base.method(this.directLogin(), 'setBookmarkletConfiguration'),
408 405
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/DirectLoginsController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/DirectLoginsController.js
index 28401a2..6ca3be4 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/DirectLoginsController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/DirectLoginsController.js
@@ -1,145 +1,142 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29/* 26/*
30Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); 27Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers');
31 28
32Clipperz.PM.UI.Web.Controllers.DirectLoginsController = function() { 29Clipperz.PM.UI.Web.Controllers.DirectLoginsController = function() {
33 Clipperz.PM.UI.Web.Controllers.DirectLoginsController.superclass.constructor.apply(this, arguments); 30 Clipperz.PM.UI.Web.Controllers.DirectLoginsController.superclass.constructor.apply(this, arguments);
34 31
35 return this; 32 return this;
36}; 33};
37 34
38Clipperz.Base.extend(Clipperz.PM.UI.Web.Controllers.DirectLoginsController, Clipperz.PM.UI.Web.Controllers.GridController, { 35Clipperz.Base.extend(Clipperz.PM.UI.Web.Controllers.DirectLoginsController, Clipperz.PM.UI.Web.Controllers.GridController, {
39 36
40 'createGrid': function () { 37 'createGrid': function () {
41 return new Clipperz.PM.UI.Web.Components.GridComponent({columnsManagers: [ 38 return new Clipperz.PM.UI.Web.Components.GridComponent({columnsManagers: [
42 new Clipperz.PM.UI.Web.Components.FaviconColumnManager({ 39 new Clipperz.PM.UI.Web.Components.FaviconColumnManager({
43 'name': 'DirectLogins.favicon', 40 'name': 'DirectLogins.favicon',
44 'selector': MochiKit.Base.methodcaller('favicon'), 41 'selector': MochiKit.Base.methodcaller('favicon'),
45 'cssClass': 'favicon' 42 'cssClass': 'favicon'
46 }), 43 }),
47 // new Clipperz.PM.UI.Web.Components.LinkColumnManager({ 44 // new Clipperz.PM.UI.Web.Components.LinkColumnManager({
48 new Clipperz.PM.UI.Web.Components.DirectLoginColumnManager({ 45 new Clipperz.PM.UI.Web.Components.DirectLoginColumnManager({
49 'name': 'DirectLogins.title', 46 'name': 'DirectLogins.title',
50 'selector': MochiKit.Base.methodcaller('label'), 47 'selector': MochiKit.Base.methodcaller('label'),
51 'label': 'title', 48 'label': 'title',
52 'cssClass': 'title', 49 'cssClass': 'title',
53 'comparator': Clipperz.Base.caseInsensitiveCompare, 50 'comparator': Clipperz.Base.caseInsensitiveCompare,
54 'sortable': true, 51 'sortable': true,
55 'sorted': 'ASCENDING', 52 'sorted': 'ASCENDING',
56 'actionMethod': MochiKit.Base.methodcaller('runDirectLogin') 53 'actionMethod': MochiKit.Base.methodcaller('runDirectLogin')
57 }), 54 }),
58 // new Clipperz.PM.UI.Web.Components.TextColumnManager({ //should be StrengthColumnManager 55 // new Clipperz.PM.UI.Web.Components.TextColumnManager({ //should be StrengthColumnManager
59 // 'label':'strength', 56 // 'label':'strength',
60 // 'cssClass':'title', 57 // 'cssClass':'title',
61 // 'selector': MochiKit.Base.methodcaller('label') //should be 'strength' or a strenght evaluation function 58 // 'selector': MochiKit.Base.methodcaller('label') //should be 'strength' or a strenght evaluation function
62 // }), 59 // }),
63 new Clipperz.PM.UI.Web.Components.LinkColumnManager({ 60 new Clipperz.PM.UI.Web.Components.LinkColumnManager({
64 'name': 'DirectLogins.cardTitle', 61 'name': 'DirectLogins.cardTitle',
65 'selector': MochiKit.Base.compose(MochiKit.Base.methodcaller('label'), MochiKit.Base.methodcaller('record')), 62 'selector': MochiKit.Base.compose(MochiKit.Base.methodcaller('label'), MochiKit.Base.methodcaller('record')),
66 'label': 'card', 63 'label': 'card',
67 'cssClass': 'cardTitle', 64 'cssClass': 'cardTitle',
68 'comparator': Clipperz.Base.caseInsensitiveCompare, 65 'comparator': Clipperz.Base.caseInsensitiveCompare,
69 'sortable': true, 66 'sortable': true,
70 'sorted': 'UNSORTED', 67 'sorted': 'UNSORTED',
71 'actionMethod': MochiKit.Base.method(this, 'handleShowCard') 68 'actionMethod': MochiKit.Base.method(this, 'handleShowCard')
72 }), 69 }),
73 // new Clipperz.PM.UI.Web.Components.TextColumnManager({ //should be StrengthColumnManager 70 // new Clipperz.PM.UI.Web.Components.TextColumnManager({ //should be StrengthColumnManager
74 // 'label':'last access', 71 // 'label':'last access',
75 // 'cssClass':'title', 72 // 'cssClass':'title',
76 // 'selector': MochiKit.Base.methodcaller('label') 73 // 'selector': MochiKit.Base.methodcaller('label')
77 // // 'sortable': true, 74 // // 'sortable': true,
78 // // 'sorted': 'UNSORTED' 75 // // 'sorted': 'UNSORTED'
79 // }), 76 // }),
80 // new Clipperz.PM.UI.Web.Components.TextColumnManager({ 77 // new Clipperz.PM.UI.Web.Components.TextColumnManager({
81 // 'label':'commands', 78 // 'label':'commands',
82 // 'cssClass':'title', 79 // 'cssClass':'title',
83 // 'selector': MochiKit.Base.methodcaller('label'), //should be a function for commands display 80 // 'selector': MochiKit.Base.methodcaller('label'), //should be a function for commands display
84 // }), 81 // }),
85 new Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager({ 82 new Clipperz.PM.UI.Web.Components.DeleteObjectColumnManager({
86 'name': 'DirectLogins.delete', 83 'name': 'DirectLogins.delete',
87 'selector': MochiKit.Base.noop, 84 'selector': MochiKit.Base.noop,
88 'cssClass': 'delete', 85 'cssClass': 'delete',
89 // 'actionMethod': function(anObject, anEvent) { MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'deleteDirectLogin', {objectData:anObject, element:anEvent.src()})} 86 // 'actionMethod': function(anObject, anEvent) { MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'deleteDirectLogin', {objectData:anObject, element:anEvent.src()})}
90 'actionMethod': MochiKit.Base.method(this, 'handleDeleteDirectLogin') 87 'actionMethod': MochiKit.Base.method(this, 'handleDeleteDirectLogin')
91 }) 88 })
92 ]}); 89 ]});
93 90
94 }, 91 },
95 92
96 //----------------------------------------------------------------------------- 93 //-----------------------------------------------------------------------------
97 94
98 'getRows': function () { 95 'getRows': function () {
99 //TODO: relying on user() in GridController, bad code smell :| 96 //TODO: relying on user() in GridController, bad code smell :|
100 return this.user().getDirectLogins(); 97 return this.user().getDirectLogins();
101 }, 98 },
102 99
103 //----------------------------------------------------------------------------- 100 //-----------------------------------------------------------------------------
104 101
105 'handleShowCard': function (anObject, anEvent) { 102 'handleShowCard': function (anObject, anEvent) {
106 var cardDialogController; 103 var cardDialogController;
107 104
108 cardDialogController = new Clipperz.PM.UI.Web.Controllers.CardDialogController({record:anObject.record()}) 105 cardDialogController = new Clipperz.PM.UI.Web.Controllers.CardDialogController({record:anObject.record()})
109 cardDialogController.run(anEvent.src()); 106 cardDialogController.run(anEvent.src());
110 }, 107 },
111 108
112 //----------------------------------------------------------------------------- 109 //-----------------------------------------------------------------------------
113 110
114 'handleDeleteDirectLogin': function (anObject, anEvent) { 111 'handleDeleteDirectLogin': function (anObject, anEvent) {
115 var deferredResult; 112 var deferredResult;
116 var confirmationDialog; 113 var confirmationDialog;
117 114
118 confirmationDialog = new Clipperz.PM.UI.Common.Components.SimpleMessagePanel({ 115 confirmationDialog = new Clipperz.PM.UI.Common.Components.SimpleMessagePanel({
119 title:"Delete DirectLogin", 116 title:"Delete DirectLogin",
120 text:"Do you want to delete …", 117 text:"Do you want to delete …",
121 type:'ALERT', 118 type:'ALERT',
122 buttons: [ 119 buttons: [
123 {text:"Cancel",result:'CANCEL', isDefault:true}, 120 {text:"Cancel",result:'CANCEL', isDefault:true},
124 {text:"Delete", result:'OK'} 121 {text:"Delete", result:'OK'}
125 ] 122 ]
126 }); 123 });
127 124
128 deferredResult = new Clipperz.Async.Deferred("AppController.handleDeleteCard", {trace:false}); 125 deferredResult = new Clipperz.Async.Deferred("AppController.handleDeleteCard", {trace:false});
129 // deferredResult = confirmationDialog.deferredShow({openFromElement:anEvent.src(), onOkCloseToElement:MochiKit.DOM.currentDocument().body, onCancelCloseToElement:anEvent.src()}); 126 // deferredResult = confirmationDialog.deferredShow({openFromElement:anEvent.src(), onOkCloseToElement:MochiKit.DOM.currentDocument().body, onCancelCloseToElement:anEvent.src()});
130 deferredResult.addMethod(confirmationDialog, 'deferredShow', { 127 deferredResult.addMethod(confirmationDialog, 'deferredShow', {
131 'openFromElement': anEvent.src(), 128 'openFromElement': anEvent.src(),
132 'onOkCloseToElement': null, //MochiKit.DOM.currentDocument().body, 129 'onOkCloseToElement': null, //MochiKit.DOM.currentDocument().body,
133 'onCancelCloseToElement':anEvent.src() 130 'onCancelCloseToElement':anEvent.src()
134 }); 131 });
135 deferredResult.addCallback(function () { Clipperz.log("DELETE: " + anObject.toString(), anObject); }); 132 deferredResult.addCallback(function () { Clipperz.log("DELETE: " + anObject.toString(), anObject); });
136 deferredResult.addErrbackPass(function () { Clipperz.log("skip deletion: " + anObject.toString(), anObject); }); 133 deferredResult.addErrbackPass(function () { Clipperz.log("skip deletion: " + anObject.toString(), anObject); });
137 deferredResult.callback(); 134 deferredResult.callback();
138 135
139 return deferredResult; 136 return deferredResult;
140 }, 137 },
141 138
142 //----------------------------------------------------------------------------- 139 //-----------------------------------------------------------------------------
143 __syntaxFix__: "syntax fix" 140 __syntaxFix__: "syntax fix"
144}); 141});
145*/ \ No newline at end of file 142*/ \ No newline at end of file
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/FilterController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/FilterController.js
index 13e02bc..bfc093a 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/FilterController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/FilterController.js
@@ -1,158 +1,155 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers');
30 27
31Clipperz.PM.UI.Web.Controllers.FilterController = function(args) { 28Clipperz.PM.UI.Web.Controllers.FilterController = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Controllers.FilterController.superclass.constructor.call(this, args); 31 Clipperz.PM.UI.Web.Controllers.FilterController.superclass.constructor.call(this, args);
35 32
36 this._filterElements = []; 33 this._filterElements = [];
37 this._filter = ""; 34 this._filter = "";
38 35
39 this._pendingSearchClicks = 0; 36 this._pendingSearchClicks = 0;
40 37
41 return this; 38 return this;
42}; 39};
43 40
44 41
45Clipperz.Base.extend(Clipperz.PM.UI.Web.Controllers.FilterController, Object, { 42Clipperz.Base.extend(Clipperz.PM.UI.Web.Controllers.FilterController, Object, {
46 43
47 //----------------------------------------------------------------------------- 44 //-----------------------------------------------------------------------------
48 45
49 'getFilter': function () { 46 'getFilter': function () {
50 return this._filter; 47 return this._filter;
51 }, 48 },
52 49
53 '_setFilter': function (aFilterElement, aFilter) { 50 '_setFilter': function (aFilterElement, aFilter) {
54 if (aFilter != this._filter) { 51 if (aFilter != this._filter) {
55 this._filter = aFilter; 52 this._filter = aFilter;
56 MochiKit.Signal.signal(this, 'filterUpdated', aFilter); 53 MochiKit.Signal.signal(this, 'filterUpdated', aFilter);
57 this.updateFilterElements(aFilterElement, aFilter); 54 this.updateFilterElements(aFilterElement, aFilter);
58 } 55 }
59 }, 56 },
60 57
61 'setFilter': function (aFilter) { 58 'setFilter': function (aFilter) {
62 this._setFilter(null, aFilter); 59 this._setFilter(null, aFilter);
63 }, 60 },
64 61
65 //----------------------------------------------------------------------------- 62 //-----------------------------------------------------------------------------
66 63
67 'filterElements': function () { 64 'filterElements': function () {
68 return this._filterElements; 65 return this._filterElements;
69 }, 66 },
70 67
71 'registerFilterElement': function (aFilterElement) { 68 'registerFilterElement': function (aFilterElement) {
72//Clipperz.log("=== FilterController.registerFilterElement", aFilterElement); 69//Clipperz.log("=== FilterController.registerFilterElement", aFilterElement);
73 this._filterElements.push(aFilterElement); 70 this._filterElements.push(aFilterElement);
74 MochiKit.Signal.connect(aFilterElement, 'onkeydown', this, 'searchClickHandler'); 71 MochiKit.Signal.connect(aFilterElement, 'onkeydown', this, 'searchClickHandler');
75 MochiKit.Signal.connect(aFilterElement, 'onfocus', this, 'searchClickHandler'); 72 MochiKit.Signal.connect(aFilterElement, 'onfocus', this, 'searchClickHandler');
76 }, 73 },
77 74
78 'removeFilterElement': function (aFilterElement) { 75 'removeFilterElement': function (aFilterElement) {
79 var i; 76 var i;
80 var filterElements; 77 var filterElements;
81 for (i=0; i < filterElements; i++) { 78 for (i=0; i < filterElements; i++) {
82 if (filterElements[i] == aFilterElement); 79 if (filterElements[i] == aFilterElement);
83 filterElements.splice(i, 1); 80 filterElements.splice(i, 1);
84 // TODO unregister/disconnect filterElement ??MochiKit.Signal.disconnect(this.grid().filterElement(), 'updateFilter', this.filterController(), 'handleUpdateFilter'); 81 // TODO unregister/disconnect filterElement ??MochiKit.Signal.disconnect(this.grid().filterElement(), 'updateFilter', this.filterController(), 'handleUpdateFilter');
85 } 82 }
86 }, 83 },
87 84
88 'updateFilterElements': function (aSourceElement, aFilterString) { 85 'updateFilterElements': function (aSourceElement, aFilterString) {
89 MochiKit.Iter.forEach(this.filterElements(), 86 MochiKit.Iter.forEach(this.filterElements(),
90 function (aFilterElement) { 87 function (aFilterElement) {
91 if (aFilterElement != aSourceElement) { 88 if (aFilterElement != aSourceElement) {
92 aFilterElement.value = aFilterString; 89 aFilterElement.value = aFilterString;
93 } 90 }
94 } 91 }
95 ); 92 );
96 93
97 if (aSourceElement != null) { 94 if (aSourceElement != null) {
98 aSourceElement.focus(); 95 aSourceElement.focus();
99 } 96 }
100 }, 97 },
101 98
102 //----------------------------------------------------------------------------- 99 //-----------------------------------------------------------------------------
103 100
104 'run': function () { 101 'run': function () {
105//Clipperz.log("=== FilterController.run"); 102//Clipperz.log("=== FilterController.run");
106 }, 103 },
107 104
108 //----------------------------------------------------------------------------- 105 //-----------------------------------------------------------------------------
109 106
110 'pendingSearchClicks': function () { 107 'pendingSearchClicks': function () {
111 return this._pendingSearchClicks; 108 return this._pendingSearchClicks;
112 }, 109 },
113 110
114 'incrementPendingSearchClicks': function () { 111 'incrementPendingSearchClicks': function () {
115 this._pendingSearchClicks++; 112 this._pendingSearchClicks++;
116 }, 113 },
117 114
118 'decrementPendingSearchClicks': function () { 115 'decrementPendingSearchClicks': function () {
119 this._pendingSearchClicks--; 116 this._pendingSearchClicks--;
120 }, 117 },
121 118
122 //----------------------------------------------------------------------------- 119 //-----------------------------------------------------------------------------
123 120
124 'searchClickHandler': function (anEvent) { 121 'searchClickHandler': function (anEvent) {
125 if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ENTER')) { 122 if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ENTER')) {
126 anEvent.preventDefault(); 123 anEvent.preventDefault();
127 } else { 124 } else {
128 var value; 125 var value;
129 126
130 if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ESCAPE')) { 127 if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ESCAPE')) {
131 value = "" 128 value = ""
132 } else if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ARROW_UP')) { 129 } else if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ARROW_UP')) {
133 } else if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ARROW_DOWN')) { 130 } else if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ARROW_DOWN')) {
134 } else { 131 } else {
135 value = null; 132 value = null;
136 } 133 }
137 134
138 this.incrementPendingSearchClicks(); 135 this.incrementPendingSearchClicks();
139 MochiKit.Async.callLater(0.1, MochiKit.Base.method(this, "searchClickDeferredHandler", anEvent.src(), value)); 136 MochiKit.Async.callLater(0.1, MochiKit.Base.method(this, "searchClickDeferredHandler", anEvent.src(), value));
140 } 137 }
141 }, 138 },
142 139
143 //......................................................................... 140 //.........................................................................
144 141
145 'searchClickDeferredHandler': function (aFilterElement, aValue) { 142 'searchClickDeferredHandler': function (aFilterElement, aValue) {
146 if (aValue != null) { 143 if (aValue != null) {
147 aFilterElement.value = aValue; 144 aFilterElement.value = aValue;
148 } 145 }
149 146
150 this.decrementPendingSearchClicks(); 147 this.decrementPendingSearchClicks();
151 if (this.pendingSearchClicks()==0) { 148 if (this.pendingSearchClicks()==0) {
152 this._setFilter(aFilterElement, aFilterElement.value); 149 this._setFilter(aFilterElement, aFilterElement.value);
153 } 150 }
154 }, 151 },
155 152
156 //----------------------------------------------------------------------------- 153 //-----------------------------------------------------------------------------
157 'syntaxFix': 'syntax fix' 154 'syntaxFix': 'syntax fix'
158}); \ No newline at end of file 155}); \ No newline at end of file
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/GridController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/GridController.js
index 740a091..8bb3016 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/GridController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/GridController.js
@@ -1,374 +1,371 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers');
30 27
31Clipperz.PM.UI.Web.Controllers.GridController = function(args) { 28Clipperz.PM.UI.Web.Controllers.GridController = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.Web.Controllers.GridController.superclass.constructor.call(this, args); 31 Clipperz.PM.UI.Web.Controllers.GridController.superclass.constructor.call(this, args);
35 32
36 this._grid = null; 33 this._grid = null;
37 this._user = null; 34 this._user = null;
38 this._sortedColumnManager = null; 35 this._sortedColumnManager = null;
39 this._cachedObjects = null; 36 this._cachedObjects = null;
40 this._filterController = args.filterController || null; 37 this._filterController = args.filterController || null;
41 38
42 this._deferredDisplaySelectedRowsInvocation = null; 39 this._deferredDisplaySelectedRowsInvocation = null;
43 40
44 return this; 41 return this;
45}; 42};
46 43
47Clipperz.Base.extend(Clipperz.PM.UI.Web.Controllers.GridController, Object, { 44Clipperz.Base.extend(Clipperz.PM.UI.Web.Controllers.GridController, Object, {
48 45
49 'toString': function() { 46 'toString': function() {
50 return "Clipperz.PM.UI.Web.Controllers.GridController"; 47 return "Clipperz.PM.UI.Web.Controllers.GridController";
51 }, 48 },
52 49
53 //----------------------------------------------------------------------------- 50 //-----------------------------------------------------------------------------
54 51
55 'createGrid': function () { 52 'createGrid': function () {
56 throw Clipperz.Base.exception.AbstractMethod; 53 throw Clipperz.Base.exception.AbstractMethod;
57 }, 54 },
58 55
59 'setupWithGrid': function (aGrid) { 56 'setupWithGrid': function (aGrid) {
60 this._grid = aGrid; 57 this._grid = aGrid;
61 58
62 if (this._grid != null) { 59 if (this._grid != null) {
63 MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) { 60 MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) {
64 if (aColumnManager.isSortable()) { 61 if (aColumnManager.isSortable()) {
65 if (aColumnManager.isSorted()) { 62 if (aColumnManager.isSorted()) {
66 this.setSortedColumnManager(aColumnManager); 63 this.setSortedColumnManager(aColumnManager);
67 } 64 }
68 MochiKit.Signal.connect(aColumnManager, 'sort', this, 'handleColumnManagerSort'); 65 MochiKit.Signal.connect(aColumnManager, 'sort', this, 'handleColumnManagerSort');
69 } 66 }
70 MochiKit.Signal.connect(aColumnManager, 'selectRow', this, 'handleColumnManagerSelectRow'); 67 MochiKit.Signal.connect(aColumnManager, 'selectRow', this, 'handleColumnManagerSelectRow');
71 MochiKit.Signal.connect(aColumnManager, 'unselectRow', this, 'handleColumnManagerUnselectRow'); 68 MochiKit.Signal.connect(aColumnManager, 'unselectRow', this, 'handleColumnManagerUnselectRow');
72 }, this); 69 }, this);
73 } 70 }
74 }, 71 },
75 72
76 'grid': function() { 73 'grid': function() {
77 if (this._grid == null) { 74 if (this._grid == null) {
78 this.setupWithGrid(this.createGrid()); 75 this.setupWithGrid(this.createGrid());
79 } 76 }
80 77
81 return this._grid; 78 return this._grid;
82 }, 79 },
83 80
84 'filterController': function () { 81 'filterController': function () {
85//Clipperz.log('GridController.filterController >>>', this._filterController); 82//Clipperz.log('GridController.filterController >>>', this._filterController);
86 if (this._filterController == null) { 83 if (this._filterController == null) {
87 this._filterController = new Clipperz.PM.UI.Web.Controllers.FilterController(); 84 this._filterController = new Clipperz.PM.UI.Web.Controllers.FilterController();
88 } 85 }
89//Clipperz.log('GridController.filterController <<<', this._filterController); 86//Clipperz.log('GridController.filterController <<<', this._filterController);
90 return this._filterController; 87 return this._filterController;
91 }, 88 },
92 89
93 //----------------------------------------------------------------------------- 90 //-----------------------------------------------------------------------------
94 91
95 'columnsManagers': function () { 92 'columnsManagers': function () {
96 return this.grid().columnsManagers(); 93 return this.grid().columnsManagers();
97 }, 94 },
98 95
99 'columnManagerWithName': function (aName) { 96 'columnManagerWithName': function (aName) {
100 varmanagers; 97 varmanagers;
101 var result; 98 var result;
102 99
103 managers = MochiKit.Base.filter(function (aManager) { return aManager.name() == aName; } , this.columnsManagers()); 100 managers = MochiKit.Base.filter(function (aManager) { return aManager.name() == aName; } , this.columnsManagers());
104 101
105 if (managers.length == 1) { 102 if (managers.length == 1) {
106 result = managers[0]; 103 result = managers[0];
107 } else if (managers.length == 0) { 104 } else if (managers.length == 0) {
108 result = null; 105 result = null;
109 } else { 106 } else {
110 throw "WTF!!!"; 107 throw "WTF!!!";
111 } 108 }
112 109
113 return result; 110 return result;
114 }, 111 },
115 112
116 'sortedColumnManager': function () { 113 'sortedColumnManager': function () {
117 return this._sortedColumnManager; 114 return this._sortedColumnManager;
118 }, 115 },
119 116
120 'setSortedColumnManager': function(aValue) { 117 'setSortedColumnManager': function(aValue) {
121 if (aValue.sorted() != 'UNSORTED') { 118 if (aValue.sorted() != 'UNSORTED') {
122 this._sortedColumnManager = aValue; 119 this._sortedColumnManager = aValue;
123 } else { 120 } else {
124 this._sortedColumnManager = null; 121 this._sortedColumnManager = null;
125 } 122 }
126 }, 123 },
127 124
128 //----------------------------------------------------------------------------- 125 //-----------------------------------------------------------------------------
129 126
130 'handleColumnManagerSort': function(aSelectedColumnManager) { 127 'handleColumnManagerSort': function(aSelectedColumnManager) {
131 MochiKit.Iter.forEach(this.columnsManagers(), function(aColumnManager) { 128 MochiKit.Iter.forEach(this.columnsManagers(), function(aColumnManager) {
132 if (aSelectedColumnManager != aColumnManager) { 129 if (aSelectedColumnManager != aColumnManager) {
133 if (aColumnManager.isSortable()) { 130 if (aColumnManager.isSortable()) {
134 aColumnManager.setSorted('UNSORTED'); 131 aColumnManager.setSorted('UNSORTED');
135 } 132 }
136 } 133 }
137 }); 134 });
138 135
139 aSelectedColumnManager.toggleSorting(); 136 aSelectedColumnManager.toggleSorting();
140 this.setSortedColumnManager(aSelectedColumnManager); 137 this.setSortedColumnManager(aSelectedColumnManager);
141 138
142 this.displaySelectedRows(this.filterController().getFilter()); 139 this.displaySelectedRows(this.filterController().getFilter());
143 }, 140 },
144 141
145 'handleColumnManagerSelectRow': function (aRowObject) { 142 'handleColumnManagerSelectRow': function (aRowObject) {
146 this.grid().selectRow(aRowObject); 143 this.grid().selectRow(aRowObject);
147 }, 144 },
148 145
149 'handleColumnManagerUnselectRow': function (aRowObject) { 146 'handleColumnManagerUnselectRow': function (aRowObject) {
150 this.grid().unselectRow(aRowObject); 147 this.grid().unselectRow(aRowObject);
151 }, 148 },
152 149
153 //----------------------------------------------------------------------------- 150 //-----------------------------------------------------------------------------
154 151
155 'handleFilterUpdated': function (aFilter) { 152 'handleFilterUpdated': function (aFilter) {
156 if (this.grid().isActive()) { 153 if (this.grid().isActive()) {
157 this.displaySelectedRows(aFilter); 154 this.displaySelectedRows(aFilter);
158 } 155 }
159 }, 156 },
160 157
161 //----------------------------------------------------------------------------- 158 //-----------------------------------------------------------------------------
162 //TODO: relying on user() in GridController, bad code smell :| 159 //TODO: relying on user() in GridController, bad code smell :|
163 //mhh: a controller should have access to business logic object too. Otherwise it will fail its controller role. [Giulio Cesare] 160 //mhh: a controller should have access to business logic object too. Otherwise it will fail its controller role. [Giulio Cesare]
164 161
165 'setUser': function(anUser) { 162 'setUser': function(anUser) {
166 this._user = anUser; 163 this._user = anUser;
167 }, 164 },
168 165
169 'user': function() { 166 'user': function() {
170 return this._user; 167 return this._user;
171 }, 168 },
172 169
173 //----------------------------------------------------------------------------- 170 //-----------------------------------------------------------------------------
174 171
175 'run': function(args) { 172 'run': function(args) {
176//Clipperz.log("=== GridController.run"); 173//Clipperz.log("=== GridController.run");
177 var deferredResult; 174 var deferredResult;
178 175
179 this.setUser(args.user); 176 this.setUser(args.user);
180 args.slot.setContent(this.grid()); 177 args.slot.setContent(this.grid());
181 this.filterController().registerFilterElement(this.grid().filterElement()); 178 this.filterController().registerFilterElement(this.grid().filterElement());
182 MochiKit.Signal.connect(this.filterController(), 'filterUpdated', this, 'handleFilterUpdated'); 179 MochiKit.Signal.connect(this.filterController(), 'filterUpdated', this, 'handleFilterUpdated');
183 180
184 return this.displaySelectedRows(); 181 return this.displaySelectedRows();
185 }, 182 },
186 183
187 //----------------------------------------------------------------------------- 184 //-----------------------------------------------------------------------------
188 185
189 'handleGenericError': function(anError) { 186 'handleGenericError': function(anError) {
190 var result; 187 var result;
191 188
192 if (anError instanceof MochiKit.Async.CancelledError) { 189 if (anError instanceof MochiKit.Async.CancelledError) {
193 result = anError; 190 result = anError;
194 } else { 191 } else {
195Clipperz.log("## GridController - GENERIC ERROR" + "\n" + "==>> " + anError + " <<==\n" + anError.stack); 192Clipperz.log("## GridController - GENERIC ERROR" + "\n" + "==>> " + anError + " <<==\n" + anError.stack);
196 result = new MochiKit.Async.CancelledError(anError); 193 result = new MochiKit.Async.CancelledError(anError);
197 } 194 }
198 195
199 return result; 196 return result;
200 }, 197 },
201 198
202 //----------------------------------------------------------------------------- 199 //-----------------------------------------------------------------------------
203 200
204 'getRows': function () { 201 'getRows': function () {
205 throw Clipperz.Base.AbstractMethod; 202 throw Clipperz.Base.AbstractMethod;
206 }, 203 },
207 204
208 //----------------------------------------------------------------------------- 205 //-----------------------------------------------------------------------------
209 206
210 'setDeferredDisplaySelectedRowsInvocation': function (aDeferred) { 207 'setDeferredDisplaySelectedRowsInvocation': function (aDeferred) {
211 if (this._deferredDisplaySelectedRowsInvocation != null) { 208 if (this._deferredDisplaySelectedRowsInvocation != null) {
212 this._deferredDisplaySelectedRowsInvocation.cancel(); 209 this._deferredDisplaySelectedRowsInvocation.cancel();
213 } 210 }
214 211
215 this._deferredDisplaySelectedRowsInvocation = aDeferred; 212 this._deferredDisplaySelectedRowsInvocation = aDeferred;
216 }, 213 },
217 214
218 //----------------------------------------------------------------------------- 215 //-----------------------------------------------------------------------------
219 216
220 'resetDeferredDisplaySelectedRowsInvocation': function () { 217 'resetDeferredDisplaySelectedRowsInvocation': function () {
221 if (this._deferredDisplaySelectedRowsInvocation != null) { 218 if (this._deferredDisplaySelectedRowsInvocation != null) {
222 this._deferredDisplaySelectedRowsInvocation.cancel(); 219 this._deferredDisplaySelectedRowsInvocation.cancel();
223 } 220 }
224 }, 221 },
225 222
226 //----------------------------------------------------------------------------- 223 //-----------------------------------------------------------------------------
227 224
228 '_displaySelectedRows': function (aFilter, someRows) { 225 '_displaySelectedRows': function (aFilter, someRows) {
229 var result; 226 var result;
230 var delay; 227 var delay;
231 228
232 if ((aFilter != null) && (aFilter != '')) { 229 if ((aFilter != null) && (aFilter != '')) {
233 var filter; 230 var filter;
234 varfilterRegExp; 231 varfilterRegExp;
235 232
236 filter = aFilter.replace(/[^A-Za-z0-9]/g, "\\$&"); 233 filter = aFilter.replace(/[^A-Za-z0-9]/g, "\\$&");
237 filterRegExp = new RegExp(filter, "i"); 234 filterRegExp = new RegExp(filter, "i");
238 result = MochiKit.Base.filter(function (aCachedResult) { return filterRegExp.test(aCachedResult['_searchableContent'])}, someRows); 235 result = MochiKit.Base.filter(function (aCachedResult) { return filterRegExp.test(aCachedResult['_searchableContent'])}, someRows);
239 delay = 0.002*result.length; 236 delay = 0.002*result.length;
240 237
241 this.setDeferredDisplaySelectedRowsInvocation(MochiKit.Async.callLater(delay, MochiKit.Base.method(this, "deferredDisplaySelectedRows", result))); 238 this.setDeferredDisplaySelectedRowsInvocation(MochiKit.Async.callLater(delay, MochiKit.Base.method(this, "deferredDisplaySelectedRows", result)));
242 } else { 239 } else {
243 result = someRows; 240 result = someRows;
244 241
245 this.resetDeferredDisplaySelectedRowsInvocation(); 242 this.resetDeferredDisplaySelectedRowsInvocation();
246 this.deferredDisplaySelectedRows(result); 243 this.deferredDisplaySelectedRows(result);
247 } 244 }
248 245
249 }, 246 },
250 247
251 //----------------------------------------------------------------------------- 248 //-----------------------------------------------------------------------------
252 249
253 'deferredDisplaySelectedRows': function (someRows) { 250 'deferredDisplaySelectedRows': function (someRows) {
254 if (this.sortedColumnManager() != null) { 251 if (this.sortedColumnManager() != null) {
255 var comparator; 252 var comparator;
256 var fieldName; 253 var fieldName;
257 254
258 fieldName = this.sortedColumnManager().name(); 255 fieldName = this.sortedColumnManager().name();
259 comparator = this.sortedColumnManager().comparator(); 256 comparator = this.sortedColumnManager().comparator();
260 if (this.sortedColumnManager().sorted() == 'DESCENDING') { 257 if (this.sortedColumnManager().sorted() == 'DESCENDING') {
261 comparator = Clipperz.Base.reverseComparator(comparator); 258 comparator = Clipperz.Base.reverseComparator(comparator);
262 } 259 }
263 260
264 someRows.sort(MochiKit.Base.partial(function(aKey, aComparator, aObject, bObject){ 261 someRows.sort(MochiKit.Base.partial(function(aKey, aComparator, aObject, bObject){
265 return comparator(aObject[aKey], bObject[aKey]); 262 return comparator(aObject[aKey], bObject[aKey]);
266 }, this.sortedColumnManager().name(), comparator)); 263 }, this.sortedColumnManager().name(), comparator));
267 } 264 }
268 265
269 this.grid().update(someRows); 266 this.grid().update(someRows);
270 this.grid().endSearch(); 267 this.grid().endSearch();
271 }, 268 },
272 269
273 //----------------------------------------------------------------------------- 270 //-----------------------------------------------------------------------------
274 271
275 'getCachedValues': function () { 272 'getCachedValues': function () {
276 var deferredResult; 273 var deferredResult;
277 274
278 if (this._cachedObjects != null) { 275 if (this._cachedObjects != null) {
279 deferredResult = MochiKit.Async.succeed(this._cachedObjects); 276 deferredResult = MochiKit.Async.succeed(this._cachedObjects);
280 } else { 277 } else {
281 var objectCollectResultsConfiguration; 278 var objectCollectResultsConfiguration;
282 279
283 objectCollectResultsConfiguration = { 280 objectCollectResultsConfiguration = {
284 '_rowObject': MochiKit.Async.succeed, 281 '_rowObject': MochiKit.Async.succeed,
285 '_reference': MochiKit.Base.methodcaller('reference'), 282 '_reference': MochiKit.Base.methodcaller('reference'),
286 '_searchableContent':MochiKit.Base.methodcaller('searchableContent') 283 '_searchableContent':MochiKit.Base.methodcaller('searchableContent')
287 }; 284 };
288 285
289 MochiKit.Base.map(function (aColumnManager) { 286 MochiKit.Base.map(function (aColumnManager) {
290 objectCollectResultsConfiguration[aColumnManager.name()] = aColumnManager.selector(); 287 objectCollectResultsConfiguration[aColumnManager.name()] = aColumnManager.selector();
291 }, this.columnsManagers()); 288 }, this.columnsManagers());
292 289
293 deferredResult = new Clipperz.Async.Deferred("GridController.getCachedValues", {trace:false}); 290 deferredResult = new Clipperz.Async.Deferred("GridController.getCachedValues", {trace:false});
294 deferredResult.addMethod(this, 'getRows'); 291 deferredResult.addMethod(this, 'getRows');
295 deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("GridController.getCachedValues - collectResults", objectCollectResultsConfiguration, {trace:false})); 292 deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("GridController.getCachedValues - collectResults", objectCollectResultsConfiguration, {trace:false}));
296 deferredResult.addCallback(Clipperz.Async.collectAll); 293 deferredResult.addCallback(Clipperz.Async.collectAll);
297 deferredResult.addCallback(MochiKit.Base.bind(function (someRows) { 294 deferredResult.addCallback(MochiKit.Base.bind(function (someRows) {
298 this._cachedObjects = someRows; 295 this._cachedObjects = someRows;
299 return this._cachedObjects; 296 return this._cachedObjects;
300 }, this)); 297 }, this));
301 deferredResult.callback(); 298 deferredResult.callback();
302 } 299 }
303 300
304 return deferredResult; 301 return deferredResult;
305 }, 302 },
306 303
307 //----------------------------------------------------------------------------- 304 //-----------------------------------------------------------------------------
308 305
309 'hasPendingChanges': function () { 306 'hasPendingChanges': function () {
310 return this.user().hasPendingChanges(); 307 return this.user().hasPendingChanges();
311 }, 308 },
312 309
313 'saveChanges': function () { 310 'saveChanges': function () {
314 this._cachedObjects = null; 311 this._cachedObjects = null;
315 312
316 return Clipperz.Async.callbacks("GridController.saveChanges", [ 313 return Clipperz.Async.callbacks("GridController.saveChanges", [
317 MochiKit.Base.method(this.user(), 'saveChanges'), 314 MochiKit.Base.method(this.user(), 'saveChanges'),
318 MochiKit.Base.method(this, 'focus') 315 MochiKit.Base.method(this, 'focus')
319 ], {trace:false}); 316 ], {trace:false});
320 }, 317 },
321 318
322 'revertChanges': function () { 319 'revertChanges': function () {
323 return this.user().revertChanges(); 320 return this.user().revertChanges();
324 }, 321 },
325 322
326 //----------------------------------------------------------------------------- 323 //-----------------------------------------------------------------------------
327 324
328 'displayEmptyContent': function () { 325 'displayEmptyContent': function () {
329 }, 326 },
330 327
331 'hideEmptyContent': function () { 328 'hideEmptyContent': function () {
332 this.grid().removeNoRowsGridComponent(); 329 this.grid().removeNoRowsGridComponent();
333 }, 330 },
334 331
335 'displaySelectedRows': function (aFilter) { 332 'displaySelectedRows': function (aFilter) {
336 if ((aFilter != null) && (aFilter != '')){ 333 if ((aFilter != null) && (aFilter != '')){
337 this.grid().startSearch(); 334 this.grid().startSearch();
338 } 335 }
339 336
340 return Clipperz.Async.callbacks("GridController.displaySelectedrows", [ 337 return Clipperz.Async.callbacks("GridController.displaySelectedrows", [
341 MochiKit.Base.method(this, 'getCachedValues'), 338 MochiKit.Base.method(this, 'getCachedValues'),
342 MochiKit.Base.itemgetter('length'), 339 MochiKit.Base.itemgetter('length'),
343 Clipperz.Async.deferredIf("There are some items to show in the grid", [ 340 Clipperz.Async.deferredIf("There are some items to show in the grid", [
344 MochiKit.Base.method(this, 'hideEmptyContent'), 341 MochiKit.Base.method(this, 'hideEmptyContent'),
345 MochiKit.Base.method(this, 'getCachedValues'), 342 MochiKit.Base.method(this, 'getCachedValues'),
346 MochiKit.Base.method(this, '_displaySelectedRows', aFilter) 343 MochiKit.Base.method(this, '_displaySelectedRows', aFilter)
347 ], [ 344 ], [
348 MochiKit.Base.method(this, 'displayEmptyContent'), 345 MochiKit.Base.method(this, 'displayEmptyContent'),
349 MochiKit.Base.method(this.grid(), 'endSearch') 346 MochiKit.Base.method(this.grid(), 'endSearch')
350 ]) 347 ])
351 ], {trace:false}); 348 ], {trace:false});
352 }, 349 },
353 350
354 //----------------------------------------------------------------------------- 351 //-----------------------------------------------------------------------------
355 352
356 'focus': function () { 353 'focus': function () {
357 return Clipperz.Async.callbacks("GridController.focus", [ 354 return Clipperz.Async.callbacks("GridController.focus", [
358 MochiKit.Base.method(this, 'displaySelectedRows', this.filterController().getFilter()), 355 MochiKit.Base.method(this, 'displaySelectedRows', this.filterController().getFilter()),
359 MochiKit.Base.method(this.grid(), 'focus') 356 MochiKit.Base.method(this.grid(), 'focus')
360 ], {trace:false}) 357 ], {trace:false})
361 //*##*/this.displaySelectedRows(this.filterController().getFilter()); 358 //*##*/this.displaySelectedRows(this.filterController().getFilter());
362 // this.grid().focus(); 359 // this.grid().focus();
363 }, 360 },
364 361
365 //============================================================================= 362 //=============================================================================
366 363
367 'deleteAllCleanTextData': function () { 364 'deleteAllCleanTextData': function () {
368 this._cachedObjects = null; 365 this._cachedObjects = null;
369 this.grid().drawEmpty(); 366 this.grid().drawEmpty();
370 }, 367 },
371 368
372 //============================================================================= 369 //=============================================================================
373 __syntaxFix__: "syntax fix" 370 __syntaxFix__: "syntax fix"
374}); 371});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js
index d88af41..d0b378c 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/LoginController.js
@@ -1,259 +1,256 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers');
30 27
31Clipperz.PM.UI.Web.Controllers.LoginController = function(args) { 28Clipperz.PM.UI.Web.Controllers.LoginController = function(args) {
32 this._args = args || {}; 29 this._args = args || {};
33 30
34 this._loginPage = null; 31 this._loginPage = null;
35 32
36 this._newUserWizardController = null; 33 this._newUserWizardController = null;
37 this._newUserCreationComponent = null; 34 this._newUserCreationComponent = null;
38 35
39 return this; 36 return this;
40} 37}
41 38
42MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.LoginController.prototype, { 39MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.LoginController.prototype, {
43 40
44 'toString': function() { 41 'toString': function() {
45 return "Clipperz.PM.UI.Web.Controllers.LoginController"; 42 return "Clipperz.PM.UI.Web.Controllers.LoginController";
46 }, 43 },
47 44
48 'args': function () { 45 'args': function () {
49 return this._args; 46 return this._args;
50 }, 47 },
51 48
52 //----------------------------------------------------------------------------- 49 //-----------------------------------------------------------------------------
53 50
54 'loginPage': function() { 51 'loginPage': function() {
55 if (this._loginPage == null) { 52 if (this._loginPage == null) {
56 this._loginPage = new Clipperz.PM.UI.Web.Components.LoginPage(); 53 this._loginPage = new Clipperz.PM.UI.Web.Components.LoginPage();
57 54
58 MochiKit.Signal.connect(this._loginPage, 'createNewAccountClick', this, 'handleCreateNewAccountClick') 55 MochiKit.Signal.connect(this._loginPage, 'createNewAccountClick', this, 'handleCreateNewAccountClick')
59 } 56 }
60 57
61 return this._loginPage; 58 return this._loginPage;
62 }, 59 },
63 60
64 //----------------------------------------------------------------------------- 61 //-----------------------------------------------------------------------------
65 62
66 'run': function(args) { 63 'run': function(args) {
67 varslot; 64 varslot;
68 varloginPage; 65 varloginPage;
69 varloginForm; 66 varloginForm;
70 67
71 slot = args.slot; 68 slot = args.slot;
72 69
73 loginForm =new Clipperz.PM.UI.Web.Components.LoginForm({'autocomplete': this.args()['autocomplete']}); 70 loginForm =new Clipperz.PM.UI.Web.Components.LoginForm({'autocomplete': this.args()['autocomplete']});
74 71
75 slot.setContent(this.loginPage()); 72 slot.setContent(this.loginPage());
76 this.loginPage().slotNamed('loginForm').setContent(loginForm); 73 this.loginPage().slotNamed('loginForm').setContent(loginForm);
77 74
78 MochiKit.Signal.connect(loginForm, 'doLogin', MochiKit.Base.method(this, 'doLogin', loginForm)); 75 MochiKit.Signal.connect(loginForm, 'doLogin', MochiKit.Base.method(this, 'doLogin', loginForm));
79 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'doLogin', MochiKit.Base.method(this, 'doLogin', loginForm)); 76 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'doLogin', MochiKit.Base.method(this, 'doLogin', loginForm));
80 }, 77 },
81 78
82 //----------------------------------------------------------------------------- 79 //-----------------------------------------------------------------------------
83 80
84 'doLogin': function(aLoginForm, anEvent) { 81 'doLogin': function(aLoginForm, anEvent) {
85 var deferredResult; 82 var deferredResult;
86 varparameters; 83 varparameters;
87 // varshouldUseOTP; 84 // varshouldUseOTP;
88 var loginProgress; 85 var loginProgress;
89 varuser; 86 varuser;
90 var getPassphraseDelegate; 87 var getPassphraseDelegate;
91 88
92 parameters = anEvent; 89 parameters = anEvent;
93 // shouldUseOTP = (typeof(parameters.passphrase) == 'undefined'); 90 // shouldUseOTP = (typeof(parameters.passphrase) == 'undefined');
94 91
95 getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, parameters.passphrase); 92 getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, parameters.passphrase);
96 user = new Clipperz.PM.DataModel.User({'username':parameters.username, 'getPassphraseFunction':MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'getPassphrase')}); 93 user = new Clipperz.PM.DataModel.User({'username':parameters.username, 'getPassphraseFunction':MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'getPassphrase')});
97 94
98 loginProgress = new Clipperz.PM.UI.Web.Components.LoginProgress(); 95 loginProgress = new Clipperz.PM.UI.Web.Components.LoginProgress();
99 96
100 deferredResult = new Clipperz.Async.Deferred("LoginController.doLogin", {trace:false}); 97 deferredResult = new Clipperz.Async.Deferred("LoginController.doLogin", {trace:false});
101 deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':4}); 98 deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':4});
102 deferredResult.addMethod(Clipperz.PM.RunTime.mainController, 'setPassphraseDelegate', getPassphraseDelegate); 99 deferredResult.addMethod(Clipperz.PM.RunTime.mainController, 'setPassphraseDelegate', getPassphraseDelegate);
103 deferredResult.addMethod(loginProgress, 'deferredShowModal', {deferredObject:deferredResult, openFromElement:aLoginForm.submitButtonElement()}); 100 deferredResult.addMethod(loginProgress, 'deferredShowModal', {deferredObject:deferredResult, openFromElement:aLoginForm.submitButtonElement()});
104 deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'); 101 deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection');
105 // if (shouldUseOTP == false) { 102 // if (shouldUseOTP == false) {
106 deferredResult.addMethod(user, 'login'); 103 deferredResult.addMethod(user, 'login');
107 // } else { 104 // } else {
108 // deferredResult.addMethod(user, 'loginUsingOTP', parameters.username, parameters.otp); 105 // deferredResult.addMethod(user, 'loginUsingOTP', parameters.username, parameters.otp);
109 // } 106 // }
110 deferredResult.addCallback(function(aLoginProgress, res) { 107 deferredResult.addCallback(function(aLoginProgress, res) {
111 aLoginProgress.disableCancel(); 108 aLoginProgress.disableCancel();
112 return res; 109 return res;
113 }, loginProgress); 110 }, loginProgress);
114 deferredResult.addCallback(function () { 111 deferredResult.addCallback(function () {
115 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN',MochiKit.Base.method(loginProgress, 'deferredHideModalAndRemove', {closeToElement:MochiKit.DOM.currentDocument().body})); 112 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN',MochiKit.Base.method(loginProgress, 'deferredHideModalAndRemove', {closeToElement:MochiKit.DOM.currentDocument().body}));
116 }) 113 })
117 deferredResult.addMethod(this, 'userLoggedIn', user, loginProgress, aLoginForm); 114 deferredResult.addMethod(this, 'userLoggedIn', user, loginProgress, aLoginForm);
118 deferredResult.addErrback (MochiKit.Base.method(this, 'handleFailedLogin', loginProgress)); 115 deferredResult.addErrback (MochiKit.Base.method(this, 'handleFailedLogin', loginProgress));
119 116
120 deferredResult.addErrback (MochiKit.Base.method(loginProgress, 'deferredHideModalAndRemove', {closeToElement:aLoginForm.submitButtonElement()})); 117 deferredResult.addErrback (MochiKit.Base.method(loginProgress, 'deferredHideModalAndRemove', {closeToElement:aLoginForm.submitButtonElement()}));
121 deferredResult.addErrbackPass (MochiKit.Base.method(aLoginForm, 'focusOnPassphraseField')); 118 deferredResult.addErrbackPass (MochiKit.Base.method(aLoginForm, 'focusOnPassphraseField'));
122 deferredResult.addBoth(MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'removePassphraseDelegate', getPassphraseDelegate)); 119 deferredResult.addBoth(MochiKit.Base.method(Clipperz.PM.RunTime.mainController, 'removePassphraseDelegate', getPassphraseDelegate));
123 deferredResult.callback(); 120 deferredResult.callback();
124 121
125 MochiKit.Signal.connect(loginProgress, 'cancelEvent', deferredResult, 'cancel'); 122 MochiKit.Signal.connect(loginProgress, 'cancelEvent', deferredResult, 'cancel');
126 123
127 return deferredResult; 124 return deferredResult;
128 }, 125 },
129 126
130 //----------------------------------------------------------------------------- 127 //-----------------------------------------------------------------------------
131 128
132 'userLoggedIn': function(aUser) { 129 'userLoggedIn': function(aUser) {
133//Clipperz.log(">>> LoginController.userLoggedIn"); 130//Clipperz.log(">>> LoginController.userLoggedIn");
134 MochiKit.Signal.signal(this, 'userLoggedIn', {user: aUser}); 131 MochiKit.Signal.signal(this, 'userLoggedIn', {user: aUser});
135//Clipperz.log("<<< LoginController.userLoggedIn"); 132//Clipperz.log("<<< LoginController.userLoggedIn");
136 }, 133 },
137 134
138 //========================================================================= 135 //=========================================================================
139 136
140 'handleCreateNewAccountClick': function (aComponent) { 137 'handleCreateNewAccountClick': function (aComponent) {
141 // return Clipperz.PM.DataModel.User.registerNewAccount("new", "user"); 138 // return Clipperz.PM.DataModel.User.registerNewAccount("new", "user");
142 return Clipperz.Async.callbacks("LoginController.handleCreateNewAccountClick", [ 139 return Clipperz.Async.callbacks("LoginController.handleCreateNewAccountClick", [
143 //' MochiKit.Base.method(this, 'newUserCreationComponent'), 140 //' MochiKit.Base.method(this, 'newUserCreationComponent'),
144 // MochiKit.Base.methodcaller('deferredShowModal', {openFromElement:aComponent}), 141 // MochiKit.Base.methodcaller('deferredShowModal', {openFromElement:aComponent}),
145 // MochiKit.Base.method(this.newUserWizardController(), 'run') 142 // MochiKit.Base.method(this.newUserWizardController(), 'run')
146 143
147 144
148 MochiKit.Base.method(this, 'newUserCreationComponent'), 145 MochiKit.Base.method(this, 'newUserCreationComponent'),
149 Clipperz.Async.forkAndJoin("Async.test succeedingForkedAndWaitDeferrer", [ 146 Clipperz.Async.forkAndJoin("Async.test succeedingForkedAndWaitDeferrer", [
150 MochiKit.Base.method(this.newUserCreationComponent(), 'deferredShowModal', {openFromElement:aComponent, duration:0.5}), 147 MochiKit.Base.method(this.newUserCreationComponent(), 'deferredShowModal', {openFromElement:aComponent, duration:0.5}),
151 MochiKit.Base.method(this.newUserWizardController(), 'run') 148 MochiKit.Base.method(this.newUserWizardController(), 'run')
152 ], {trace:false}), 149 ], {trace:false}),
153 // MochiKit.Base.method(this.newUserCreationComponent(), 'enableCredentialsField') 150 // MochiKit.Base.method(this.newUserCreationComponent(), 'enableCredentialsField')
154 ], {trace:false}); 151 ], {trace:false});
155 }, 152 },
156 153
157 //----------------------------------------------------------------------------- 154 //-----------------------------------------------------------------------------
158 155
159 'newUserWizardController': function () { 156 'newUserWizardController': function () {
160 if (this._newUserWizardController == null) { 157 if (this._newUserWizardController == null) {
161 this._newUserWizardController = new Clipperz.PM.UI.Web.Controllers.NewUserWizardController({ 158 this._newUserWizardController = new Clipperz.PM.UI.Web.Controllers.NewUserWizardController({
162 'newUserCreationComponent': this.newUserCreationComponent() 159 'newUserCreationComponent': this.newUserCreationComponent()
163 }) 160 })
164 161
165 // MochiKit.Signal.connect(this._newUserWizardController, 'exit',this, 'handleHideNewUserCreationComponent'); 162 // MochiKit.Signal.connect(this._newUserWizardController, 'exit',this, 'handleHideNewUserCreationComponent');
166 MochiKit.Signal.connect(this._newUserWizardController, 'done',this, 'handleCompleteNewUserCreationComponent'); 163 MochiKit.Signal.connect(this._newUserWizardController, 'done',this, 'handleCompleteNewUserCreationComponent');
167 } 164 }
168 165
169 return this._newUserWizardController; 166 return this._newUserWizardController;
170 }, 167 },
171 168
172 //------------------------------------------------------------------------- 169 //-------------------------------------------------------------------------
173 170
174 'newUserCreationComponent': function () { 171 'newUserCreationComponent': function () {
175 if (this._newUserCreationComponent == null) { 172 if (this._newUserCreationComponent == null) {
176 this._newUserCreationComponent = new Clipperz.PM.UI.Web.Components.NewUserCreationComponent(); 173 this._newUserCreationComponent = new Clipperz.PM.UI.Web.Components.NewUserCreationComponent();
177 } 174 }
178 175
179 return this._newUserCreationComponent; 176 return this._newUserCreationComponent;
180 }, 177 },
181 178
182 'clearNewUserCreationComponent': function () { 179 'clearNewUserCreationComponent': function () {
183 if (this._newUserCreationComponent != null) { 180 if (this._newUserCreationComponent != null) {
184 this._newUserCreationComponent.clear(); 181 this._newUserCreationComponent.clear();
185 } 182 }
186 this._newUserCreationComponent = null; 183 this._newUserCreationComponent = null;
187 }, 184 },
188 185
189 //------------------------------------------------------------------------- 186 //-------------------------------------------------------------------------
190 187
191 'handleHideNewUserCreationComponent': function () { 188 'handleHideNewUserCreationComponent': function () {
192 this.clearNewUserCreationComponent(); 189 this.clearNewUserCreationComponent();
193 }, 190 },
194 191
195 'handleCompleteNewUserCreationComponent': function (someParameters) { 192 'handleCompleteNewUserCreationComponent': function (someParameters) {
196 vardeferredResult; 193 vardeferredResult;
197 varuser; 194 varuser;
198 varnewUserCreationComponent; 195 varnewUserCreationComponent;
199 196
200 user = someParameters.user; 197 user = someParameters.user;
201 newUserCreationComponent = this.newUserCreationComponent(); 198 newUserCreationComponent = this.newUserCreationComponent();
202 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN',MochiKit.Base.method(newUserCreationComponent, 'deferredHideModal', {closeToElement:MochiKit.DOM.currentDocument().body})), 199 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN',MochiKit.Base.method(newUserCreationComponent, 'deferredHideModal', {closeToElement:MochiKit.DOM.currentDocument().body})),
203 200
204 deferredResult = new Clipperz.Async.Deferred("LoginController.handleCompleteNewUserCreationComponent", {trace:false}); 201 deferredResult = new Clipperz.Async.Deferred("LoginController.handleCompleteNewUserCreationComponent", {trace:false});
205 202
206 deferredResult.addCallbackList([ 203 deferredResult.addCallbackList([
207 MochiKit.Base.method(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'), 204 MochiKit.Base.method(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'),
208 MochiKit.Base.method(user, 'login'), 205 MochiKit.Base.method(user, 'login'),
209 MochiKit.Base.method(this, 'userLoggedIn', user), 206 MochiKit.Base.method(this, 'userLoggedIn', user),
210 MochiKit.Base.method(this, 'clearNewUserCreationComponent') 207 MochiKit.Base.method(this, 'clearNewUserCreationComponent')
211 ]); 208 ]);
212 deferredResult.addErrback(function (aValue) { Clipperz.log("WTF!! Error doing the login after creating a new user" + aValue)}); 209 deferredResult.addErrback(function (aValue) { Clipperz.log("WTF!! Error doing the login after creating a new user" + aValue)});
213 deferredResult.callback(); 210 deferredResult.callback();
214 211
215 return deferredResult; 212 return deferredResult;
216 }, 213 },
217 214
218 215
219 //========================================================================= 216 //=========================================================================
220 217
221 'handleFailedLogin': function(aLoginProgress, anError) { 218 'handleFailedLogin': function(aLoginProgress, anError) {
222 var result; 219 var result;
223 220
224//console.log("anError", anError); 221//console.log("anError", anError);
225 if (anError instanceof MochiKit.Async.CancelledError) { 222 if (anError instanceof MochiKit.Async.CancelledError) {
226 result = anError; 223 result = anError;
227 } else { 224 } else {
228 var deferredResult; 225 var deferredResult;
229 226
230MochiKit.Logging.logError("## MainController - FAILED LOGIN: " + anError); 227MochiKit.Logging.logError("## MainController - FAILED LOGIN: " + anError);
231 deferredResult = new MochiKit.Async.Deferred(); 228 deferredResult = new MochiKit.Async.Deferred();
232 229
233 aLoginProgress.showErrorMessage("failed login"); 230 aLoginProgress.showErrorMessage("failed login");
234 // Clipperz.NotificationCenter.register(loginProgress, 'cancelEvent', deferredResult, 'callback'); 231 // Clipperz.NotificationCenter.register(loginProgress, 'cancelEvent', deferredResult, 'callback');
235 MochiKit.Signal.connect(aLoginProgress, 'cancelEvent', deferredResult, 'callback'); 232 MochiKit.Signal.connect(aLoginProgress, 'cancelEvent', deferredResult, 'callback');
236 deferredResult.addCallback(MochiKit.Async.fail, anError) 233 deferredResult.addCallback(MochiKit.Async.fail, anError)
237 result = deferredResult; 234 result = deferredResult;
238 } 235 }
239 236
240 return result; 237 return result;
241 }, 238 },
242 239
243 'handleGenericError': function(anError) { 240 'handleGenericError': function(anError) {
244 var result; 241 var result;
245 242
246 if (anError instanceof MochiKit.Async.CancelledError) { 243 if (anError instanceof MochiKit.Async.CancelledError) {
247 result = anError; 244 result = anError;
248 } else { 245 } else {
249MochiKit.Logging.logError("## MainController - GENERIC ERROR" + "\n" + "==>> " + anError + " <<==\n" + anError.stack); 246MochiKit.Logging.logError("## MainController - GENERIC ERROR" + "\n" + "==>> " + anError + " <<==\n" + anError.stack);
250//console.log(anError); 247//console.log(anError);
251 result = new MochiKit.Async.CancelledError(anError); 248 result = new MochiKit.Async.CancelledError(anError);
252 } 249 }
253 250
254 return result; 251 return result;
255 }, 252 },
256 253
257 //----------------------------------------------------------------------------- 254 //-----------------------------------------------------------------------------
258 __syntaxFix__: "syntax fix" 255 __syntaxFix__: "syntax fix"
259}); 256});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/MainController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/MainController.js
index aa0d6ad..c83e3c0 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/MainController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/MainController.js
@@ -1,218 +1,215 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers');
30 27
31Clipperz.PM.UI.Web.Controllers.MainController = function(args) { 28Clipperz.PM.UI.Web.Controllers.MainController = function(args) {
32 this._args = args; 29 this._args = args;
33 30
34 //controllers 31 //controllers
35 this._loginController =null; 32 this._loginController =null;
36 this._appController =null; 33 this._appController =null;
37 34
38 //components 35 //components
39 this._headerComponent = null; 36 this._headerComponent = null;
40 this._pageComponent =null; 37 this._pageComponent =null;
41 this._footerComponent = null; 38 this._footerComponent = null;
42 39
43 this._passphraseDelegateLock = new MochiKit.Async.DeferredLock(); 40 this._passphraseDelegateLock = new MochiKit.Async.DeferredLock();
44 this._passphraseDelegateLock.acquire(); 41 this._passphraseDelegateLock.acquire();
45//Clipperz.log('MainController init _passphraseDelegateLock', this._passphraseDelegateLock); 42//Clipperz.log('MainController init _passphraseDelegateLock', this._passphraseDelegateLock);
46 this._passphraseDelegate = null; 43 this._passphraseDelegate = null;
47 44
48 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'remoteRequestSent', this, 'handleRemoteRequestSent'); 45 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'remoteRequestSent', this, 'handleRemoteRequestSent');
49 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'remoteRequestReceived',this, 'handleRemoteRequestReceived'); 46 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'remoteRequestReceived',this, 'handleRemoteRequestReceived');
50 47
51 return this; 48 return this;
52} 49}
53 50
54MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.MainController.prototype, { 51MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.MainController.prototype, {
55 52
56 'toString': function() { 53 'toString': function() {
57 return "Clipperz.PM.UI.Web.Controllers.MainController"; 54 return "Clipperz.PM.UI.Web.Controllers.MainController";
58 }, 55 },
59 56
60 'args': function () { 57 'args': function () {
61 return this._args; 58 return this._args;
62 }, 59 },
63 60
64 //----------------------------------------------------------------------------- 61 //-----------------------------------------------------------------------------
65 62
66 'headerComponent': function() { 63 'headerComponent': function() {
67 if (this._headerComponent == null) { 64 if (this._headerComponent == null) {
68 this._headerComponent = new Clipperz.PM.UI.Web.Components.PageHeader(); 65 this._headerComponent = new Clipperz.PM.UI.Web.Components.PageHeader();
69 } 66 }
70 67
71 return this._headerComponent; 68 return this._headerComponent;
72 }, 69 },
73 70
74 'footerComponent': function() { 71 'footerComponent': function() {
75 if (this._footerComponent == null) { 72 if (this._footerComponent == null) {
76 this._footerComponent = new Clipperz.PM.UI.Web.Components.PageFooter(); 73 this._footerComponent = new Clipperz.PM.UI.Web.Components.PageFooter();
77 } 74 }
78 75
79 return this._footerComponent; 76 return this._footerComponent;
80 }, 77 },
81 78
82 //----------------------------------------------------------------------------- 79 //-----------------------------------------------------------------------------
83 80
84 'pageComponent': function() { 81 'pageComponent': function() {
85 if (this._pageComponent == null) { 82 if (this._pageComponent == null) {
86 this._pageComponent = new Clipperz.PM.UI.Web.Components.Page({element:MochiKit.DOM.getElement('mainDiv')}); 83 this._pageComponent = new Clipperz.PM.UI.Web.Components.Page({element:MochiKit.DOM.getElement('mainDiv')});
87 } 84 }
88 85
89 return this._pageComponent; 86 return this._pageComponent;
90 }, 87 },
91 88
92 //----------------------------------------------------------------------------- 89 //-----------------------------------------------------------------------------
93 90
94 'loginController': function() { 91 'loginController': function() {
95 if (this._loginController == null) { 92 if (this._loginController == null) {
96 this._loginController = new Clipperz.PM.UI.Web.Controllers.LoginController(this.args()); 93 this._loginController = new Clipperz.PM.UI.Web.Controllers.LoginController(this.args());
97 94
98 MochiKit.Signal.connect(this._loginController, 'userLoggedIn', this, 'loginControllerUserLoggedInCallback'); 95 MochiKit.Signal.connect(this._loginController, 'userLoggedIn', this, 'loginControllerUserLoggedInCallback');
99 } 96 }
100 97
101 return this._loginController; 98 return this._loginController;
102 }, 99 },
103 100
104 'appController': function() { 101 'appController': function() {
105 if (this._appController == null) { 102 if (this._appController == null) {
106 this._appController = new Clipperz.PM.UI.Web.Controllers.AppController(); 103 this._appController = new Clipperz.PM.UI.Web.Controllers.AppController();
107 104
108 MochiKit.Signal.connect(this._appController, 'logout', this, 'handleLogout'); 105 MochiKit.Signal.connect(this._appController, 'logout', this, 'handleLogout');
109 } 106 }
110 107
111 return this._appController; 108 return this._appController;
112 }, 109 },
113 110
114 //----------------------------------------------------------------------------- 111 //-----------------------------------------------------------------------------
115 112
116 'run': function(shoudShowRegistrationForm) { 113 'run': function(shoudShowRegistrationForm) {
117 this.pageComponent().slotNamed('header').setContent(this.headerComponent()); 114 this.pageComponent().slotNamed('header').setContent(this.headerComponent());
118 this.pageComponent().slotNamed('footer').setContent(this.footerComponent()); 115 this.pageComponent().slotNamed('footer').setContent(this.footerComponent());
119 116
120 this.pageComponent().render(); 117 this.pageComponent().render();
121 118
122 this.loginController().run({slot:this.pageComponent().slotNamed('body')}); 119 this.loginController().run({slot:this.pageComponent().slotNamed('body')});
123 120
124 if (shoudShowRegistrationForm) { 121 if (shoudShowRegistrationForm) {
125 MochiKit.Signal.signal(this.loginController().loginPage(), 'createNewAccountClick'); 122 MochiKit.Signal.signal(this.loginController().loginPage(), 'createNewAccountClick');
126 // this.loginController().handleCreateNewAccountClick(); 123 // this.loginController().handleCreateNewAccountClick();
127 } 124 }
128 }, 125 },
129 126
130 //----------------------------------------------------------------------------- 127 //-----------------------------------------------------------------------------
131 128
132 'getPassphrase': function () { 129 'getPassphrase': function () {
133 var deferredResult; 130 var deferredResult;
134 131
135 deferredResult = new Clipperz.Async.Deferred("MainController.getPassphrase", {trace:false}); 132 deferredResult = new Clipperz.Async.Deferred("MainController.getPassphrase", {trace:false});
136 133
137 deferredResult.acquireLock(this._passphraseDelegateLock); 134 deferredResult.acquireLock(this._passphraseDelegateLock);
138 deferredResult.addMethod(this, 'invokePassphraseDelegate'); 135 deferredResult.addMethod(this, 'invokePassphraseDelegate');
139 deferredResult.releaseLock(this._passphraseDelegateLock); 136 deferredResult.releaseLock(this._passphraseDelegateLock);
140 deferredResult.callback(); 137 deferredResult.callback();
141 138
142 return deferredResult; 139 return deferredResult;
143 }, 140 },
144 141
145 //......................................................................... 142 //.........................................................................
146 143
147 'invokePassphraseDelegate': function () { 144 'invokePassphraseDelegate': function () {
148 return this._passphraseDelegate(); 145 return this._passphraseDelegate();
149 }, 146 },
150 147
151 'passphraseDelegateLock': function () { 148 'passphraseDelegateLock': function () {
152 return this._passphraseDelegateLock; 149 return this._passphraseDelegateLock;
153 }, 150 },
154 151
155 //......................................................................... 152 //.........................................................................
156 153
157 'setPassphraseDelegate': function (aDelegate) { 154 'setPassphraseDelegate': function (aDelegate) {
158 var shouldReleaseLock; 155 var shouldReleaseLock;
159 156
160 shouldReleaseLock = (this._passphraseDelegate == null); 157 shouldReleaseLock = (this._passphraseDelegate == null);
161 158
162 this._passphraseDelegate = aDelegate; 159 this._passphraseDelegate = aDelegate;
163 160
164 if (shouldReleaseLock) { 161 if (shouldReleaseLock) {
165 this._passphraseDelegateLock.release(); 162 this._passphraseDelegateLock.release();
166 } 163 }
167 }, 164 },
168 165
169 //......................................................................... 166 //.........................................................................
170 167
171 'removePassphraseDelegate': function (aDelegate) { 168 'removePassphraseDelegate': function (aDelegate) {
172 if (this._passphraseDelegate == aDelegate) { 169 if (this._passphraseDelegate == aDelegate) {
173 this._passphraseDelegate = null; 170 this._passphraseDelegate = null;
174 this._passphraseDelegateLock.acquire(); 171 this._passphraseDelegateLock.acquire();
175 } 172 }
176 }, 173 },
177 174
178 //------------------------------------------------------------------------- 175 //-------------------------------------------------------------------------
179 176
180 'loginControllerUserLoggedInCallback': function(anEvent) { 177 'loginControllerUserLoggedInCallback': function(anEvent) {
181//Clipperz.log(">>> loginControllerUserLoggedInCallback", anEvent); 178//Clipperz.log(">>> loginControllerUserLoggedInCallback", anEvent);
182 // this.setUser(anEvent.parameters()['user']); 179 // this.setUser(anEvent.parameters()['user']);
183//console.log("--- loginControllerUserLoggedInCallback - 1"); 180//console.log("--- loginControllerUserLoggedInCallback - 1");
184 181
185//console.log("--- loginControllerUserLoggedInCallback - 2"); 182//console.log("--- loginControllerUserLoggedInCallback - 2");
186 this.headerComponent().switchToLoggedMode(); 183 this.headerComponent().switchToLoggedMode();
187 this.appController().run({slot:this.pageComponent().slotNamed('body'), user:anEvent['user']}); 184 this.appController().run({slot:this.pageComponent().slotNamed('body'), user:anEvent['user']});
188//Clipperz.log("<<< loginControllerUserLoggedInCallback"); 185//Clipperz.log("<<< loginControllerUserLoggedInCallback");
189 }, 186 },
190 187
191 //----------------------------------------------------------------------------- 188 //-----------------------------------------------------------------------------
192 189
193 'handleRemoteRequestSent': function () { 190 'handleRemoteRequestSent': function () {
194//Clipperz.log("REMOTE REQUEST sent >>>"); 191//Clipperz.log("REMOTE REQUEST sent >>>");
195 }, 192 },
196 193
197 'handleRemoteRequestReceived': function () { 194 'handleRemoteRequestReceived': function () {
198//Clipperz.log("REMOTE REQUEST received <<<"); 195//Clipperz.log("REMOTE REQUEST received <<<");
199 }, 196 },
200 197
201 //----------------------------------------------------------------------------- 198 //-----------------------------------------------------------------------------
202 199
203 'handleLogout': function(anEvent) { 200 'handleLogout': function(anEvent) {
204 this.exit('logout.html'); 201 this.exit('logout.html');
205 }, 202 },
206 203
207 //----------------------------------------------------------------------------- 204 //-----------------------------------------------------------------------------
208 205
209 'exit': function(aPageName) { 206 'exit': function(aPageName) {
210//Clipperz.log("### exit " + aPageName); 207//Clipperz.log("### exit " + aPageName);
211 MochiKit.Async.wait(0).addCallback(function() { 208 MochiKit.Async.wait(0).addCallback(function() {
212 window.location.href = "./" + aPageName + "?ln=" + Clipperz.PM.Strings.selectedLanguage; 209 window.location.href = "./" + aPageName + "?ln=" + Clipperz.PM.Strings.selectedLanguage;
213 }); 210 });
214 }, 211 },
215 212
216 //----------------------------------------------------------------------------- 213 //-----------------------------------------------------------------------------
217 __syntaxFix__: "syntax fix" 214 __syntaxFix__: "syntax fix"
218}); 215});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/NewUserWizardController.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/NewUserWizardController.js
index 28d9d20..7db6888 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/NewUserWizardController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/NewUserWizardController.js
@@ -1,408 +1,405 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Controllers');
30 27
31Clipperz.PM.UI.Web.Controllers.NewUserWizardController = function(args) { 28Clipperz.PM.UI.Web.Controllers.NewUserWizardController = function(args) {
32 this._newUserCreationComponent = args.newUserCreationComponent|| Clipperz.Base.exception.raise('MandatoryParameter'); 29 this._newUserCreationComponent = args.newUserCreationComponent|| Clipperz.Base.exception.raise('MandatoryParameter');
33 30
34 MochiKit.Signal.connect(this._newUserCreationComponent, 'changedValue',this, 'handleChangedValue'); 31 MochiKit.Signal.connect(this._newUserCreationComponent, 'changedValue',this, 'handleChangedValue');
35 MochiKit.Signal.connect(this._newUserCreationComponent, 'moveForward',this, 'handleMoveForward'); 32 MochiKit.Signal.connect(this._newUserCreationComponent, 'moveForward',this, 'handleMoveForward');
36 MochiKit.Signal.connect(this._newUserCreationComponent, 'keyPressed',this, 'handleNewUserCreationComponentKeyPressed'); 33 MochiKit.Signal.connect(this._newUserCreationComponent, 'keyPressed',this, 'handleNewUserCreationComponentKeyPressed');
37 34
38 this._rulerComponent = null; 35 this._rulerComponent = null;
39 36
40 this._steps = null; 37 this._steps = null;
41 this._currentStepIndex = 0; 38 this._currentStepIndex = 0;
42 this._isNextEnabled = false; 39 this._isNextEnabled = false;
43 40
44 this._userCreationState = 'IDLE'; //'IN PROGRESS', 'DONE', 'FAILED' 41 this._userCreationState = 'IDLE'; //'IN PROGRESS', 'DONE', 'FAILED'
45 this._user = null; 42 this._user = null;
46 return this; 43 return this;
47} 44}
48 45
49MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.NewUserWizardController.prototype, { 46MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.NewUserWizardController.prototype, {
50 47
51 'toString': function() { 48 'toString': function() {
52 return "Clipperz.PM.UI.Web.Controllers.NewUserWizardController"; 49 return "Clipperz.PM.UI.Web.Controllers.NewUserWizardController";
53 }, 50 },
54 51
55 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
56 53
57 'newUserCreationComponent': function () { 54 'newUserCreationComponent': function () {
58 return this._newUserCreationComponent; 55 return this._newUserCreationComponent;
59 }, 56 },
60 57
61 //============================================================================= 58 //=============================================================================
62 59
63 'user': function () { 60 'user': function () {
64 return this._user; 61 return this._user;
65 }, 62 },
66 63
67 'setUser': function (aValue) { 64 'setUser': function (aValue) {
68 this._user = aValue; 65 this._user = aValue;
69 }, 66 },
70 67
71 //----------------------------------------------------------------------------- 68 //-----------------------------------------------------------------------------
72 69
73 'userCreationState': function () { 70 'userCreationState': function () {
74 return this._userCreationState; 71 return this._userCreationState;
75 }, 72 },
76 73
77 'setUserCreationState': function (aValue) { 74 'setUserCreationState': function (aValue) {
78//console.log("+++ NewUserWizardController.setUserCreationState", aValue); 75//console.log("+++ NewUserWizardController.setUserCreationState", aValue);
79 this._userCreationState = aValue; 76 this._userCreationState = aValue;
80 this.checkState(); 77 this.checkState();
81 }, 78 },
82 79
83 //============================================================================= 80 //=============================================================================
84 81
85 'resetCurrentStepIndex': function () { 82 'resetCurrentStepIndex': function () {
86 this._currentStepIndex = 0; 83 this._currentStepIndex = 0;
87 this.rulerComponent().resetStatus({animateTransition:true}); 84 this.rulerComponent().resetStatus({animateTransition:true});
88 }, 85 },
89 86
90 //----------------------------------------------------------------------------- 87 //-----------------------------------------------------------------------------
91 88
92 'enableNext': function (aValue) { 89 'enableNext': function (aValue) {
93 this.rulerComponent().enableNext(aValue); 90 this.rulerComponent().enableNext(aValue);
94 this._isNextEnabled = aValue; 91 this._isNextEnabled = aValue;
95 }, 92 },
96 93
97 'isNextEnabled': function () { 94 'isNextEnabled': function () {
98 return this._isNextEnabled; 95 return this._isNextEnabled;
99 }, 96 },
100 97
101 //----------------------------------------------------------------------------- 98 //-----------------------------------------------------------------------------
102 99
103 'enablePrevious': function (aValue) { 100 'enablePrevious': function (aValue) {
104 this.rulerComponent().enablePrevious(aValue); 101 this.rulerComponent().enablePrevious(aValue);
105 }, 102 },
106 103
107 //============================================================================= 104 //=============================================================================
108 105
109 'rulerComponent': function () { 106 'rulerComponent': function () {
110 if (this._rulerComponent == null) { 107 if (this._rulerComponent == null) {
111 this._rulerComponent = new Clipperz.PM.UI.Web.Components.RulerComponent({ 108 this._rulerComponent = new Clipperz.PM.UI.Web.Components.RulerComponent({
112 translationContext:'Wizards.NewUserWizard' 109 translationContext:'Wizards.NewUserWizard'
113 }); 110 });
114 this._rulerComponent.render(); 111 this._rulerComponent.render();
115 112
116 MochiKit.Signal.connect(this._rulerComponent, 'exit', this, 'handleExit'); 113 MochiKit.Signal.connect(this._rulerComponent, 'exit', this, 'handleExit');
117 MochiKit.Signal.connect(this._rulerComponent, 'done', this, 'done'); 114 MochiKit.Signal.connect(this._rulerComponent, 'done', this, 'done');
118 MochiKit.Signal.connect(this._rulerComponent, 'moveForward',this, 'handleMoveForward'); 115 MochiKit.Signal.connect(this._rulerComponent, 'moveForward',this, 'handleMoveForward');
119 MochiKit.Signal.connect(this._rulerComponent, 'moveBackward',this, 'handleMoveBackward'); 116 MochiKit.Signal.connect(this._rulerComponent, 'moveBackward',this, 'handleMoveBackward');
120 MochiKit.Signal.connect(this._rulerComponent, 'cursorMoved',this, 'handleCursorMoved'); 117 MochiKit.Signal.connect(this._rulerComponent, 'cursorMoved',this, 'handleCursorMoved');
121 } 118 }
122 119
123 return this._rulerComponent; 120 return this._rulerComponent;
124 }, 121 },
125 122
126 'resetRuler': function () { 123 'resetRuler': function () {
127 // if (this._rulerComponent != null) { 124 // if (this._rulerComponent != null) {
128 // this._rulerComponent.clear(); 125 // this._rulerComponent.clear();
129 // } 126 // }
130 // this._rulerComponent = null; 127 // this._rulerComponent = null;
131 }, 128 },
132 129
133 //----------------------------------------------------------------------------- 130 //-----------------------------------------------------------------------------
134 131
135 'showRuler': function (someSteps) { 132 'showRuler': function (someSteps) {
136 var rulerElement; 133 var rulerElement;
137 134
138 this.setSteps(someSteps); 135 this.setSteps(someSteps);
139 136
140 rulerElement = this.rulerComponent().element(); 137 rulerElement = this.rulerComponent().element();
141 this.newUserCreationComponent().disableAllPanels(); 138 this.newUserCreationComponent().disableAllPanels();
142 139
143 MochiKit.Style.showElement(rulerElement); 140 MochiKit.Style.showElement(rulerElement);
144 MochiKit.Style.setElementPosition(rulerElement, {x:-1000, y:this.newUserCreationComponent().bottomMargin()}); 141 MochiKit.Style.setElementPosition(rulerElement, {x:-1000, y:this.newUserCreationComponent().bottomMargin()});
145 new MochiKit.Visual.Move(rulerElement, { 142 new MochiKit.Visual.Move(rulerElement, {
146 x:0, y:this.newUserCreationComponent().bottomMargin(), 143 x:0, y:this.newUserCreationComponent().bottomMargin(),
147 mode:'absolute', 144 mode:'absolute',
148 duration:0.5, 145 duration:0.5,
149 // afterFinish:MochiKit.Base.method(this, 'handleCursorMoved') 146 // afterFinish:MochiKit.Base.method(this, 'handleCursorMoved')
150 afterFinish:MochiKit.Base.method(this, 'handleRulerShowed') 147 afterFinish:MochiKit.Base.method(this, 'handleRulerShowed')
151 }); 148 });
152 }, 149 },
153 150
154 //----------------------------------------------------------------------------- 151 //-----------------------------------------------------------------------------
155 152
156 'handleRulerShowed':function () { 153 'handleRulerShowed':function () {
157 return Clipperz.Async.callbacks("NewUserWizardController.handlerRulerShowed", [ 154 return Clipperz.Async.callbacks("NewUserWizardController.handlerRulerShowed", [
158 MochiKit.Base.method(this.newUserCreationComponent(), 'waitUntilFullyRendered'), 155 MochiKit.Base.method(this.newUserCreationComponent(), 'waitUntilFullyRendered'),
159 MochiKit.Base.method(this, 'handleCursorMoved') 156 MochiKit.Base.method(this, 'handleCursorMoved')
160 ], {trace:false}); 157 ], {trace:false});
161 }, 158 },
162 159
163 //----------------------------------------------------------------------------- 160 //-----------------------------------------------------------------------------
164 161
165 'hideRuler': function () { 162 'hideRuler': function () {
166 new MochiKit.Visual.Move(this.rulerComponent().element(), {x:-1000, mode:'relative', duration:0.5}); 163 new MochiKit.Visual.Move(this.rulerComponent().element(), {x:-1000, mode:'relative', duration:0.5});
167 }, 164 },
168 165
169 'doneWithRuler': function () { 166 'doneWithRuler': function () {
170 var rulerComponentElement; 167 var rulerComponentElement;
171 168
172 rulerComponentElement = this.rulerComponent().element(); 169 rulerComponentElement = this.rulerComponent().element();
173 new MochiKit.Visual.Move(this.rulerComponent().element(), { 170 new MochiKit.Visual.Move(this.rulerComponent().element(), {
174 x:1000, 171 x:1000,
175 mode:'relative', 172 mode:'relative',
176 duration:1, 173 duration:1,
177 // afterFinish:MochiKit.Base.partial(MochiKit.Style.hideElement, rulerComponentElement) 174 // afterFinish:MochiKit.Base.partial(MochiKit.Style.hideElement, rulerComponentElement)
178 afterFinish:function () { MochiKit.Style.hideElement(rulerComponentElement); } 175 afterFinish:function () { MochiKit.Style.hideElement(rulerComponentElement); }
179 }); 176 });
180 }, 177 },
181 178
182 //============================================================================= 179 //=============================================================================
183 180
184 'createNewUserRulerSteps': function () { 181 'createNewUserRulerSteps': function () {
185 return [ 'CREDENTIALS', 'CHECK_CREDENTIALS', 'TERMS_OF_SERVICE', 'CREATE_USER'/*, 'LOGIN' */]; 182 return [ 'CREDENTIALS', 'CHECK_CREDENTIALS', 'TERMS_OF_SERVICE', 'CREATE_USER'/*, 'LOGIN' */];
186 }, 183 },
187 184
188 //------------------------------------------------------------------------- 185 //-------------------------------------------------------------------------
189 186
190 'run': function () { 187 'run': function () {
191 return Clipperz.Async.callbacks("NewUserWizardController.run", [ 188 return Clipperz.Async.callbacks("NewUserWizardController.run", [
192 MochiKit.Base.method(this, 'createNewUserRulerSteps'), 189 MochiKit.Base.method(this, 'createNewUserRulerSteps'),
193 MochiKit.Base.method(this, 'showRuler') 190 MochiKit.Base.method(this, 'showRuler')
194 ], {trace:false}); 191 ], {trace:false});
195 }, 192 },
196 193
197 //----------------------------------------------------------------------------- 194 //-----------------------------------------------------------------------------
198 195
199 'checkState': function () { 196 'checkState': function () {
200 var enablePrevious; 197 var enablePrevious;
201 var enableNext; 198 var enableNext;
202 199
203 enablePrevious = true; 200 enablePrevious = true;
204 enableNext = false; 201 enableNext = false;
205 202
206 this.newUserCreationComponent().disableAllPanels(); 203 this.newUserCreationComponent().disableAllPanels();
207 204
208 switch(this.currentStep()) { 205 switch(this.currentStep()) {
209 case 'CREDENTIALS': 206 case 'CREDENTIALS':
210 this.newUserCreationComponent().enableCredentialsPanel(); 207 this.newUserCreationComponent().enableCredentialsPanel();
211 208
212 enableNext = ( 209 enableNext = (
213 (this.newUserCreationComponent().username() != '') 210 (this.newUserCreationComponent().username() != '')
214 && 211 &&
215 (this.newUserCreationComponent().passphrase() != '') 212 (this.newUserCreationComponent().passphrase() != '')
216 ); 213 );
217 // enablePrevious = false; 214 // enablePrevious = false;
218 break; 215 break;
219 case 'CHECK_CREDENTIALS': 216 case 'CHECK_CREDENTIALS':
220 this.newUserCreationComponent().enableCheckCredentialsPanel(); 217 this.newUserCreationComponent().enableCheckCredentialsPanel();
221 218
222 enableNext = (this.newUserCreationComponent().passphrase() == this.newUserCreationComponent().rePassphrase()); 219 enableNext = (this.newUserCreationComponent().passphrase() == this.newUserCreationComponent().rePassphrase());
223 // enablePrevious = true; 220 // enablePrevious = true;
224 break 221 break
225 case 'TERMS_OF_SERVICE': 222 case 'TERMS_OF_SERVICE':
226 this.newUserCreationComponent().enableTermsOfServicePanel(); 223 this.newUserCreationComponent().enableTermsOfServicePanel();
227 224
228//console.log("awareOfUnrecoverablePassphrase", this.newUserCreationComponent().awareOfUnrecoverablePassphrase()); 225//console.log("awareOfUnrecoverablePassphrase", this.newUserCreationComponent().awareOfUnrecoverablePassphrase());
229//console.log("readTermsOfService", this.newUserCreationComponent().readTermsOfService()); 226//console.log("readTermsOfService", this.newUserCreationComponent().readTermsOfService());
230 enableNext = ( 227 enableNext = (
231 (this.newUserCreationComponent().awareOfUnrecoverablePassphrase() == 'on') 228 (this.newUserCreationComponent().awareOfUnrecoverablePassphrase() == 'on')
232 && 229 &&
233 (this.newUserCreationComponent().readTermsOfService() == 'on') 230 (this.newUserCreationComponent().readTermsOfService() == 'on')
234 ) 231 )
235 break; 232 break;
236 case 'CREATE_USER': 233 case 'CREATE_USER':
237//console.log(">>> CREATE_USER", this.userCreationState()); 234//console.log(">>> CREATE_USER", this.userCreationState());
238 this.newUserCreationComponent().enableCreateUserPanel(); 235 this.newUserCreationComponent().enableCreateUserPanel();
239 236
240 switch (this.userCreationState()) { 237 switch (this.userCreationState()) {
241 case 'IDLE': 238 case 'IDLE':
242 this.setUserCreationState('IN PROGRESS'); 239 this.setUserCreationState('IN PROGRESS');
243 this.preformActualUserRegistration(); 240 this.preformActualUserRegistration();
244 241
245 enablePrevious = false; 242 enablePrevious = false;
246 enableNext = false; 243 enableNext = false;
247 break; 244 break;
248 case 'IN PROGRESS': 245 case 'IN PROGRESS':
249 enablePrevious = false; 246 enablePrevious = false;
250 enableNext = false; 247 enableNext = false;
251 break; 248 break;
252 case 'DONE': 249 case 'DONE':
253 enablePrevious = false; 250 enablePrevious = false;
254 enableNext = true; 251 enableNext = true;
255 break; 252 break;
256 case 'FAILED': 253 case 'FAILED':
257 enablePrevious = true; 254 enablePrevious = true;
258 enableNext = false; 255 enableNext = false;
259 break; 256 break;
260 }; 257 };
261 break; 258 break;
262 // case 'LOGIN': 259 // case 'LOGIN':
263 // this.newUserCreationComponent().enableLoginPanel(); 260 // this.newUserCreationComponent().enableLoginPanel();
264 // break; 261 // break;
265 } 262 }
266 263
267 if (this.currentStepIndex() > 0) { 264 if (this.currentStepIndex() > 0) {
268 this.enablePrevious(enablePrevious); 265 this.enablePrevious(enablePrevious);
269 } else { 266 } else {
270 this.enablePrevious(false); 267 this.enablePrevious(false);
271 } 268 }
272 this.enableNext(enableNext); 269 this.enableNext(enableNext);
273 }, 270 },
274 271
275 //----------------------------------------------------------------------------- 272 //-----------------------------------------------------------------------------
276 273
277 'setFocus': function () { 274 'setFocus': function () {
278 switch(this.currentStep()) { 275 switch(this.currentStep()) {
279 case 'CREDENTIALS': 276 case 'CREDENTIALS':
280 this.newUserCreationComponent().focusOnUsernameElement(); 277 this.newUserCreationComponent().focusOnUsernameElement();
281 break; 278 break;
282 case 'CHECK_CREDENTIALS': 279 case 'CHECK_CREDENTIALS':
283 this.newUserCreationComponent().focusOnRePassphraseElement(); 280 this.newUserCreationComponent().focusOnRePassphraseElement();
284 break 281 break
285 case 'TERMS_OF_SERVICE': 282 case 'TERMS_OF_SERVICE':
286 break; 283 break;
287 case 'CREATE_USER': 284 case 'CREATE_USER':
288 break; 285 break;
289 // case 'LOGIN': 286 // case 'LOGIN':
290 // break; 287 // break;
291 } 288 }
292 }, 289 },
293 290
294 //============================================================================= 291 //=============================================================================
295 292
296 'steps': function () { 293 'steps': function () {
297 return this._steps; 294 return this._steps;
298 }, 295 },
299 296
300 'setSteps': function (aValue) { 297 'setSteps': function (aValue) {
301 this._steps = aValue; 298 this._steps = aValue;
302 299
303 this.rulerComponent().setSteps(aValue); 300 this.rulerComponent().setSteps(aValue);
304 this.resetCurrentStepIndex(); 301 this.resetCurrentStepIndex();
305 }, 302 },
306 303
307 'currentStepIndex': function () { 304 'currentStepIndex': function () {
308 return this._currentStepIndex; 305 return this._currentStepIndex;
309 }, 306 },
310 307
311 'currentStep': function () { 308 'currentStep': function () {
312 return this.steps()[this.currentStepIndex()]; 309 return this.steps()[this.currentStepIndex()];
313 }, 310 },
314 311
315 //============================================================================= 312 //=============================================================================
316 313
317 'handleExit': function () { 314 'handleExit': function () {
318 return Clipperz.Async.callbacks("NewUserWizardController.handleExit", [ 315 return Clipperz.Async.callbacks("NewUserWizardController.handleExit", [
319 // MochiKit.Base.method(this.newUserCreationComponent(), 'resetContent'), 316 // MochiKit.Base.method(this.newUserCreationComponent(), 'resetContent'),
320 Clipperz.Async.forkAndJoin("NewUserWizardController.handleExit - fork and join", [ 317 Clipperz.Async.forkAndJoin("NewUserWizardController.handleExit - fork and join", [
321 MochiKit.Base.method(this, 'hideRuler'), 318 MochiKit.Base.method(this, 'hideRuler'),
322 MochiKit.Base.method(this.newUserCreationComponent(), 'deferredHideModal') 319 MochiKit.Base.method(this.newUserCreationComponent(), 'deferredHideModal')
323 ], {trace:false}), 320 ], {trace:false}),
324 MochiKit.Base.method(this, 'resetRuler'), 321 MochiKit.Base.method(this, 'resetRuler'),
325 // MochiKit.Base.method(this.newUserCreationComponent(), 'reset'), 322 // MochiKit.Base.method(this.newUserCreationComponent(), 'reset'),
326 MochiKit.Base.partial(MochiKit.Signal.signal, this, 'exit') 323 MochiKit.Base.partial(MochiKit.Signal.signal, this, 'exit')
327 ], {trace:false}) 324 ], {trace:false})
328 }, 325 },
329 326
330 'done': function () { 327 'done': function () {
331 this.doneWithRuler(); 328 this.doneWithRuler();
332 MochiKit.Signal.signal(this, 'done', {'user': this.user()}); 329 MochiKit.Signal.signal(this, 'done', {'user': this.user()});
333 }, 330 },
334 331
335 //============================================================================= 332 //=============================================================================
336 333
337 'handleMoveBackward': function () { 334 'handleMoveBackward': function () {
338 if (this._currentStepIndex > 0) { 335 if (this._currentStepIndex > 0) {
339 varafterMoveAction; 336 varafterMoveAction;
340 337
341 afterMoveAction = MochiKit.Base.noop; 338 afterMoveAction = MochiKit.Base.noop;
342 339
343//console.log("<-- backward", this.currentStep()); 340//console.log("<-- backward", this.currentStep());
344 switch(this.currentStep()) { 341 switch(this.currentStep()) {
345 case 'CREDENTIALS': 342 case 'CREDENTIALS':
346 case 'CHECK_CREDENTIALS': 343 case 'CHECK_CREDENTIALS':
347 case 'TERMS_OF_SERVICE': 344 case 'TERMS_OF_SERVICE':
348 this._currentStepIndex --; 345 this._currentStepIndex --;
349 this.rulerComponent().moveBackward(afterMoveAction); 346 this.rulerComponent().moveBackward(afterMoveAction);
350 break; 347 break;
351 case 'CREATE_USER': 348 case 'CREATE_USER':
352 this.setUser(null); 349 this.setUser(null);
353 this.newUserCreationComponent().hideAllProgeressStates(); 350 this.newUserCreationComponent().hideAllProgeressStates();
354 this.resetCurrentStepIndex(); 351 this.resetCurrentStepIndex();
355 this.setUserCreationState('IDLE'); 352 this.setUserCreationState('IDLE');
356 break; 353 break;
357 // case 'LOGIN': 354 // case 'LOGIN':
358 // break; 355 // break;
359 }; 356 };
360 357
361 } 358 }
362 359
363 if (this._currentStepIndex == 0) { 360 if (this._currentStepIndex == 0) {
364 this.enablePrevious(false); 361 this.enablePrevious(false);
365 } 362 }
366 }, 363 },
367 364
368 'handleMoveForward': function () { 365 'handleMoveForward': function () {
369 if (this.isNextEnabled()) { 366 if (this.isNextEnabled()) {
370 varafterMoveAction; 367 varafterMoveAction;
371 368
372 this._currentStepIndex ++; 369 this._currentStepIndex ++;
373 afterMoveAction = MochiKit.Base.noop; 370 afterMoveAction = MochiKit.Base.noop;
374 371
375 switch(this.currentStep()) { 372 switch(this.currentStep()) {
376 case 'CREDENTIALS': 373 case 'CREDENTIALS':
377 break; 374 break;
378 case 'CHECK_CREDENTIALS': 375 case 'CHECK_CREDENTIALS':
379 break 376 break
380 case 'TERMS_OF_SERVICE': 377 case 'TERMS_OF_SERVICE':
381 break; 378 break;
382 case 'CREATE_USER': 379 case 'CREATE_USER':
383 break; 380 break;
384 // case 'LOGIN': 381 // case 'LOGIN':
385 // break; 382 // break;
386 }; 383 };
387 384
388 this.rulerComponent().moveForward(afterMoveAction); 385 this.rulerComponent().moveForward(afterMoveAction);
389 }; 386 };
390 }, 387 },
391 388
392 'handleCursorMoved': function () { 389 'handleCursorMoved': function () {
393 // this.checkState(); 390 // this.checkState();
394 // this.setFocus(); 391 // this.setFocus();
395 392
396 return Clipperz.Async.callbacks("NewUserWizardController.handleCursorMoved", [ 393 return Clipperz.Async.callbacks("NewUserWizardController.handleCursorMoved", [
397 MochiKit.Base.method(this.newUserCreationComponent(), 'waitUntilFullyRendered'), 394 MochiKit.Base.method(this.newUserCreationComponent(), 'waitUntilFullyRendered'),
398 MochiKit.Base.method(this, 'checkState'), 395 MochiKit.Base.method(this, 'checkState'),
399 MochiKit.Base.method(this, 'setFocus') 396 MochiKit.Base.method(this, 'setFocus')
400 ], {trace:false}); 397 ], {trace:false});
401 }, 398 },
402 399
403 //------------------------------------------------------------------------- 400 //-------------------------------------------------------------------------
404 401
405 'handleChangedValue': function (anEvent) { 402 'handleChangedValue': function (anEvent) {
406 this.checkState(); 403 this.checkState();
407 }, 404 },
408 405
diff --git a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardDetail.js b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardDetail.js
index 23fd236..5380aa1 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardDetail.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardDetail.js
@@ -1,166 +1,163 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.iPhone.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.iPhone.Components');
30 27
31Clipperz.PM.UI.iPhone.Components.CardDetail = function(args) { 28Clipperz.PM.UI.iPhone.Components.CardDetail = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.iPhone.Components.CardDetail.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.iPhone.Components.CardDetail.superclass.constructor.apply(this, arguments);
35 32
36 this._cardReference = null; 33 this._cardReference = null;
37 34
38 return this; 35 return this;
39} 36}
40 37
41//============================================================================= 38//=============================================================================
42 39
43Clipperz.Base.extend(Clipperz.PM.UI.iPhone.Components.CardDetail, Clipperz.PM.UI.Common.Components.BaseComponent, { 40Clipperz.Base.extend(Clipperz.PM.UI.iPhone.Components.CardDetail, Clipperz.PM.UI.Common.Components.BaseComponent, {
44 41
45 //------------------------------------------------------------------------- 42 //-------------------------------------------------------------------------
46 43
47 'toString': function () { 44 'toString': function () {
48 return "Clipperz.PM.UI.iPhone.Components.CardDetail component"; 45 return "Clipperz.PM.UI.iPhone.Components.CardDetail component";
49 }, 46 },
50 47
51 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
52 49
53 'cardReference': function () { 50 'cardReference': function () {
54 return this._cardReference; 51 return this._cardReference;
55 }, 52 },
56 53
57 'setCardReference': function (aValue) { 54 'setCardReference': function (aValue) {
58 this._cardReference = aValue; 55 this._cardReference = aValue;
59 }, 56 },
60 57
61 //------------------------------------------------------------------------- 58 //-------------------------------------------------------------------------
62 59
63 'renderSelf': function(/*aContainer, aPosition*/) { 60 'renderSelf': function(/*aContainer, aPosition*/) {
64 this.append(this.element(), [ 61 this.append(this.element(), [
65 {tag:'div', cls:'cardDetail', id:this.getId('cardDetail'), children:[ 62 {tag:'div', cls:'cardDetail', id:this.getId('cardDetail'), children:[
66 {tag:'div', id:this.getId('progressBar')} //, 63 {tag:'div', id:this.getId('progressBar')} //,
67 // {tag:'h1', cls:'loading', html:"loading"} 64 // {tag:'h1', cls:'loading', html:"loading"}
68 ]} 65 ]}
69 ]); 66 ]);
70 67
71 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); 68 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')}));
72 MochiKit.Signal.signal(Clipperz.PM.UI.Common.Controllers.ProgressBarController.defaultController, 'updateProgress', 0); 69 MochiKit.Signal.signal(Clipperz.PM.UI.Common.Controllers.ProgressBarController.defaultController, 'updateProgress', 0);
73 }, 70 },
74 71
75 //========================================================================= 72 //=========================================================================
76 73
77 'showCardDetails': function (someData) { 74 'showCardDetails': function (someData) {
78 this.element().innerHTML = ''; 75 this.element().innerHTML = '';
79 this.append(this.element(), [ 76 this.append(this.element(), [
80 {tag:'fieldset', id:this.getId('fields'), children:MochiKit.Base.map(function (aFieldData) { 77 {tag:'fieldset', id:this.getId('fields'), children:MochiKit.Base.map(function (aFieldData) {
81 return {tag:'div', cls:'row', children:[ 78 return {tag:'div', cls:'row', children:[
82 {tag:'label', html:aFieldData['label']}, 79 {tag:'label', html:aFieldData['label']},
83 // {tag:'span', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), html:aFieldData['value']} 80 // {tag:'span', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), html:aFieldData['value']}
84 {tag:'div', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), children:[ 81 {tag:'div', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), children:[
85 {tag:'div', children:[{tag:'p', html:aFieldData['value']}]} 82 {tag:'div', children:[{tag:'p', html:aFieldData['value']}]}
86 ]} 83 ]}
87 // {tag:'input', type:'text', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), value:aFieldData['value'], disabled:true} 84 // {tag:'input', type:'text', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), value:aFieldData['value'], disabled:true}
88 85
89 ]} 86 ]}
90 }, someData['fields'])} 87 }, someData['fields'])}
91 ]); 88 ]);
92 89
93 MochiKit.Iter.forEach(MochiKit.Selector.findChildElements(this.element(), ['span.password']), MochiKit.Base.bind(function (aPasswordElement) { 90 MochiKit.Iter.forEach(MochiKit.Selector.findChildElements(this.element(), ['span.password']), MochiKit.Base.bind(function (aPasswordElement) {
94 MochiKit.Signal.connect(aPasswordElement, 'onclick', function (anEvent) { alert(MochiKit.DOM.scrapeText(anEvent.src())); }) 91 MochiKit.Signal.connect(aPasswordElement, 'onclick', function (anEvent) { alert(MochiKit.DOM.scrapeText(anEvent.src())); })
95 }, this)); 92 }, this));
96 93
97 if (someData['directLogins'].length > 0) { 94 if (someData['directLogins'].length > 0) {
98 this.append(this.element(), [ 95 this.append(this.element(), [
99 {tag:'h2', html:"Direct logins"}, 96 {tag:'h2', html:"Direct logins"},
100 {tag:'fieldset', id:this.getId('directLogins'), children:MochiKit.Base.map(function (aDirectLoginData) { 97 {tag:'fieldset', id:this.getId('directLogins'), children:MochiKit.Base.map(function (aDirectLoginData) {
101 return {tag:'div', cls:'row', id:('directLogin_' + aDirectLoginData['_reference']), children:[ 98 return {tag:'div', cls:'row', id:('directLogin_' + aDirectLoginData['_reference']), children:[
102 {tag:'img', cls:'favicon', src:aDirectLoginData['favicon']}, 99 {tag:'img', cls:'favicon', src:aDirectLoginData['favicon']},
103 // {tag:'input', cls:'directLogin', disabled:'disabled', type:'text', name:aDirectLoginData['label'], value:aDirectLoginData['label']} 100 // {tag:'input', cls:'directLogin', disabled:'disabled', type:'text', name:aDirectLoginData['label'], value:aDirectLoginData['label']}
104 {tag:'span', cls:'directLogin', html:aDirectLoginData['label']} 101 {tag:'span', cls:'directLogin', html:aDirectLoginData['label']}
105 ]} 102 ]}
106 }, someData['directLogins'])} 103 }, someData['directLogins'])}
107 ]); 104 ]);
108 105
109 MochiKit.Base.map(MochiKit.Base.bind(function (aRowNode) { 106 MochiKit.Base.map(MochiKit.Base.bind(function (aRowNode) {
110 MochiKit.Signal.connect(aRowNode, 'onclick', this, 'directLoginClickHandler'); 107 MochiKit.Signal.connect(aRowNode, 'onclick', this, 'directLoginClickHandler');
111 }, this), 108 }, this),
112 MochiKit.Selector.findChildElements(this.getElement('directLogins'), ['div.row']) 109 MochiKit.Selector.findChildElements(this.getElement('directLogins'), ['div.row'])
113 ) 110 )
114 }; 111 };
115 112
116 if (someData['notes'] != '') { 113 if (someData['notes'] != '') {
117 this.append(this.element(), [ 114 this.append(this.element(), [
118 {tag:'h2', html:"Notes"}, 115 {tag:'h2', html:"Notes"},
119 {tag:'fieldset', id:this.getId('fieldset'), children:[ 116 {tag:'fieldset', id:this.getId('fieldset'), children:[
120 {tag:'div', cls:'row notes', children:[ 117 {tag:'div', cls:'row notes', children:[
121 {tag:'span', html:someData['notes']} 118 {tag:'span', html:someData['notes']}
122 ]} 119 ]}
123 ]} 120 ]}
124 ]); 121 ]);
125 }; 122 };
126 123
127 return true; 124 return true;
128 }, 125 },
129 126
130 //------------------------------------------------------------------------- 127 //-------------------------------------------------------------------------
131/* 128/*
132 'toggleClickHandler': function (anEvent) { 129 'toggleClickHandler': function (anEvent) {
133 varnextState; 130 varnextState;
134 varfieldValue; 131 varfieldValue;
135 132
136//console.log("TOGGLE"); 133//console.log("TOGGLE");
137 anEvent.preventDefault; 134 anEvent.preventDefault;
138 fieldValue = MochiKit.Selector.findChildElements(anEvent.src().parentNode.parentNode, ['span.password'])[0]; 135 fieldValue = MochiKit.Selector.findChildElements(anEvent.src().parentNode.parentNode, ['span.password'])[0];
139 136
140 nextState = (MochiKit.DOM.getNodeAttribute(anEvent.src(), 'toggled') != 'true'); 137 nextState = (MochiKit.DOM.getNodeAttribute(anEvent.src(), 'toggled') != 'true');
141 if (nextState) { 138 if (nextState) {
142 MochiKit.DOM.removeElementClass(fieldValue, 'clear'); 139 MochiKit.DOM.removeElementClass(fieldValue, 'clear');
143 } else { 140 } else {
144 MochiKit.DOM.addElementClass(fieldValue, 'clear'); 141 MochiKit.DOM.addElementClass(fieldValue, 'clear');
145 } 142 }
146 143
147 MochiKit.DOM.setNodeAttribute(anEvent.src(), 'toggled', nextState); 144 MochiKit.DOM.setNodeAttribute(anEvent.src(), 'toggled', nextState);
148 }, 145 },
149*/ 146*/
150 //========================================================================= 147 //=========================================================================
151 148
152 'directLoginClickHandler': function (anEvent) { 149 'directLoginClickHandler': function (anEvent) {
153 anEvent.preventDefault(); 150 anEvent.preventDefault();
154 151
155 if (/(directLogin_)/.test(anEvent.src().id)) { 152 if (/(directLogin_)/.test(anEvent.src().id)) {
156 var directLoginReference; 153 var directLoginReference;
157 154
158 directLoginReference = anEvent.src().id.match(/(directLogin_)(.*)/)[2]; 155 directLoginReference = anEvent.src().id.match(/(directLogin_)(.*)/)[2];
159 MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectedDirectLogin', {cardReference:this.cardReference(), directLoginReference:directLoginReference}); 156 MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectedDirectLogin', {cardReference:this.cardReference(), directLoginReference:directLoginReference});
160 } 157 }
161 }, 158 },
162 159
163 //========================================================================= 160 //=========================================================================
164 161
165 __syntaxFix__: "syntax fix" 162 __syntaxFix__: "syntax fix"
166}); 163});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardList.js b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardList.js
index 770f983..c3f2701 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardList.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/CardList.js
@@ -1,204 +1,201 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.iPhone.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.iPhone.Components');
30 27
31Clipperz.PM.UI.iPhone.Components.CardList = function(args) { 28Clipperz.PM.UI.iPhone.Components.CardList = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.iPhone.Components.CardList.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.iPhone.Components.CardList.superclass.constructor.apply(this, arguments);
35 32
36 this._cardDetail = null; 33 this._cardDetail = null;
37 34
38 return this; 35 return this;
39} 36}
40 37
41//============================================================================= 38//=============================================================================
42 39
43Clipperz.Base.extend(Clipperz.PM.UI.iPhone.Components.CardList, Clipperz.PM.UI.Common.Components.BaseComponent, { 40Clipperz.Base.extend(Clipperz.PM.UI.iPhone.Components.CardList, Clipperz.PM.UI.Common.Components.BaseComponent, {
44 41
45 //------------------------------------------------------------------------- 42 //-------------------------------------------------------------------------
46 43
47 'toString': function () { 44 'toString': function () {
48 return "Clipperz.PM.UI.iPhone.Components.CardList component"; 45 return "Clipperz.PM.UI.iPhone.Components.CardList component";
49 }, 46 },
50 47
51 //------------------------------------------------------------------------- 48 //-------------------------------------------------------------------------
52 49
53 'renderSelf': function(/*aContainer, aPosition*/) { 50 'renderSelf': function(/*aContainer, aPosition*/) {
54 this.append(this.element(), [ 51 this.append(this.element(), [
55 {tag:'div', cls:'toolbar', id:'toolbar', children:[ 52 {tag:'div', cls:'toolbar', id:'toolbar', children:[
56 {tag:'h1', id:'pageTitle', html:"cards"}, 53 {tag:'h1', id:'pageTitle', html:"cards"},
57 {tag:'a', id:'backButton', cls:'button', href:'#', html:"cards"} 54 {tag:'a', id:'backButton', cls:'button', href:'#', html:"cards"}
58 ]}, 55 ]},
59 {tag:'div', cls:'cardList', id:this.getId('cardList'), children:[ 56 {tag:'div', cls:'cardList', id:this.getId('cardList'), children:[
60 {tag:'form', title:'search', cls:'panel cardListSearchForm', id:this.getId('cardListSearchForm'), children:[ 57 {tag:'form', title:'search', cls:'panel cardListSearchForm', id:this.getId('cardListSearchForm'), children:[
61 {tag:'input', type:'search', name:'search', value:"", placeholder:"search", id:this.getId('searchField')} 58 {tag:'input', type:'search', name:'search', value:"", placeholder:"search", id:this.getId('searchField')}
62 ]}, 59 ]},
63 {tag:'ul', cls:'panel cardListPanel', id:this.getId('cardListPanel'), children:[]} 60 {tag:'ul', cls:'panel cardListPanel', id:this.getId('cardListPanel'), children:[]}
64 ]}, 61 ]},
65 {tag:'div', cls:'panel cardDetailPanel', id:this.getId('cardDetail')} 62 {tag:'div', cls:'panel cardDetailPanel', id:this.getId('cardDetail')}
66 ]); 63 ]);
67 64
68 MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onsubmit', this,'searchHandler'); 65 MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onsubmit', this,'searchHandler');
69 MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeydown', this,'searchHandler'); 66 MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeydown', this,'searchHandler');
70 MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeyup', this,'searchHandler'); 67 MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeyup', this,'searchHandler');
71 68
72 MochiKit.Signal.connect(this.getElement('cardListPanel'), 'onclick', this,'cardListClickHandler'); 69 MochiKit.Signal.connect(this.getElement('cardListPanel'), 'onclick', this,'cardListClickHandler');
73 MochiKit.Signal.connect('backButton', 'onclick', this,'backButtonClickHandler'); 70 MochiKit.Signal.connect('backButton', 'onclick', this,'backButtonClickHandler');
74 71
75 MochiKit.Style.hideElement('backButton'); 72 MochiKit.Style.hideElement('backButton');
76 MochiKit.Style.hideElement(this.getElement('cardDetail')); 73 MochiKit.Style.hideElement(this.getElement('cardDetail'));
77 }, 74 },
78 75
79 //------------------------------------------------------------------------- 76 //-------------------------------------------------------------------------
80 77
81 'searchHandler': function (anEvent) { 78 'searchHandler': function (anEvent) {
82 if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ENTER')) { //RETURN 79 if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ENTER')) { //RETURN
83 anEvent.preventDefault(); 80 anEvent.preventDefault();
84 } else { 81 } else {
85 if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ESCAPE')) { 82 if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ESCAPE')) {
86 anEvent.target().value = ""; 83 anEvent.target().value = "";
87 } 84 }
88 85
89 if (anEvent.type() == 'keyup') { 86 if (anEvent.type() == 'keyup') {
90 MochiKit.Signal.signal(this, 'searchEvent', anEvent.target().value); 87 MochiKit.Signal.signal(this, 'searchEvent', anEvent.target().value);
91 } 88 }
92 } 89 }
93 }, 90 },
94 91
95 //------------------------------------------------------------------------- 92 //-------------------------------------------------------------------------
96 93
97 'update': function (someObjects) { 94 'update': function (someObjects) {
98 varcardListPanel; 95 varcardListPanel;
99 var i,c; 96 var i,c;
100 97
101 cardListPanel = this.getElement('cardListPanel'); 98 cardListPanel = this.getElement('cardListPanel');
102 cardListPanel.innerHTML = ''; 99 cardListPanel.innerHTML = '';
103 100
104 c = someObjects.length; 101 c = someObjects.length;
105 102
106 for (i=0; i<c; i++) { 103 for (i=0; i<c; i++) {
107 this.append(cardListPanel, {tag:'li', cls:'cardListItem', id:('cardListItem_' + someObjects[i]['_reference']), children:[ 104 this.append(cardListPanel, {tag:'li', cls:'cardListItem', id:('cardListItem_' + someObjects[i]['_reference']), children:[
108 {tag:'img', src:(someObjects[i]['favicon'] ? someObjects[i]['favicon'] : 'data:application/octet-stream;charset=utf-8;base64,AAABAAEAFxcAAAEAGAD8BgAAFgAAACgAAAAXAAAALgAAAAEAGAAAAAAAAAAAABIXAAASFwAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////////9zAC////////////////////////////////////////////////////////////////////////////////////////////9pAG////////////////////////////////////////////////////////////////////////////////////////////9rAC////////////////////////////////////////////////////////////////////////////////////////////9yAHP////////////////////////IyMizs7O6urrq6ur////////////Ozs6zs7Ozs7Pq6ur///////////////////////8AAAD////////////////////V1dWXl5eXl5eXl5elpaX4+Pj////Ozs6Xl5eXl5eXl5eenp7///////////////////////8AAAD////////////////////Ozs6Xl5eXl5eXl5eXl5fBwcHq6uqenp6Xl5eXl5eXl5eXl5f///////////////////////8AAAD////////////////////j4+OXl5eXl5eXl5eXl5eXl5elpaWXl5eXl5eXl5eXl5ezs7P///////////////////////8AAAD////////////////////////IyMiXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eenp7x8fH////////////////////////////////////////////////////4+PilpaWXl5eXl5eXl5eXl5eXl5eXl5eXl5fOzs7////////////////////////////////////////////////////////q6uq6urqXl5eXl5eXl5eXl5eXl5eXl5eenp7V1dX4+Pj///////////////////////8AAAD////////////4+PjOzs6lpaWXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e6urrj4+P///////////////8AAAD////////////BwcGXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fx8fH///////////8AAAD///////////+zs7OXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fj4+P///////////8AAAD////////////IyMiXl5eXl5eXl5eXl5e6urqXl5eXl5eXl5eXl5esrKylpaWXl5eXl5eXl5eenp7x8fH///////////8AAAD////////////////Ozs7Ozs7V1dX4+Pj///+Xl5eXl5eXl5eXl5fOzs7////q6urOzs7Ozs7q6ur///////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD////////////////////////////////////IyMiXl5eXl5eenp7x8fH///////////////////////////////////8AAAD////////////////////////////////////////j4+Pj4+Px8fH///////////////////////////////////////8AAAD///////////////////////////////////////////////////////////////////////////////////////////8AAAD///////////////////////////////////////////////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo=')}, 105 {tag:'img', src:(someObjects[i]['favicon'] ? someObjects[i]['favicon'] : 'data:application/octet-stream;charset=utf-8;base64,AAABAAEAFxcAAAEAGAD8BgAAFgAAACgAAAAXAAAALgAAAAEAGAAAAAAAAAAAABIXAAASFwAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////////9zAC////////////////////////////////////////////////////////////////////////////////////////////9pAG////////////////////////////////////////////////////////////////////////////////////////////9rAC////////////////////////////////////////////////////////////////////////////////////////////9yAHP////////////////////////IyMizs7O6urrq6ur////////////Ozs6zs7Ozs7Pq6ur///////////////////////8AAAD////////////////////V1dWXl5eXl5eXl5elpaX4+Pj////Ozs6Xl5eXl5eXl5eenp7///////////////////////8AAAD////////////////////Ozs6Xl5eXl5eXl5eXl5fBwcHq6uqenp6Xl5eXl5eXl5eXl5f///////////////////////8AAAD////////////////////j4+OXl5eXl5eXl5eXl5eXl5elpaWXl5eXl5eXl5eXl5ezs7P///////////////////////8AAAD////////////////////////IyMiXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eenp7x8fH////////////////////////////////////////////////////4+PilpaWXl5eXl5eXl5eXl5eXl5eXl5eXl5fOzs7////////////////////////////////////////////////////////q6uq6urqXl5eXl5eXl5eXl5eXl5eXl5eenp7V1dX4+Pj///////////////////////8AAAD////////////4+PjOzs6lpaWXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e6urrj4+P///////////////8AAAD////////////BwcGXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fx8fH///////////8AAAD///////////+zs7OXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5fj4+P///////////8AAAD////////////IyMiXl5eXl5eXl5eXl5e6urqXl5eXl5eXl5eXl5esrKylpaWXl5eXl5eXl5eenp7x8fH///////////8AAAD////////////////Ozs7Ozs7V1dX4+Pj///+Xl5eXl5eXl5eXl5fOzs7////q6urOzs7Ozs7q6ur///////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD///////////////////////////////////+Xl5eXl5eXl5eXl5fOzs7///////////////////////////////////8AAAD////////////////////////////////////IyMiXl5eXl5eenp7x8fH///////////////////////////////////8AAAD////////////////////////////////////////j4+Pj4+Px8fH///////////////////////////////////////8AAAD///////////////////////////////////////////////////////////////////////////////////////////8AAAD///////////////////////////////////////////////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo=')},
109 {tag:'a', id:('cardListReference_' + someObjects[i]['_reference']), href:'#', html:someObjects[i]['label']} 106 {tag:'a', id:('cardListReference_' + someObjects[i]['_reference']), href:'#', html:someObjects[i]['label']}
110 ]}) 107 ]})
111 108
112 MochiKit.Signal.connect('cardListItem_' + someObjects[i]['_reference'], 'onclick', this, 'cardListClickHandler'); 109 MochiKit.Signal.connect('cardListItem_' + someObjects[i]['_reference'], 'onclick', this, 'cardListClickHandler');
113 } 110 }
114 111
115 }, 112 },
116 113
117 'cardListClickHandler': function (anEvent) { 114 'cardListClickHandler': function (anEvent) {
118 anEvent.preventDefault(); 115 anEvent.preventDefault();
119 116
120 if (/(cardListReference_|cardListItem_)/.test(anEvent.target().id)) { 117 if (/(cardListReference_|cardListItem_)/.test(anEvent.target().id)) {
121 var cardListReference; 118 var cardListReference;
122 119
123 cardListReference = anEvent.target().id.match(/(cardListReference_|cardListItem_)(.*)/)[2]; 120 cardListReference = anEvent.target().id.match(/(cardListReference_|cardListItem_)(.*)/)[2];
124//console.log("Showing detail for card named", cardListReference); 121//console.log("Showing detail for card named", cardListReference);
125 MochiKit.Signal.signal(this, 'selectedCard', cardListReference); 122 MochiKit.Signal.signal(this, 'selectedCard', cardListReference);
126 } 123 }
127 }, 124 },
128 125
129 //========================================================================= 126 //=========================================================================
130 127
131 'cardDetail': function (someData) { 128 'cardDetail': function (someData) {
132 if (this._cardDetail == null) { 129 if (this._cardDetail == null) {
133 this._cardDetail = new Clipperz.PM.UI.iPhone.Components.CardDetail({element:this.getElement('cardDetail')}); 130 this._cardDetail = new Clipperz.PM.UI.iPhone.Components.CardDetail({element:this.getElement('cardDetail')});
134 } 131 }
135 132
136 return this._cardDetail; 133 return this._cardDetail;
137 }, 134 },
138 135
139 //------------------------------------------------------------------------- 136 //-------------------------------------------------------------------------
140 137
141 'removeCardDetail': function () { 138 'removeCardDetail': function () {
142 if (this._cardDetail != null) { 139 if (this._cardDetail != null) {
143 this._cardDetail.remove(); 140 this._cardDetail.remove();
144 this._cardDetail = null; 141 this._cardDetail = null;
145 } 142 }
146 }, 143 },
147 144
148 //========================================================================= 145 //=========================================================================
149 146
150 'showCard': function (someData) { 147 'showCard': function (someData) {
151 vardeferredResult; 148 vardeferredResult;
152 varoffset; 149 varoffset;
153 150
154 offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480); 151 offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480);
155 this.cardDetail().render(); 152 this.cardDetail().render();
156 this.cardDetail().setCardReference(someData['_reference']); 153 this.cardDetail().setCardReference(someData['_reference']);
157 MochiKit.Style.setElementPosition(this.cardDetail().element(), {x:offset}); 154 MochiKit.Style.setElementPosition(this.cardDetail().element(), {x:offset});
158 new MochiKit.Visual.Sequence([ 155 new MochiKit.Visual.Sequence([
159 // new MochiKit.Visual.Move(this.cardDetail().element(), {x:offset, y:45, mode:'absolute', duration:0, sync:true}), 156 // new MochiKit.Visual.Move(this.cardDetail().element(), {x:offset, y:45, mode:'absolute', duration:0, sync:true}),
160 new MochiKit.Visual.Parallel([ 157 new MochiKit.Visual.Parallel([
161 new MochiKit.Visual.Move(this.getElement('cardList'), {x:-offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}), 158 new MochiKit.Visual.Move(this.getElement('cardList'), {x:-offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}),
162 new MochiKit.Visual.Move(this.getElement('cardDetail'), {x:0, y:45, mode:'absolute',transition:MochiKit.Visual.Transitions.linear, sync:true}), 159 new MochiKit.Visual.Move(this.getElement('cardDetail'), {x:0, y:45, mode:'absolute',transition:MochiKit.Visual.Transitions.linear, sync:true}),
163 // new MochiKit.Visual.ScrollTo('toolbar', {sync:true}), 160 // new MochiKit.Visual.ScrollTo('toolbar', {sync:true}),
164 MochiKit.Visual.appear ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true}) 161 MochiKit.Visual.appear ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true})
165 ], {duration:1, sync:true}), 162 ], {duration:1, sync:true}),
166 MochiKit.Visual.fade(this.getElement('cardList'), {duration:0, sync:true}) 163 MochiKit.Visual.fade(this.getElement('cardList'), {duration:0, sync:true})
167 ], {}) 164 ], {})
168 165
169 MochiKit.DOM.getElement('pageTitle').innerHTML = someData['title']; 166 MochiKit.DOM.getElement('pageTitle').innerHTML = someData['title'];
170 167
171 return true; 168 return true;
172 }, 169 },
173 170
174 //------------------------------------------------------------------------- 171 //-------------------------------------------------------------------------
175 172
176 'showCardDetails': function (someData) { 173 'showCardDetails': function (someData) {
177 return this.cardDetail().showCardDetails(someData); 174 return this.cardDetail().showCardDetails(someData);
178 }, 175 },
179 176
180 //========================================================================= 177 //=========================================================================
181 178
182 'backButtonClickHandler': function (anEvent) { 179 'backButtonClickHandler': function (anEvent) {
183 varoffset; 180 varoffset;
184 181
185 anEvent.preventDefault(); 182 anEvent.preventDefault();
186 183
187 MochiKit.DOM.getElement('pageTitle').innerHTML = "cards"; 184 MochiKit.DOM.getElement('pageTitle').innerHTML = "cards";
188 185
189 offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480); 186 offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480);
190 MochiKit.Style.setElementPosition(this.getElement('cardList'), {x:-offset}); 187 MochiKit.Style.setElementPosition(this.getElement('cardList'), {x:-offset});
191 MochiKit.DOM.showElement(this.getElement('cardList')); 188 MochiKit.DOM.showElement(this.getElement('cardList'));
192 189
193 new MochiKit.Visual.Parallel([ 190 new MochiKit.Visual.Parallel([
194 new MochiKit.Visual.Move(this.getElement('cardList'), {x:offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}), 191 new MochiKit.Visual.Move(this.getElement('cardList'), {x:offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}),
195 new MochiKit.Visual.Move(this.getElement('cardDetail'), {x:offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}), 192 new MochiKit.Visual.Move(this.getElement('cardDetail'), {x:offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}),
196 MochiKit.Visual.fade (this.getElement('cardDetail'), { transition:MochiKit.Visual.Transitions.linear, sync:true}), 193 MochiKit.Visual.fade (this.getElement('cardDetail'), { transition:MochiKit.Visual.Transitions.linear, sync:true}),
197 MochiKit.Visual.fade ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true}) 194 MochiKit.Visual.fade ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true})
198 ], {duration:1, afterFinish:MochiKit.Base.method(this, 'removeCardDetail')}) 195 ], {duration:1, afterFinish:MochiKit.Base.method(this, 'removeCardDetail')})
199 196
200 }, 197 },
201 198
202 //========================================================================= 199 //=========================================================================
203 __syntaxFix__: "syntax fix" 200 __syntaxFix__: "syntax fix"
204}); 201});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/LoginForm.js b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/LoginForm.js
index eec83b0..5341878 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/LoginForm.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Components/LoginForm.js
@@ -1,181 +1,178 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.iPhone.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.iPhone.Components');
30 27
31Clipperz.PM.UI.iPhone.Components.LoginForm = function(args) { 28Clipperz.PM.UI.iPhone.Components.LoginForm = function(args) {
32 args = args || {}; 29 args = args || {};
33 30
34 Clipperz.PM.UI.iPhone.Components.LoginForm.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.iPhone.Components.LoginForm.superclass.constructor.apply(this, arguments);
35 32
36 return this; 33 return this;
37} 34}
38 35
39//============================================================================= 36//=============================================================================
40 37
41Clipperz.Base.extend(Clipperz.PM.UI.iPhone.Components.LoginForm, Clipperz.PM.UI.Common.Components.BaseComponent, { 38Clipperz.Base.extend(Clipperz.PM.UI.iPhone.Components.LoginForm, Clipperz.PM.UI.Common.Components.BaseComponent, {
42 39
43 //------------------------------------------------------------------------- 40 //-------------------------------------------------------------------------
44 41
45 'toString': function () { 42 'toString': function () {
46 return "Clipperz.PM.UI.iPhone.Components.LoginForm component"; 43 return "Clipperz.PM.UI.iPhone.Components.LoginForm component";
47 }, 44 },
48 45
49 //------------------------------------------------------------------------- 46 //-------------------------------------------------------------------------
50 47
51 'focusOnUsername': function () { 48 'focusOnUsername': function () {
52 this.getElement('username').focus(); 49 this.getElement('username').focus();
53 }, 50 },
54 51
55 //------------------------------------------------------------------------- 52 //-------------------------------------------------------------------------
56 53
57 'username': function () { 54 'username': function () {
58 return this.getElement('username').value; 55 return this.getElement('username').value;
59 }, 56 },
60 57
61 'passphrase': function () { 58 'passphrase': function () {
62 return this.getElement('passphrase').value; 59 return this.getElement('passphrase').value;
63 }, 60 },
64 61
65 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
66 63
67 'renderSelf': function(/*aContainer, aPosition*/) { 64 'renderSelf': function(/*aContainer, aPosition*/) {
68 this.append(this.element(), [ 65 this.append(this.element(), [
69 {tag:'div', cls:'toolbar iPhoneClipperzToolbar', children:[ 66 {tag:'div', cls:'toolbar iPhoneClipperzToolbar', children:[
70 {tag:'h1', id:'pageTitle', html:'Clipperz'}, 67 {tag:'h1', id:'pageTitle', html:'Clipperz'},
71 {tag:'a', id:'backButton', cls:'button', href:'#', html:"back"} 68 {tag:'a', id:'backButton', cls:'button', href:'#', html:"back"}
72 ]}, 69 ]},
73 {tag:'form', title:'Theaters', cls:'panel toolbarlessPanel loginForm', id:this.getId('loginFormPanel'), children:[ 70 {tag:'form', title:'Theaters', cls:'panel toolbarlessPanel loginForm', id:this.getId('loginFormPanel'), children:[
74 {tag:'fieldset', id:this.getId('fieldset'), children:[ 71 {tag:'fieldset', id:this.getId('fieldset'), children:[
75 {tag:'div', cls:'row', children:[ 72 {tag:'div', cls:'row', children:[
76 {tag:'label', html:"username"}, 73 {tag:'label', html:"username"},
77 {tag:'input', type:'text', name:'username', value:"", autocorrect:'off', autocapitalize:'off', id:this.getId('username')} 74 {tag:'input', type:'text', name:'username', value:"", autocorrect:'off', autocapitalize:'off', id:this.getId('username')}
78 ]}, 75 ]},
79 {tag:'div', cls:'row', children:[ 76 {tag:'div', cls:'row', children:[
80 {tag:'label', html:"passphrase"}, 77 {tag:'label', html:"passphrase"},
81 {tag:'input', type:'password', name:'passphrase', value:"", id:this.getId('passphrase')} 78 {tag:'input', type:'password', name:'passphrase', value:"", id:this.getId('passphrase')}
82 ]} 79 ]}
83 ]}, 80 ]},
84 {tag:'a', cls:'whiteButton', type:'submit', href:'#', html:"Login", id:this.getId('submit')} 81 {tag:'a', cls:'whiteButton', type:'submit', href:'#', html:"Login", id:this.getId('submit')}
85 ]}, 82 ]},
86 {tag:'div', cls:'panel toolbarlessPanel loginProgressPanel', id:this.getId('loginProgressPanel'), children:[ 83 {tag:'div', cls:'panel toolbarlessPanel loginProgressPanel', id:this.getId('loginProgressPanel'), children:[
87 {tag:'div', id:this.getId('progressBar')} //, 84 {tag:'div', id:this.getId('progressBar')} //,
88 // {tag:'a', cls:'whiteButton', type:'submit', href:'#', html:"Cancel", id:this.getId('cancel')} 85 // {tag:'a', cls:'whiteButton', type:'submit', href:'#', html:"Cancel", id:this.getId('cancel')}
89 ]}, 86 ]},
90 {tag:'div', cls:'panel loginErrorPanel', id:this.getId('loginErrorPanel'), children:[ 87 {tag:'div', cls:'panel loginErrorPanel', id:this.getId('loginErrorPanel'), children:[
91 {tag:'div', cls:'errorMessage', id:this.getId('errorMessageBox'), children:[ 88 {tag:'div', cls:'errorMessage', id:this.getId('errorMessageBox'), children:[
92 {tag:'h2', id:this.getId('errorMessage'), html:"Login failed"} 89 {tag:'h2', id:this.getId('errorMessage'), html:"Login failed"}
93 ]} 90 ]}
94 ]} 91 ]}
95 ]); 92 ]);
96 93
97 MochiKit.Signal.connect(this.getElement('submit'), 'onclick',this, 'submitHandler'); 94 MochiKit.Signal.connect(this.getElement('submit'), 'onclick',this, 'submitHandler');
98 MochiKit.Signal.connect(this.getElement('loginFormPanel'), 'onsubmit',this, 'submitHandler'); 95 MochiKit.Signal.connect(this.getElement('loginFormPanel'), 'onsubmit',this, 'submitHandler');
99 96
100 // MochiKit.Signal.connect(this.getElement('cancel'), 'onclick',this, 'cancelHandler'); 97 // MochiKit.Signal.connect(this.getElement('cancel'), 'onclick',this, 'cancelHandler');
101 MochiKit.Signal.connect('backButton', 'onclick',this, 'backHandler'); 98 MochiKit.Signal.connect('backButton', 'onclick',this, 'backHandler');
102 99
103 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); 100 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')}));
104 101
105 // MochiKit.Style.hideElement(this.getElement('errorMessage')); 102 // MochiKit.Style.hideElement(this.getElement('errorMessage'));
106 103
107 this.showLoginForm(); 104 this.showLoginForm();
108 // MochiKit.Async.callLater(0.2, MochiKit.Base.method(this, 'focusOnUsername')); 105 // MochiKit.Async.callLater(0.2, MochiKit.Base.method(this, 'focusOnUsername'));
109 }, 106 },
110 107
111 //------------------------------------------------------------------------- 108 //-------------------------------------------------------------------------
112 109
113 'showLoginForm': function () { 110 'showLoginForm': function () {
114 MochiKit.Style.showElement(this.getElement('loginFormPanel')); 111 MochiKit.Style.showElement(this.getElement('loginFormPanel'));
115 MochiKit.Style.hideElement(this.getElement('loginProgressPanel')); 112 MochiKit.Style.hideElement(this.getElement('loginProgressPanel'));
116 MochiKit.Style.hideElement(this.getElement('loginErrorPanel')); 113 MochiKit.Style.hideElement(this.getElement('loginErrorPanel'));
117 MochiKit.Style.hideElement('backButton'); 114 MochiKit.Style.hideElement('backButton');
118 }, 115 },
119 116
120 'slideInLoginForm': function () { 117 'slideInLoginForm': function () {
121 varoffset; 118 varoffset;
122 119
123 offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480); 120 offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480);
124 121
125 MochiKit.Style.showElement(this.getElement('loginFormPanel')); 122 MochiKit.Style.showElement(this.getElement('loginFormPanel'));
126 MochiKit.Style.setElementPosition(this.getElement('loginFormPanel'), {x:-offset, y:0}); 123 MochiKit.Style.setElementPosition(this.getElement('loginFormPanel'), {x:-offset, y:0});
127 124
128 new MochiKit.Visual.Sequence([ 125 new MochiKit.Visual.Sequence([
129 new MochiKit.Visual.Parallel([ 126 new MochiKit.Visual.Parallel([
130 new MochiKit.Visual.Move(this.getElement('loginErrorPanel'), {x:offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}), 127 new MochiKit.Visual.Move(this.getElement('loginErrorPanel'), {x:offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}),
131 new MochiKit.Visual.Move(this.getElement('loginFormPanel'), {x:0, y:0, mode:'absolute',transition:MochiKit.Visual.Transitions.linear, sync:true}), 128 new MochiKit.Visual.Move(this.getElement('loginFormPanel'), {x:0, y:0, mode:'absolute',transition:MochiKit.Visual.Transitions.linear, sync:true}),
132 MochiKit.Visual.fade ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true}) 129 MochiKit.Visual.fade ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true})
133 ], {duration:0.5, sync:true}), 130 ], {duration:0.5, sync:true}),
134 MochiKit.Visual.fade(this.getElement('loginErrorPanel'), {duration:0, sync:true}) 131 MochiKit.Visual.fade(this.getElement('loginErrorPanel'), {duration:0, sync:true})
135 ], {}) 132 ], {})
136 }, 133 },
137 134
138 'showLoginProgress': function () { 135 'showLoginProgress': function () {
139 MochiKit.Style.hideElement(this.getElement('loginFormPanel')); 136 MochiKit.Style.hideElement(this.getElement('loginFormPanel'));
140 MochiKit.Style.showElement(this.getElement('loginProgressPanel')); 137 MochiKit.Style.showElement(this.getElement('loginProgressPanel'));
141 }, 138 },
142 139
143 'showLoginError': function (anError) { 140 'showLoginError': function (anError) {
144 this.getElement('errorMessage').innerHTML = "Login error"; 141 this.getElement('errorMessage').innerHTML = "Login error";
145 142
146 MochiKit.Style.showElement('backButton'); 143 MochiKit.Style.showElement('backButton');
147 MochiKit.Style.hideElement(this.getElement('loginProgressPanel')); 144 MochiKit.Style.hideElement(this.getElement('loginProgressPanel'));
148 MochiKit.Style.showElement(this.getElement('loginErrorPanel')); 145 MochiKit.Style.showElement(this.getElement('loginErrorPanel'));
149 MochiKit.Style.setElementPosition(this.getElement('loginErrorPanel'), {x:0, y:45}); 146 MochiKit.Style.setElementPosition(this.getElement('loginErrorPanel'), {x:0, y:45});
150 }, 147 },
151 148
152 //------------------------------------------------------------------------- 149 //-------------------------------------------------------------------------
153/* 150/*
154 'disableCancelButton': function () { 151 'disableCancelButton': function () {
155 MochiKit.DOM.hideElement(this.getElement('cancel')); 152 MochiKit.DOM.hideElement(this.getElement('cancel'));
156 }, 153 },
157*/ 154*/
158 //------------------------------------------------------------------------- 155 //-------------------------------------------------------------------------
159 156
160 'submitHandler': function (anEvent) { 157 'submitHandler': function (anEvent) {
161 anEvent.preventDefault(); 158 anEvent.preventDefault();
162 159
163 MochiKit.Signal.signal(this, 'doLogin', {'username':this.username(), 'passphrase':this.passphrase()}); 160 MochiKit.Signal.signal(this, 'doLogin', {'username':this.username(), 'passphrase':this.passphrase()});
164 }, 161 },
165 162
166 'cancelHandler': function (anEvent) { 163 'cancelHandler': function (anEvent) {
167 anEvent.preventDefault(); 164 anEvent.preventDefault();
168 165
169//console.log("CANCEL"); 166//console.log("CANCEL");
170 }, 167 },
171 168
172 'backHandler': function (anEvent) { 169 'backHandler': function (anEvent) {
173 anEvent.preventDefault(); 170 anEvent.preventDefault();
174 171
175 this.slideInLoginForm(); 172 this.slideInLoginForm();
176 }, 173 },
177 174
178 //------------------------------------------------------------------------- 175 //-------------------------------------------------------------------------
179 176
180 __syntaxFix__: "syntax fix" 177 __syntaxFix__: "syntax fix"
181}); 178});
diff --git a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Controllers/MainController.js b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Controllers/MainController.js
index b43d877..3fcaae1 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/iPhone/Controllers/MainController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/iPhone/Controllers/MainController.js
@@ -1,372 +1,369 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29Clipperz.Base.module('Clipperz.PM.UI.iPhone.Controllers'); 26Clipperz.Base.module('Clipperz.PM.UI.iPhone.Controllers');
30 27
31 //Some parts of this controller have been derived from the iUI library. 28 //Some parts of this controller have been derived from the iUI library.
32 29
33Clipperz.PM.UI.iPhone.Controllers.MainController = function() { 30Clipperz.PM.UI.iPhone.Controllers.MainController = function() {
34 this._loginForm = null; 31 this._loginForm = null;
35 this._cardList = null; 32 this._cardList = null;
36 this._cachedValues =null; 33 this._cachedValues =null;
37 this._user = null; 34 this._user = null;
38 35
39 if (typeof window.onorientationchange == 'object') { 36 if (typeof window.onorientationchange == 'object') {
40 MochiKit.Signal.connect(window, 'onorientationchange', this, 'orientationChangeHandler'); 37 MochiKit.Signal.connect(window, 'onorientationchange', this, 'orientationChangeHandler');
41 MochiKit.Async.callLater(0, MochiKit.Base.method(this, 'orientationChangeHandler')); 38 MochiKit.Async.callLater(0, MochiKit.Base.method(this, 'orientationChangeHandler'));
42 } else { 39 } else {
43 this.setOrientation('portrait'); 40 this.setOrientation('portrait');
44 // this.setOrientation('landscape'); 41 // this.setOrientation('landscape');
45 } 42 }
46 43
47 this.addMetaTag('viewport', 'width=devicewidth; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;'); 44 this.addMetaTag('viewport', 'width=devicewidth; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;');
48 this.addMetaTag('apple-mobile-web-app-capable', 'yes'); 45 this.addMetaTag('apple-mobile-web-app-capable', 'yes');
49 this.addMetaTag('apple-mobile-web-app-status-bar-style', 'black'); 46 this.addMetaTag('apple-mobile-web-app-status-bar-style', 'black');
50 47
51 this.addLinkTag('apple-touch-icon', 'data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABfCAYAAACOTBv1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAQC0lEQVR4nO2ce3wU1b3AvzOzz2TzBpKQhIS3CnLxgYoPqAgiQS8igiAqiFprtT571YpKUa9tvVgrVvhc7IXS4lUUvGgR5CWIoiAIYoQgJGDI+0k2yW42szNz7h8pGBHIPmazqeb7+UD4DHt+vzPfPTnnzJkzIwGCLqKCHO0K/JTpkh9FuuRHkS75UaRLfhTpkh9FuuRHkS75UaRLfhTpkh9FLNGuwKnIzc3l9WXLQAIhQILWvwQnjn3vUNtjkoQQ4kSZr77KY+TIkR1/EgHQKeWnp6eTkJiI0P2gqyeOnxD7T+ttxf/wp4SwOOnTp0/UzqM9OqV8oFXygSVIm3/xvePSKf59up/cWfO9z3c2OnmfH646qVMv2XZa+RKtrT8cWruoztv2O6384/15OLSODZ237Xda+W1nMKEiROe+U9Rp5ZtFJ+51Oq/8E/P7MOjE3oFOLL/1Iik8fUJoCF03pT6RoNPKF4Q/2zF0P0J0yQ8aM/pqoesIXQs/UITotPKFYRDuXMXQ/dDV8oNECIShgRGmOKFjGIY5dYoAnVK+QCB0DSNM+Ybmb/0SOylhy8/NzWXYsGFm1OU7hGhd0RThtdrW2Y758kdcdhGLX30h7Dhhr2ouWrSI9PQ0ykrLeHn+fBYsWIDX6w0zqsAwNOQwW77QtbBnTMdJSkzgkfvuZPqkXOJi7SAMLhl2Htt37gk5ZlgtPycnh7TU7oiGo6TH6zz/3DPUVpXz3qp3+Lch54YeWLR2OyLcbkcPf9wY/bNL2fjuMg7uWM09t11PnE1FaSwADB65746wYofV8ufMeQph6MhfvoT09atIWWORBt7GNaOv5urRWyktLeWll//MXxb/FZ/PF3BcgcDQVeRwux1DQxjBz1m7JSfx2IM/Z/J1Y3A5LUiShFK3G3vpWuwVW9Bjs6i/eCGXnjcgrPqF1fJzrxkLuopUuAJJGMhH12LZMA3LG2ej7JxDZmwT//W7uVSVFPDW/y5l4ID+gQUWAmHo4V8g6VrAA64kSYwfM5It//g7+z9Zye2TxxJPDY7CpSRsnUrCzgdwlH2AZPiwNB5CajyMYqjkjhkRcvVCbvnnnzeUBJcDUbIFyVv+/RNprsKSNx/y5mP0uAS53zSuvWoc48duoqi4lD++vIC/vb4cVVVPHVyA0P1hLw0Yhh/EmU8xtXsyv3noHiaMu5xYmwXJ8GMr34ijfB3Wut2nvR3jKN9EU850fnXHNNZs2BpS/UKW/+QTj4GhIxe+fcbPyVXbsVVtR1ifRMueQE7fKbz0u6f5/dzfsGb9JuY8+wJHiopPKmXObAdDwzhFtyPLMhPGjeKRe2cyIDsVCYHiPoCjcB32qi3Imqfd0PaqrTRmTWFw31QURUbXg69ryPKvuOxihN+LXLQ6oM9L/kasBcuwFixDTzwbS+8buf6q8UwYu4bDR8t4cf5/8+bK99C01hmKOfP87/f5PdO6M/vhX3DdmOHYLTKyWo/92zdxlm/A4j0aVGyLrxzFfQDD1ZdpE8exbMX7QdcvJPmjR/2MWJuCVLIBSXUHXV6pz0fZ8yz2vS+gZYymX/ZEXvnDbOY99yjvrd1CwZFiU65wDd0PhsTUieN44O7p9E5PQhI6trrPcJavx1a7E4nQf7uc1Z/gj8nmjptCk39860tQrFu9ksuGDcX+6f1YioNPeir0mEzUrOtQs65FtyYhSWA7uorYr0O/mKm5/C0MJRYhDBRPEc6KjTirNiP7g28wp6yzNZHywfMQsoUBo+7C1+IPqnxILf+ioYMRaj1K2aZQip8SxVuC85uFOA4uwt/9EloyxkOYSwNSyzEcdRtxVm7C2lRoUk2/Q/HXY2vYj881kLumX88ri888/p1M0PKnTr4BRfKjHN2ApAc+dw8USejYqrZhq9qGkJSwYiXv+iVShFc1nXXbaXb2Ydq1VwQtP+h5/r13zUAYOpbiwAbacAhXXKTFA8S492BoPlLjBPGumKDKBiVfURQG9ctCeKuxVH0WVKIfK4rRjLMhD8lQeWDWpKDKBiX/njtngFCxlK7rkFb1r4KrYTeG5ue6kcGtZwUlf8bUCWBo2ErWBZXkx06MJx+hNZFg8dCzR1LA5QKWH+N0kpOeCJ4yLPVfhVTJHyuy0HA17Qeh8+Cs6wMvF+gHH77vTjA0JG85emx2SJX8saLJsaA3I3Q/V52fE3C5gKeaY6+6AmH4UV39qRu2EMVThL1qK47qj7F4S0Kp8780ftlFo3MATc6z8Fp6Ht/ZS0xiMg6bFZ/a/gVXwFe4TqeTqVMmMevm6zk7pwea9xhCGCAEFk8RjpptOGo/xdJcFuZpdV78sotGxwAanQNptvZEIJAkGUtiDnuLmnht+Xo2bNoS8E37kJYXYmNjmXbTjcy8aTwDMpLRmmtb1+CFQPEcIaZuB87a7VhaKoMN3enwy3E0OgfQYO9PsyWt1ZikYEnKIa+oidfe2sj6jZtD2iURkvy2uFwupk+9kRmTc+mT7kLz1CAMAQgsniPEHNtJzLGdWNTqcNJ0KKoST6O9Pw2O/visaQjDQJJlrEl9+KrYy+IVm/hg/YfoYd5vCFt+W+Lj47ll2mRuvWE02d0crV+EECAMbN4iYty7iKnfjcVfa1ZK01CVBBrs/Wi098dnTUUIA0lubeH7in0sXrmZNes2hi28LabKb0tCQgIzpk/h5glXkpko//OLaB0jbM1FxLh3E9uwF6t2LBLpA0JVEmiw9afB3heftUfrLjlZxprUm/wylSXvbOH9DzaiaZHZ+xMx+W1JSkpi5i1TuGn85fSMF2hNVSe6JntzEbGNe3E15WHRzFnqPRMtSiIN9n402Pris3RrHasAW3IfDlT4WfLOVlav3RAx4W3pEPltSUlJYdYtU5g8bjipMS2oDa2DclzDLlJrVkU0twCK4q7DY81AIGFP6UN+ucZfV33M6rUb8PuDW48Plw6X35aZU3J5YvowbGoVWRWvIYvItzZNclIQNxHVlsK4B/5OWXV9xHOejqjt1UzvkcRj04eD5iWtenmHiAewiGYyPZsQ3jqWzp2CIkdvu2pUMsuyxMo/3Y+keehRtxq7Vteh+V16Janql6RY3Lz48IQOzd2WqMh/dc7PSbJ6iG/cSUJzfjSqQKq2D5dWyuV9YPKYoVGpQ4fLv/Ga4YwY6MTmKyO1YUtHpz+BBORon2PVm3h0Yj/6ZAS+FGwWHSo/My2FObMuR9K8ZLjfRya6N2SsqPQWu8DvZsmjY3DYwrtnHCwdJl+WJd78w+2gNtKzaSN2I/Jz+kCI4xgZ4iBOo4ZFj4/v0NwdJn/h0zOJl9wkN+8lQT0cdjyBRAtOE2oGaVIRcUYF/WJr+NVkkx/0OAMdIn/KuEu4OBuc/nLSmneYErNc6k8hF2CY8KizJEFfy0FseJk2zMqFZ6WaUMP2ibj8XunJzJ42FFn3kOXdjBzG9rzjeIinzMjBI2IpNQLcdt4OVkljgO0QQvXw4syBxDkj3/9HVL4iyyx75iaMlnqyfNuwi/Z3/7aHISQO62cj2eOxxCRTbvTEbSSaUFuIUzxk24qR1RqWPnpFxF8XE1H5C2ZPxWXU0K1lP4lGqSkxS4zeeA0HGwqd/N8+G8IwKFD7429nH36gZDjqSJLrSDaKmDvjfFNino6IyZ86bhgXpHtxalVkGHmmxGw04inX0tESB/HEvGU8+6eluBOGoxoShS05puQAGOiqxI6XKzIqGHdRpmlxTyYi8nN6JvPrCX1QdC+99R2mvGxLFzIFLb2R7XHc+8cNJ54yvPnx17B0P4taNZZyNSXsPAAWWXBOQi3oXv7jaomMFLspcU/GdPkWRWbp7FyE6ibH2IMdczbTFqkZeDWZLSUp7N136MTx2to65r5xGMUWw2FPCh7dZkq+eJtG3zg3oqWEhXenYY3A+Gu6/AWPT8ShVtDDKCBRMue+bb3mosyXgEgewuPz3vjB/7+/8RN2egah6xr57m4YwpyBMivOoLsDnL6jvDjLnFlVW0yVf8v4CxmSXItL1JIlFZgSUxMyhzypWOxxPLjgs9PuEnjouSWQOQqPJlHYGGdKboCzUwQOBAMdBdx2lbn9v2ny+2amcN+YZBTdSz9ln2mv1zrs6YZPk9hWm80XeQdP+zld15n5n+uwJedQ0iRT4zOnn7DIMCQNEIKbB9UwqFesKXHBRPnzf/3vGC1udF3jmBZvSszaFgflXgei+1Aem9f+gwdHior5y45YJFmQX2vQYsK6nRBQ3dT6eJhQVZ672bzuxzT5D/75I6SMK9ENQaEvk2+8vdBE6OH9hsQ37ngUu5NH/+frgLdsLF6+nrKECbSosK86vDcUtmiwq0jiYIWEoUnY++by9HvhXygexzT5hwoOM+L2F9mnjES2u6huiWFPQ28aNEdI8Q7Wx9Ki+dnlGcyOPQeCKnvnb9/Gnn0NtR6ZohBv0dY0wceHJKobQFJiqO11K7lPbSRv/6H2CweIAvzWrGCGYfCPjds5ZhvAqGF98R4roaI5BgmDeKsa8DhQ6VU44jawpF3ILXM3BL0VT9M08sqtjD03luraerq7wB7gBbAQcLAS8opB80s4087hrbLBPPXKO6ZvJzFV/nHyDx7m3c+rmXDDJOT6/dSrFtwtFpLtLSjt/K6pOnxZJZBsCcxeBUUlVSHVoayyhoxBo+glDlHnEWQmgtzOl+9TYddhiZJaCYSM45wJ3Pu3YjZ8/EVIdWiPiC0vVFZWcvVd8/nUPxqrqzt1PoMdlQ5qfWdOub9Gwq9J7NNHsG1XcN3NyTy/8B18fabS2Az729k8XemGj/KhpkFCtrqoyJrO+CfX8E3Bt2HV4Ux0yL6dEZdewO9vTaO5cC1CCHrFCfom/bAlljbA/moJS/pljH1qhymbmJKTk1j50CCaDm/jwt6CtJMWQA0D8kuhsEJCGODKOpcl+d14/d0Pw87dHhHpdk6mqLicFZ9Ucc3E27A35lPv1anxQrKTE5ftPj98WS6BEscz66wcKTZne3lzs48q0rm0ZwsV1V4yUr7L6W2B7QehvFYCAc5zJ3H3kkNs3bHXlNzt0WG3Ed1uNzfcv4j368fh6H4Obi98+i2UN7QOcnnlEqoKB61XsvXz/abmXrt5B/tixtCiSuwuaM1XVgeb86DeI6M4Ezjaazrjn1zFkaKOe8omKtsFzx00kFd/eR6evOUgQYJdUN8sYc+8hHHPfnH69/CEgaIorHl+Es1fvU2yS3DMIyOEIC7nfBbujmXF2tDemRMOUdur6XA4WPDUbWRVr0D11CNbY5i3pzebPjNn7f9U9M7O5LWpyTSV5CFJYB08hbvmf0RpWUXEcp6JDunzT4Wmabz74ReIjBEMH9iNQwzhleWRbX317gbktCGcn6ZzICGX2597i4aGxojmbA8R7T/ZvTKF3W7rsHwDB/SL+jkDIqpbxH/qdMrX+f5U6JIfRbrkR5Eu+VGkS34U6ZIfRbrkR5Eu+VGkS34U6ZIfRbrkR5H/Bx8z6HmTXnicAAAAAElFTkSuQmCCCg=='); 48 this.addLinkTag('apple-touch-icon', 'data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABfCAYAAACOTBv1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAQC0lEQVR4nO2ce3wU1b3AvzOzz2TzBpKQhIS3CnLxgYoPqAgiQS8igiAqiFprtT571YpKUa9tvVgrVvhc7IXS4lUUvGgR5CWIoiAIYoQgJGDI+0k2yW42szNz7h8pGBHIPmazqeb7+UD4DHt+vzPfPTnnzJkzIwGCLqKCHO0K/JTpkh9FuuRHkS75UaRLfhTpkh9FuuRHkS75UaRLfhTpkh9FLNGuwKnIzc3l9WXLQAIhQILWvwQnjn3vUNtjkoQQ4kSZr77KY+TIkR1/EgHQKeWnp6eTkJiI0P2gqyeOnxD7T+ttxf/wp4SwOOnTp0/UzqM9OqV8oFXygSVIm3/xvePSKf59up/cWfO9z3c2OnmfH646qVMv2XZa+RKtrT8cWruoztv2O6384/15OLSODZ237Xda+W1nMKEiROe+U9Rp5ZtFJ+51Oq/8E/P7MOjE3oFOLL/1Iik8fUJoCF03pT6RoNPKF4Q/2zF0P0J0yQ8aM/pqoesIXQs/UITotPKFYRDuXMXQ/dDV8oNECIShgRGmOKFjGIY5dYoAnVK+QCB0DSNM+Ybmb/0SOylhy8/NzWXYsGFm1OU7hGhd0RThtdrW2Y758kdcdhGLX30h7Dhhr2ouWrSI9PQ0ykrLeHn+fBYsWIDX6w0zqsAwNOQwW77QtbBnTMdJSkzgkfvuZPqkXOJi7SAMLhl2Htt37gk5ZlgtPycnh7TU7oiGo6TH6zz/3DPUVpXz3qp3+Lch54YeWLR2OyLcbkcPf9wY/bNL2fjuMg7uWM09t11PnE1FaSwADB65746wYofV8ufMeQph6MhfvoT09atIWWORBt7GNaOv5urRWyktLeWll//MXxb/FZ/PF3BcgcDQVeRwux1DQxjBz1m7JSfx2IM/Z/J1Y3A5LUiShFK3G3vpWuwVW9Bjs6i/eCGXnjcgrPqF1fJzrxkLuopUuAJJGMhH12LZMA3LG2ej7JxDZmwT//W7uVSVFPDW/y5l4ID+gQUWAmHo4V8g6VrAA64kSYwfM5It//g7+z9Zye2TxxJPDY7CpSRsnUrCzgdwlH2AZPiwNB5CajyMYqjkjhkRcvVCbvnnnzeUBJcDUbIFyVv+/RNprsKSNx/y5mP0uAS53zSuvWoc48duoqi4lD++vIC/vb4cVVVPHVyA0P1hLw0Yhh/EmU8xtXsyv3noHiaMu5xYmwXJ8GMr34ijfB3Wut2nvR3jKN9EU850fnXHNNZs2BpS/UKW/+QTj4GhIxe+fcbPyVXbsVVtR1ifRMueQE7fKbz0u6f5/dzfsGb9JuY8+wJHiopPKmXObAdDwzhFtyPLMhPGjeKRe2cyIDsVCYHiPoCjcB32qi3Imqfd0PaqrTRmTWFw31QURUbXg69ryPKvuOxihN+LXLQ6oM9L/kasBcuwFixDTzwbS+8buf6q8UwYu4bDR8t4cf5/8+bK99C01hmKOfP87/f5PdO6M/vhX3DdmOHYLTKyWo/92zdxlm/A4j0aVGyLrxzFfQDD1ZdpE8exbMX7QdcvJPmjR/2MWJuCVLIBSXUHXV6pz0fZ8yz2vS+gZYymX/ZEXvnDbOY99yjvrd1CwZFiU65wDd0PhsTUieN44O7p9E5PQhI6trrPcJavx1a7E4nQf7uc1Z/gj8nmjptCk39860tQrFu9ksuGDcX+6f1YioNPeir0mEzUrOtQs65FtyYhSWA7uorYr0O/mKm5/C0MJRYhDBRPEc6KjTirNiP7g28wp6yzNZHywfMQsoUBo+7C1+IPqnxILf+ioYMRaj1K2aZQip8SxVuC85uFOA4uwt/9EloyxkOYSwNSyzEcdRtxVm7C2lRoUk2/Q/HXY2vYj881kLumX88ri888/p1M0PKnTr4BRfKjHN2ApAc+dw8USejYqrZhq9qGkJSwYiXv+iVShFc1nXXbaXb2Ydq1VwQtP+h5/r13zUAYOpbiwAbacAhXXKTFA8S492BoPlLjBPGumKDKBiVfURQG9ctCeKuxVH0WVKIfK4rRjLMhD8lQeWDWpKDKBiX/njtngFCxlK7rkFb1r4KrYTeG5ue6kcGtZwUlf8bUCWBo2ErWBZXkx06MJx+hNZFg8dCzR1LA5QKWH+N0kpOeCJ4yLPVfhVTJHyuy0HA17Qeh8+Cs6wMvF+gHH77vTjA0JG85emx2SJX8saLJsaA3I3Q/V52fE3C5gKeaY6+6AmH4UV39qRu2EMVThL1qK47qj7F4S0Kp8780ftlFo3MATc6z8Fp6Ht/ZS0xiMg6bFZ/a/gVXwFe4TqeTqVMmMevm6zk7pwea9xhCGCAEFk8RjpptOGo/xdJcFuZpdV78sotGxwAanQNptvZEIJAkGUtiDnuLmnht+Xo2bNoS8E37kJYXYmNjmXbTjcy8aTwDMpLRmmtb1+CFQPEcIaZuB87a7VhaKoMN3enwy3E0OgfQYO9PsyWt1ZikYEnKIa+oidfe2sj6jZtD2iURkvy2uFwupk+9kRmTc+mT7kLz1CAMAQgsniPEHNtJzLGdWNTqcNJ0KKoST6O9Pw2O/visaQjDQJJlrEl9+KrYy+IVm/hg/YfoYd5vCFt+W+Lj47ll2mRuvWE02d0crV+EECAMbN4iYty7iKnfjcVfa1ZK01CVBBrs/Wi098dnTUUIA0lubeH7in0sXrmZNes2hi28LabKb0tCQgIzpk/h5glXkpko//OLaB0jbM1FxLh3E9uwF6t2LBLpA0JVEmiw9afB3heftUfrLjlZxprUm/wylSXvbOH9DzaiaZHZ+xMx+W1JSkpi5i1TuGn85fSMF2hNVSe6JntzEbGNe3E15WHRzFnqPRMtSiIN9n402Pris3RrHasAW3IfDlT4WfLOVlav3RAx4W3pEPltSUlJYdYtU5g8bjipMS2oDa2DclzDLlJrVkU0twCK4q7DY81AIGFP6UN+ucZfV33M6rUb8PuDW48Plw6X35aZU3J5YvowbGoVWRWvIYvItzZNclIQNxHVlsK4B/5OWXV9xHOejqjt1UzvkcRj04eD5iWtenmHiAewiGYyPZsQ3jqWzp2CIkdvu2pUMsuyxMo/3Y+keehRtxq7Vteh+V16Janql6RY3Lz48IQOzd2WqMh/dc7PSbJ6iG/cSUJzfjSqQKq2D5dWyuV9YPKYoVGpQ4fLv/Ga4YwY6MTmKyO1YUtHpz+BBORon2PVm3h0Yj/6ZAS+FGwWHSo/My2FObMuR9K8ZLjfRya6N2SsqPQWu8DvZsmjY3DYwrtnHCwdJl+WJd78w+2gNtKzaSN2I/Jz+kCI4xgZ4iBOo4ZFj4/v0NwdJn/h0zOJl9wkN+8lQT0cdjyBRAtOE2oGaVIRcUYF/WJr+NVkkx/0OAMdIn/KuEu4OBuc/nLSmneYErNc6k8hF2CY8KizJEFfy0FseJk2zMqFZ6WaUMP2ibj8XunJzJ42FFn3kOXdjBzG9rzjeIinzMjBI2IpNQLcdt4OVkljgO0QQvXw4syBxDkj3/9HVL4iyyx75iaMlnqyfNuwi/Z3/7aHISQO62cj2eOxxCRTbvTEbSSaUFuIUzxk24qR1RqWPnpFxF8XE1H5C2ZPxWXU0K1lP4lGqSkxS4zeeA0HGwqd/N8+G8IwKFD7429nH36gZDjqSJLrSDaKmDvjfFNino6IyZ86bhgXpHtxalVkGHmmxGw04inX0tESB/HEvGU8+6eluBOGoxoShS05puQAGOiqxI6XKzIqGHdRpmlxTyYi8nN6JvPrCX1QdC+99R2mvGxLFzIFLb2R7XHc+8cNJ54yvPnx17B0P4taNZZyNSXsPAAWWXBOQi3oXv7jaomMFLspcU/GdPkWRWbp7FyE6ibH2IMdczbTFqkZeDWZLSUp7N136MTx2to65r5xGMUWw2FPCh7dZkq+eJtG3zg3oqWEhXenYY3A+Gu6/AWPT8ShVtDDKCBRMue+bb3mosyXgEgewuPz3vjB/7+/8RN2egah6xr57m4YwpyBMivOoLsDnL6jvDjLnFlVW0yVf8v4CxmSXItL1JIlFZgSUxMyhzypWOxxPLjgs9PuEnjouSWQOQqPJlHYGGdKboCzUwQOBAMdBdx2lbn9v2ny+2amcN+YZBTdSz9ln2mv1zrs6YZPk9hWm80XeQdP+zld15n5n+uwJedQ0iRT4zOnn7DIMCQNEIKbB9UwqFesKXHBRPnzf/3vGC1udF3jmBZvSszaFgflXgei+1Aem9f+gwdHior5y45YJFmQX2vQYsK6nRBQ3dT6eJhQVZ672bzuxzT5D/75I6SMK9ENQaEvk2+8vdBE6OH9hsQ37ngUu5NH/+frgLdsLF6+nrKECbSosK86vDcUtmiwq0jiYIWEoUnY++by9HvhXygexzT5hwoOM+L2F9mnjES2u6huiWFPQ28aNEdI8Q7Wx9Ki+dnlGcyOPQeCKnvnb9/Gnn0NtR6ZohBv0dY0wceHJKobQFJiqO11K7lPbSRv/6H2CweIAvzWrGCGYfCPjds5ZhvAqGF98R4roaI5BgmDeKsa8DhQ6VU44jawpF3ILXM3BL0VT9M08sqtjD03luraerq7wB7gBbAQcLAS8opB80s4087hrbLBPPXKO6ZvJzFV/nHyDx7m3c+rmXDDJOT6/dSrFtwtFpLtLSjt/K6pOnxZJZBsCcxeBUUlVSHVoayyhoxBo+glDlHnEWQmgtzOl+9TYddhiZJaCYSM45wJ3Pu3YjZ8/EVIdWiPiC0vVFZWcvVd8/nUPxqrqzt1PoMdlQ5qfWdOub9Gwq9J7NNHsG1XcN3NyTy/8B18fabS2Az729k8XemGj/KhpkFCtrqoyJrO+CfX8E3Bt2HV4Ux0yL6dEZdewO9vTaO5cC1CCHrFCfom/bAlljbA/moJS/pljH1qhymbmJKTk1j50CCaDm/jwt6CtJMWQA0D8kuhsEJCGODKOpcl+d14/d0Pw87dHhHpdk6mqLicFZ9Ucc3E27A35lPv1anxQrKTE5ftPj98WS6BEscz66wcKTZne3lzs48q0rm0ZwsV1V4yUr7L6W2B7QehvFYCAc5zJ3H3kkNs3bHXlNzt0WG3Ed1uNzfcv4j368fh6H4Obi98+i2UN7QOcnnlEqoKB61XsvXz/abmXrt5B/tixtCiSuwuaM1XVgeb86DeI6M4Ezjaazrjn1zFkaKOe8omKtsFzx00kFd/eR6evOUgQYJdUN8sYc+8hHHPfnH69/CEgaIorHl+Es1fvU2yS3DMIyOEIC7nfBbujmXF2tDemRMOUdur6XA4WPDUbWRVr0D11CNbY5i3pzebPjNn7f9U9M7O5LWpyTSV5CFJYB08hbvmf0RpWUXEcp6JDunzT4Wmabz74ReIjBEMH9iNQwzhleWRbX317gbktCGcn6ZzICGX2597i4aGxojmbA8R7T/ZvTKF3W7rsHwDB/SL+jkDIqpbxH/qdMrX+f5U6JIfRbrkR5Eu+VGkS34U6ZIfRbrkR5Eu+VGkS34U6ZIfRbrkR5H/Bx8z6HmTXnicAAAAAElFTkSuQmCCCg==');
52 //this.addLinkTag('apple-touch-startup-image', 'default.png'); 49 //this.addLinkTag('apple-touch-startup-image', 'default.png');
53 50
54 // if (!window.navigator.standalone)// not running as an installed app 51 // if (!window.navigator.standalone)// not running as an installed app
55 52
56 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'selectedDirectLogin', this, 'selectedDirectLoginHandler'); 53 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'selectedDirectLogin', this, 'selectedDirectLoginHandler');
57 54
58 MochiKit.DOM.addElementClass(document.body, 'iPhone'); 55 MochiKit.DOM.addElementClass(document.body, 'iPhone');
59 return this; 56 return this;
60} 57}
61 58
62MochiKit.Base.update(Clipperz.PM.UI.iPhone.Controllers.MainController.prototype, { 59MochiKit.Base.update(Clipperz.PM.UI.iPhone.Controllers.MainController.prototype, {
63 60
64 'toString': function () { 61 'toString': function () {
65 return "Clipperz.PM.UI.iPhone.Controllers.MainController"; 62 return "Clipperz.PM.UI.iPhone.Controllers.MainController";
66 }, 63 },
67 64
68 //========================================================================= 65 //=========================================================================
69 66
70 'user': function () { 67 'user': function () {
71 return this._user; 68 return this._user;
72 }, 69 },
73 70
74 'setUser': function (aValue) { 71 'setUser': function (aValue) {
75 this._user = aValue; 72 this._user = aValue;
76 }, 73 },
77 74
78 //========================================================================= 75 //=========================================================================
79 76
80 'loginForm': function() { 77 'loginForm': function() {
81 if (this._loginForm == null) { 78 if (this._loginForm == null) {
82 MochiKit.DOM.removeElement('mainDiv'); 79 MochiKit.DOM.removeElement('mainDiv');
83 this._loginForm = new Clipperz.PM.UI.iPhone.Components.LoginForm({element:MochiKit.DOM.currentDocument().body}); 80 this._loginForm = new Clipperz.PM.UI.iPhone.Components.LoginForm({element:MochiKit.DOM.currentDocument().body});
84 MochiKit.Signal.connect(this._loginForm, 'doLogin', this, 'doLoginHandler') 81 MochiKit.Signal.connect(this._loginForm, 'doLogin', this, 'doLoginHandler')
85 } 82 }
86 83
87 return this._loginForm; 84 return this._loginForm;
88 }, 85 },
89 86
90 'removeLoginForm': function () { 87 'removeLoginForm': function () {
91 if (this._loginForm != null) { 88 if (this._loginForm != null) {
92 this._loginForm.remove(); 89 this._loginForm.remove();
93 this._loginForm = null; 90 this._loginForm = null;
94 } 91 }
95 }, 92 },
96 93
97 //----------------------------------------------------------------------------- 94 //-----------------------------------------------------------------------------
98 95
99 'cardList': function () { 96 'cardList': function () {
100 if (this._cardList == null) { 97 if (this._cardList == null) {
101 this._cardList = new Clipperz.PM.UI.iPhone.Components.CardList({element:MochiKit.DOM.currentDocument().body}); 98 this._cardList = new Clipperz.PM.UI.iPhone.Components.CardList({element:MochiKit.DOM.currentDocument().body});
102 MochiKit.Signal.connect(this._cardList, 'searchEvent',this, 'searchEventHandler') 99 MochiKit.Signal.connect(this._cardList, 'searchEvent',this, 'searchEventHandler')
103 MochiKit.Signal.connect(this._cardList, 'selectedCard',this, 'selecetedCardHandler') 100 MochiKit.Signal.connect(this._cardList, 'selectedCard',this, 'selecetedCardHandler')
104 } 101 }
105 102
106 return this._cardList; 103 return this._cardList;
107 }, 104 },
108 105
109 //========================================================================= 106 //=========================================================================
110 107
111 'currentWidth': function () { 108 'currentWidth': function () {
112 return this._currentWidth; 109 return this._currentWidth;
113 }, 110 },
114 111
115 'setCurrentWidth': function (aValue) { 112 'setCurrentWidth': function (aValue) {
116 this._currentWidth = aValue; 113 this._currentWidth = aValue;
117 }, 114 },
118 115
119 //========================================================================= 116 //=========================================================================
120 117
121 'orientationChangeHandler': function () { 118 'orientationChangeHandler': function () {
122 switch(window.orientation) { 119 switch(window.orientation) {
123 case 0: 120 case 0:
124 this.setOrientation('portrait'); 121 this.setOrientation('portrait');
125 break; 122 break;
126 case 90: 123 case 90:
127 case -90: 124 case -90:
128 this.setOrientation('landscape'); 125 this.setOrientation('landscape');
129 break; 126 break;
130 } 127 }
131 }, 128 },
132 129
133 //------------------------------------------------------------------------- 130 //-------------------------------------------------------------------------
134 131
135 'setOrientation': function (anOrientation) { 132 'setOrientation': function (anOrientation) {
136 document.body.setAttribute('orientation', anOrientation); 133 document.body.setAttribute('orientation', anOrientation);
137 setTimeout(scrollTo, 100, 0, 1); 134 setTimeout(scrollTo, 100, 0, 1);
138 }, 135 },
139 136
140 //------------------------------------------------------------------------- 137 //-------------------------------------------------------------------------
141 138
142 'slidePages': function (fromPage, toPage, backwards) { 139 'slidePages': function (fromPage, toPage, backwards) {
143 var axis; 140 var axis;
144 var slideDone; 141 var slideDone;
145 142
146 slideDone = function () { 143 slideDone = function () {
147 // console.log("slideDone"); 144 // console.log("slideDone");
148 if (!hasClass(toPage, "dialog")) { 145 if (!hasClass(toPage, "dialog")) {
149 fromPage.removeAttribute("selected"); 146 fromPage.removeAttribute("selected");
150 } 147 }
151 checkTimer = setInterval(checkOrientAndLocation, 300); 148 checkTimer = setInterval(checkOrientAndLocation, 300);
152 setTimeout(updatePage, 0, toPage, fromPage); 149 setTimeout(updatePage, 0, toPage, fromPage);
153 fromPage.removeEventListener('webkitTransitionEnd', slideDone, false); 150 fromPage.removeEventListener('webkitTransitionEnd', slideDone, false);
154 } 151 }
155 152
156 axis = (backwards ? fromPage : toPage).getAttribute("axis"); 153 axis = (backwards ? fromPage : toPage).getAttribute("axis");
157 154
158 clearInterval(checkTimer); 155 clearInterval(checkTimer);
159 156
160 if (canDoSlideAnim() && axis != 'y') { 157 if (canDoSlideAnim() && axis != 'y') {
161 slide2(fromPage, toPage, backwards, slideDone); 158 slide2(fromPage, toPage, backwards, slideDone);
162 } else { 159 } else {
163 slide1(fromPage, toPage, backwards, axis, slideDone); 160 slide1(fromPage, toPage, backwards, axis, slideDone);
164 } 161 }
165 }, 162 },
166 163
167 //------------------------------------------------------------------------- 164 //-------------------------------------------------------------------------
168 165
169 'getCachedValues': function () { 166 'getCachedValues': function () {
170 var deferredResult; 167 var deferredResult;
171 168
172 if (this._cachedObjects != null) { 169 if (this._cachedObjects != null) {
173 deferredResult = MochiKit.Async.succeed(this._cachedObjects); 170 deferredResult = MochiKit.Async.succeed(this._cachedObjects);
174 } else { 171 } else {
175 deferredResult = new Clipperz.Async.Deferred("MainController.getCachedValues", {trace:false}); 172 deferredResult = new Clipperz.Async.Deferred("MainController.getCachedValues", {trace:false});
176 deferredResult.addMethod(this.user(), 'getRecords'); 173 deferredResult.addMethod(this.user(), 'getRecords');
177 deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("MainController.getCachedValues - collectResults", { 174 deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("MainController.getCachedValues - collectResults", {
178 '_rowObject': MochiKit.Async.succeed, 175 '_rowObject': MochiKit.Async.succeed,
179 '_reference': MochiKit.Base.methodcaller('reference'), 176 '_reference': MochiKit.Base.methodcaller('reference'),
180 'label': MochiKit.Base.methodcaller('label'), 177 'label': MochiKit.Base.methodcaller('label'),
181 'favicon': MochiKit.Base.methodcaller('favicon'), 178 'favicon': MochiKit.Base.methodcaller('favicon'),
182 '_searchableContent':MochiKit.Base.methodcaller('searchableContent') 179 '_searchableContent':MochiKit.Base.methodcaller('searchableContent')
183 }, {trace:false})); 180 }, {trace:false}));
184 deferredResult.addCallback(Clipperz.Async.collectAll); 181 deferredResult.addCallback(Clipperz.Async.collectAll);
185 deferredResult.addCallback(MochiKit.Base.bind(function (someRows) { 182 deferredResult.addCallback(MochiKit.Base.bind(function (someRows) {
186 this._cachedObjects = someRows; 183 this._cachedObjects = someRows;
187 return this._cachedObjects; 184 return this._cachedObjects;
188 }, this)); 185 }, this));
189 deferredResult.callback(); 186 deferredResult.callback();
190 } 187 }
191 188
192 return deferredResult; 189 return deferredResult;
193 }, 190 },
194 //========================================================================= 191 //=========================================================================
195 192
196 'run': function(shouldShowRegistrationForm) { 193 'run': function(shouldShowRegistrationForm) {
197 this.loginForm().render(); 194 this.loginForm().render();
198 MochiKit.Async.callLater(1, MochiKit.Base.method(this.loginForm(), 'focusOnUsername')); 195 MochiKit.Async.callLater(1, MochiKit.Base.method(this.loginForm(), 'focusOnUsername'));
199 }, 196 },
200 197
201 //========================================================================= 198 //=========================================================================
202 199
203 'doLoginHandler': function (someArgs) { 200 'doLoginHandler': function (someArgs) {
204 var deferredResult; 201 var deferredResult;
205 varparameters; 202 varparameters;
206 varshouldUseOTP; 203 varshouldUseOTP;
207 // var loginProgress; 204 // var loginProgress;
208 varuser; 205 varuser;
209 var getPassphraseDelegate; 206 var getPassphraseDelegate;
210 207
211 parameters = someArgs; 208 parameters = someArgs;
212 shouldUseOTP = (typeof(parameters.passphrase) == 'undefined'); 209 shouldUseOTP = (typeof(parameters.passphrase) == 'undefined');
213 210
214 getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, parameters.passphrase); 211 getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, parameters.passphrase);
215 user = new Clipperz.PM.DataModel.User({'username':parameters.username, 'getPassphraseFunction':getPassphraseDelegate}); 212 user = new Clipperz.PM.DataModel.User({'username':parameters.username, 'getPassphraseFunction':getPassphraseDelegate});
216 213
217 deferredResult = new Clipperz.Async.Deferred("MainController.doLogin", {trace:false}); 214 deferredResult = new Clipperz.Async.Deferred("MainController.doLogin", {trace:false});
218 deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':4}); 215 deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress', {'steps':4});
219 deferredResult.addMethod(this.loginForm(), 'showLoginProgress'); 216 deferredResult.addMethod(this.loginForm(), 'showLoginProgress');
220 deferredResult.addCallback(MochiKit.Async.wait, 0.1); 217 deferredResult.addCallback(MochiKit.Async.wait, 0.1);
221 deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection'); 218 deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'deferredEntropyCollection');
222 deferredResult.addMethod(user, 'login'); 219 deferredResult.addMethod(user, 'login');
223 deferredResult.addMethod(this, 'setUser', user); 220 deferredResult.addMethod(this, 'setUser', user);
224 deferredResult.addMethod(user, 'getRecords'); 221 deferredResult.addMethod(user, 'getRecords');
225 deferredResult.addMethod(this, 'removeLoginForm'); 222 deferredResult.addMethod(this, 'removeLoginForm');
226 deferredResult.addMethod(this.cardList(), 'render'); 223 deferredResult.addMethod(this.cardList(), 'render');
227 deferredResult.addMethod(this, 'displaySelectedRecords', ''); 224 deferredResult.addMethod(this, 'displaySelectedRecords', '');
228 deferredResult.addErrback(MochiKit.Base.method(this.loginForm(), 'showLoginError')); 225 deferredResult.addErrback(MochiKit.Base.method(this.loginForm(), 'showLoginError'));
229 deferredResult.callback(); 226 deferredResult.callback();
230 227
231 return deferredResult; 228 return deferredResult;
232 }, 229 },
233 230
234 //========================================================================= 231 //=========================================================================
235 232
236 'searchEventHandler': function (aValue) { 233 'searchEventHandler': function (aValue) {
237//console.log("searching for ... " + aValue); 234//console.log("searching for ... " + aValue);
238 return this.displaySelectedRecords(aValue); 235 return this.displaySelectedRecords(aValue);
239 }, 236 },
240 237
241 //========================================================================= 238 //=========================================================================
242 239
243 '_displaySelectedRows': function (aFilter, someRows) { 240 '_displaySelectedRows': function (aFilter, someRows) {
244 var result; 241 var result;
245 242
246 result = someRows; 243 result = someRows;
247 244
248 if (aFilter != null) { 245 if (aFilter != null) {
249 var filter; 246 var filter;
250 varfilterRegExp; 247 varfilterRegExp;
251 248
252 filter = aFilter.replace(/[^A-Za-z0-9]/g, "\\$&"); 249 filter = aFilter.replace(/[^A-Za-z0-9]/g, "\\$&");
253 filterRegExp = new RegExp(filter, "i"); 250 filterRegExp = new RegExp(filter, "i");
254 result = MochiKit.Base.filter(function (aCachedResult) { return filterRegExp.test(aCachedResult['_searchableContent'])}, result); 251 result = MochiKit.Base.filter(function (aCachedResult) { return filterRegExp.test(aCachedResult['_searchableContent'])}, result);
255 } 252 }
256 253
257 254
258 result.sort(MochiKit.Base.partial(function (aKey, aComparator, aObject, bObject) { 255 result.sort(MochiKit.Base.partial(function (aKey, aComparator, aObject, bObject) {
259 return aComparator(aObject[aKey], bObject[aKey]); 256 return aComparator(aObject[aKey], bObject[aKey]);
260 }, 'label', Clipperz.Base.caseInsensitiveCompare)); 257 }, 'label', Clipperz.Base.caseInsensitiveCompare));
261 258
262 this.cardList().update(result); 259 this.cardList().update(result);
263 }, 260 },
264 261
265 //------------------------------------------------------------------------- 262 //-------------------------------------------------------------------------
266 263
267 'displaySelectedRecords': function (aFilter) { 264 'displaySelectedRecords': function (aFilter) {
268 return Clipperz.Async.callbacks("MainController.displaySelectedrows", [ 265 return Clipperz.Async.callbacks("MainController.displaySelectedrows", [
269 MochiKit.Base.method(this, 'getCachedValues'), 266 MochiKit.Base.method(this, 'getCachedValues'),
270 MochiKit.Base.method(this, '_displaySelectedRows', aFilter) 267 MochiKit.Base.method(this, '_displaySelectedRows', aFilter)
271 ], {trace:false}); 268 ], {trace:false});
272 }, 269 },
273 270
274 //========================================================================= 271 //=========================================================================
275 272
276 'selecetedCardHandler': function (aRecordReference) { 273 'selecetedCardHandler': function (aRecordReference) {
277 vardeferredResult; 274 vardeferredResult;
278 varrecordData; 275 varrecordData;
279 276
280 recordData = {}; 277 recordData = {};
281//console.log("Showing detail for card with reference", aRecordReference); 278//console.log("Showing detail for card with reference", aRecordReference);
282 deferredResult = new Clipperz.Async.Deferred("MainController.selectedCardHandler", {trace:false}); 279 deferredResult = new Clipperz.Async.Deferred("MainController.selectedCardHandler", {trace:false});
283 deferredResult.addMethod(this.user(), 'getRecord', aRecordReference); 280 deferredResult.addMethod(this.user(), 'getRecord', aRecordReference);
284 deferredResult.collectResults({ 281 deferredResult.collectResults({
285 '_reference':MochiKit.Base.methodcaller('reference'), 282 '_reference':MochiKit.Base.methodcaller('reference'),
286 'title': MochiKit.Base.methodcaller('label'), 283 'title': MochiKit.Base.methodcaller('label'),
287 'favicon': MochiKit.Base.methodcaller('favicon') 284 'favicon': MochiKit.Base.methodcaller('favicon')
288 }); 285 });
289 deferredResult.addCallback(function (someData) { 286 deferredResult.addCallback(function (someData) {
290 MochiKit.Base.update(recordData, someData); 287 MochiKit.Base.update(recordData, someData);
291 }) 288 })
292 deferredResult.addMethod(this.cardList(), 'showCard', recordData); 289 deferredResult.addMethod(this.cardList(), 'showCard', recordData);
293 290
294 deferredResult.addMethod(this.user(), 'getRecord', aRecordReference); 291 deferredResult.addMethod(this.user(), 'getRecord', aRecordReference);
295 deferredResult.addMethodcaller('notes'); 292 deferredResult.addMethodcaller('notes');
296 deferredResult.addCallback(function (someNotes) { 293 deferredResult.addCallback(function (someNotes) {
297 recordData['notes'] = someNotes; 294 recordData['notes'] = someNotes;
298 }) 295 })
299 296
300 deferredResult.addMethod(this.user(), 'getRecord', aRecordReference); 297 deferredResult.addMethod(this.user(), 'getRecord', aRecordReference);
301 deferredResult.addMethodcaller('getCurrentRecordVersion'); 298 deferredResult.addMethodcaller('getCurrentRecordVersion');
302 deferredResult.addMethodcaller('fields'); 299 deferredResult.addMethodcaller('fields');
303 deferredResult.addCallback(MochiKit.Base.values); 300 deferredResult.addCallback(MochiKit.Base.values);
304 deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("MainController.selectedCardHandler - fields", { 301 deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("MainController.selectedCardHandler - fields", {
305 'label':MochiKit.Base.methodcaller('label'), 302 'label':MochiKit.Base.methodcaller('label'),
306 'value':MochiKit.Base.methodcaller('value'), 303 'value':MochiKit.Base.methodcaller('value'),
307 'isHidden':MochiKit.Base.methodcaller('isHidden') 304 'isHidden':MochiKit.Base.methodcaller('isHidden')
308 }, {trace:false})); 305 }, {trace:false}));
309 deferredResult.addCallback(Clipperz.Async.collectAll); 306 deferredResult.addCallback(Clipperz.Async.collectAll);
310 deferredResult.addCallback(function (someData) { 307 deferredResult.addCallback(function (someData) {
311 recordData['fields'] = someData; 308 recordData['fields'] = someData;
312 }); 309 });
313 310
314 deferredResult.addMethod(this.user(), 'getRecord', aRecordReference); 311 deferredResult.addMethod(this.user(), 'getRecord', aRecordReference);
315 deferredResult.addMethodcaller('directLogins'); 312 deferredResult.addMethodcaller('directLogins');
316 deferredResult.addCallback(MochiKit.Base.values); 313 deferredResult.addCallback(MochiKit.Base.values);
317 deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("MainController.selectedCardHandler - directLogins", { 314 deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("MainController.selectedCardHandler - directLogins", {
318 'label': MochiKit.Base.methodcaller('label'), 315 'label': MochiKit.Base.methodcaller('label'),
319 'favicon': MochiKit.Base.methodcaller('favicon'), 316 'favicon': MochiKit.Base.methodcaller('favicon'),
320 '_reference':MochiKit.Base.methodcaller('reference') 317 '_reference':MochiKit.Base.methodcaller('reference')
321 }, {trace:false})); 318 }, {trace:false}));
322 deferredResult.addCallback(Clipperz.Async.collectAll); 319 deferredResult.addCallback(Clipperz.Async.collectAll);
323 deferredResult.addCallback(function (someData) { 320 deferredResult.addCallback(function (someData) {
324 recordData['directLogins'] = someData; 321 recordData['directLogins'] = someData;
325 }); 322 });
326 323
327 deferredResult.addMethod(this.cardList(), 'showCardDetails', recordData); 324 deferredResult.addMethod(this.cardList(), 'showCardDetails', recordData);
328 deferredResult.callback(); 325 deferredResult.callback();
329 326
330 return deferredResult; 327 return deferredResult;
331 }, 328 },
332 329
333 //========================================================================= 330 //=========================================================================
334 331
335 'selectedDirectLoginHandler': function (someData) { 332 'selectedDirectLoginHandler': function (someData) {
336 vardeferredResult; 333 vardeferredResult;
337 334
338//console.log("<<< signal - directLogin"); 335//console.log("<<< signal - directLogin");
339 deferredResult = new Clipperz.Async.Deferred("MainController.selectedDirectLoginHandler", {trace:false}); 336 deferredResult = new Clipperz.Async.Deferred("MainController.selectedDirectLoginHandler", {trace:false});
340 deferredResult.addMethod(this.user(), 'getRecord', someData['cardReference']); 337 deferredResult.addMethod(this.user(), 'getRecord', someData['cardReference']);
341 deferredResult.addMethodcaller('directLogins'); 338 deferredResult.addMethodcaller('directLogins');
342 deferredResult.addCallback(MochiKit.Base.itemgetter(someData['directLoginReference'])); 339 deferredResult.addCallback(MochiKit.Base.itemgetter(someData['directLoginReference']));
343 // deferredResult.addMethodcaller('runDirectLogin'); 340 // deferredResult.addMethodcaller('runDirectLogin');
344 deferredResult.addCallback(Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.openDirectLogin); 341 deferredResult.addCallback(Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.openDirectLogin);
345 deferredResult.callback(); 342 deferredResult.callback();
346 343
347 return deferredResult; 344 return deferredResult;
348 }, 345 },
349 346
350 //========================================================================= 347 //=========================================================================
351 348
352 'addMetaTag': function (aName, aContent) { 349 'addMetaTag': function (aName, aContent) {
353 varmetaTag; 350 varmetaTag;
354 351
355 metaTag = document.createElement('meta'); 352 metaTag = document.createElement('meta');
356 metaTag.name = aName; 353 metaTag.name = aName;
357 metaTag.content = aContent; 354 metaTag.content = aContent;
358 document.getElementsByTagName('head')[0].appendChild(metaTag); 355 document.getElementsByTagName('head')[0].appendChild(metaTag);
359 }, 356 },
360 357
361 'addLinkTag': function (aRel, anHref) { 358 'addLinkTag': function (aRel, anHref) {
362 var linkTag; 359 var linkTag;
363 360
364 linkTag = document.createElement('link'); 361 linkTag = document.createElement('link');
365 linkTag.rel = aRel; 362 linkTag.rel = aRel;
366 linkTag.href = anHref; 363 linkTag.href = anHref;
367 document.getElementsByTagName('head')[0].appendChild(linkTag); 364 document.getElementsByTagName('head')[0].appendChild(linkTag);
368 }, 365 },
369 366
370 //========================================================================= 367 //=========================================================================
371 __syntaxFix__: "syntax fix" 368 __syntaxFix__: "syntax fix"
372}); \ No newline at end of file 369}); \ No newline at end of file