summaryrefslogtreecommitdiff
path: root/frontend/gamma/js/Clipperz/PM/UI/Web
authorClipperz <info@clipperz.com>2013-01-08 15:21:04 (UTC)
committer Clipperz <info@clipperz.com>2013-01-08 15:21:04 (UTC)
commit816fc35420a434b1d54ae5833d617608f7456048 (patch) (unidiff)
tree95b8caf354083593d7775e4dda6f4c556b44a2d9 /frontend/gamma/js/Clipperz/PM/UI/Web
parent267603e3aa3cf0029411e67ae14018b52344c296 (diff)
downloadclipperz-816fc35420a434b1d54ae5833d617608f7456048.zip
clipperz-816fc35420a434b1d54ae5833d617608f7456048.tar.gz
clipperz-816fc35420a434b1d54ae5833d617608f7456048.tar.bz2
Updated version of /gamma
Tons of changes, included a new draft of the mobile version (still VERY rough)
Diffstat (limited to 'frontend/gamma/js/Clipperz/PM/UI/Web') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js17
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js18
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js14
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js8
-rw-r--r--frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js31
5 files changed, 65 insertions, 23 deletions
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 ee6d7a3..d6b0574 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/AccountPanel.js
@@ -20,126 +20,131 @@ refer to http://www.clipperz.com.
20* 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
21 License along with Clipperz Community Edition. If not, see 21 License along with Clipperz Community Edition. If not, see
22 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
23 23
24*/ 24*/
25 25
26Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); 26Clipperz.Base.module('Clipperz.PM.UI.Web.Components');
27 27
28Clipperz.PM.UI.Web.Components.AccountPanel = function(args) { 28Clipperz.PM.UI.Web.Components.AccountPanel = function(args) {
29 args = args || {}; 29 args = args || {};
30 30
31 Clipperz.PM.UI.Web.Components.AccountPanel.superclass.constructor.apply(this, arguments); 31 Clipperz.PM.UI.Web.Components.AccountPanel.superclass.constructor.apply(this, arguments);
32 32
33 //this._initiallySelectedTab = args.selected || 'ACCOUNT'; 33 //this._initiallySelectedTab = args.selected || 'ACCOUNT';
34 this._initiallySelectedTab = args.selected || 'PASSPHRASE'; 34 this._initiallySelectedTab = args.selected || 'PASSPHRASE';
35 this._tabPanelControllerConfiguration = { 35 this._tabPanelControllerConfiguration = {
36 // 'ACCOUNT': { 36 // 'ACCOUNT': {
37 // tab:'accountTab', 37 // tab:'accountTab',
38 // panel:'accountPanel' 38 // panel:'accountPanel'
39 // }, 39 // },
40 'PASSPHRASE': { 40 'PASSPHRASE': {
41 tab:'passphraseTab', 41 tab:'passphraseTab',
42 panel:'passphrasePanel' 42 panel:'passphrasePanel'
43 }, 43 },
44 'OTP': {
45 tab:'OTPTab',
46 panel:'OTPPanel'
47 },
44 'PREFERENCES': { 48 'PREFERENCES': {
45 tab:'preferencesTab', 49 tab:'preferencesTab',
46 panel:'preferencesPanel' 50 panel:'preferencesPanel'
47 }, 51 },
48 'LOGIN_HISTORY': { 52 'LOGIN_HISTORY': {
49 tab:'loginHistoryTab', 53 tab:'loginHistoryTab',
50 panel:'loginHistoryPanel' 54 panel:'loginHistoryPanel'
51 } 55 }
52 }; 56 };
53 57
54 return this; 58 return this;
55} 59}
56 60
57//============================================================================= 61//=============================================================================
58 62
59Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.AccountPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, { 63Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.AccountPanel, Clipperz.PM.UI.Common.Components.TabPanelComponent, {
60 64
61 //------------------------------------------------------------------------- 65 //-------------------------------------------------------------------------
62 66
63 'toString': function () { 67 'toString': function () {
64 return "Clipperz.PM.UI.Web.Components.AccountPanel component"; 68 return "Clipperz.PM.UI.Web.Components.AccountPanel component";
65 }, 69 },
66 70
67 //------------------------------------------------------------------------- 71 //-------------------------------------------------------------------------
68 72
69 'renderSelf': function(/*aContainer, aPosition*/) { 73 'renderSelf': function(/*aContainer, aPosition*/) {
70//Clipperz.log("AccountPanel.renderSelf element", this.element()); 74//Clipperz.log("AccountPanel.renderSelf element", this.element());
71 this.append(this.element(), [ 75 this.append(this.element(), [
72 {tag:'div', cls:'header', children:[ 76 {tag:'div', cls:'header', children:[
73 {tag:'div', cls:'subPanelTabs', children:[ 77 {tag:'div', cls:'subPanelTabs', children:[
74 {tag:'ul', children:[ 78 {tag:'ul', children:[
75 // {tag:'li', id:this.getId('accountTab'), children:[{tag:'a', href:'#', html:'Account'}], cls:'first'}, 79 // {tag:'li', id:this.getId('accountTab'), children:[{tag:'a', href:'#', html:'Account'}], cls:'first'},
76 {tag:'li', id:this.getId('passphraseTab'), children:[{tag:'a', href:'#', html:'Passphrase'}], cls:'first'}, 80 {tag:'li', id:this.getId('passphraseTab'), children:[{tag:'a', href:'#', html:'Passphrase'}], cls:'first'},
81 {tag:'li', id:this.getId('OTPTab'), children:[{tag:'a', href:'#', html:'One Time Passwords'}]},
77 {tag:'li', id:this.getId('preferencesTab'), children:[{tag:'a', href:'#', html:'Preferences'}]}, 82 {tag:'li', id:this.getId('preferencesTab'), children:[{tag:'a', href:'#', html:'Preferences'}]},
78 {tag:'li', id:this.getId('loginHistoryTab'),children:[{tag:'a', href:'#', html:'Login history'}]} 83 {tag:'li', id:this.getId('loginHistoryTab'),children:[{tag:'a', href:'#', html:'Login history'}]}
79 ]} 84 ]}
80 ]} 85 ]}
81 ]}, 86 ]},
82 {tag:'div', cls:'body', children:[ 87 {tag:'div', cls:'body', children:[
83 {tag:'div', cls:'accountPanel', children:[ 88 {tag:'div', cls:'accountPanel', children:[
84 {tag:'div', cls:'subPanelContent', children:[ 89 {tag:'div', cls:'subPanelContent', children:[
85 {tag:'ul', children:[ 90 {tag:'ul', children:[
86 // {tag:'li', id:this.getId('accountPanel'),children:[ 91 // {tag:'li', id:this.getId('accountPanel'),children:[
87 // {tag:'h3', html:"-- Account --"} 92 // {tag:'h3', html:"-- Account --"}
88 // ]}, 93 // ]},
89 {tag:'li', id:this.getId('passphrasePanel'),children:[ 94 {tag:'li', id:this.getId('passphrasePanel'),children:[
90 {tag:'h3', cls:'changePassphrase', html:"Change passphrase"}, 95 {tag:'h3', cls:'changePassphrase', html:"Change passphrase"},
91 {tag:'form', id:this.getId('changePassphrase'), cls:'changePassphrase', children:[ 96 {tag:'form', id:this.getId('changePassphrase'), cls:'changePassphrase', children:[
92 {tag:'div', cls:'currentCredentials', children:[ 97 {tag:'div', cls:'currentCredentials', children:[
93 {tag:'div', cls:'field username', children:[ 98 {tag:'div', cls:'field username', children:[
94 {tag:'label', html:"username", 'for':this.getId('currentUsername')}, 99 {tag:'label', html:"username", 'for':this.getId('currentUsername')},
95 {tag:'input', id:this.getId('currentUsername')} 100 {tag:'input', id:this.getId('currentUsername')}
96 ]}, 101 ]},
97 {tag:'div', cls:'field passphrase', children:[ 102 {tag:'div', cls:'field passphrase', children:[
98 {tag:'label', html:"passphrase", 'for':this.getId('currentPassphrase')}, 103 {tag:'label', html:"passphrase", 'for':this.getId('currentPassphrase')},
99 {tag:'input', id:this.getId('currentPassphrase')} 104 {tag:'input', id:this.getId('currentPassphrase')}
100 ]} 105 ]}
101 ]}, 106 ]},
102 {tag:'div', cls:'newPassphrase', children:[ 107 {tag:'div', cls:'newPassphrase', children:[
103 {tag:'div', cls:'field', children:[ 108 {tag:'div', cls:'field', children:[
104 {tag:'label', html:"new passphrase", 'for':this.getId('newPassphrase')}, 109 {tag:'label', html:"new passphrase", 'for':this.getId('newPassphrase')},
105 {tag:'input', id:this.getId('newPassphrase')} 110 {tag:'input', id:this.getId('newPassphrase')}
106 ]}, 111 ]},
107 {tag:'div', cls:'field', children:[ 112 {tag:'div', cls:'field', children:[
108 {tag:'label', html:"re-new passphrase", 'for':this.getId('reNewPassphrase')}, 113 {tag:'label', html:"re-new passphrase", 'for':this.getId('reNewPassphrase')},
109 {tag:'input', id:this.getId('reNewPassphrase')} 114 {tag:'input', id:this.getId('reNewPassphrase')}
110 ]} 115 ]}
111 ]}, 116 ]},
112 {tag:'div', cls:'confirm', children:[ 117 {tag:'div', cls:'confirm', children:[
113 {tag:'input', type:'checkbox', id:this.getId('confirm')}, 118 {tag:'input', type:'checkbox', id:this.getId('confirm')},
114 {tag:'label', html:"I understand that Clipperz will not be able to recover a lost passphrase", 'for':this.getId('confirm')} 119 {tag:'label', html:"I understand that Clipperz will not be able to recover a lost passphrase", 'for':this.getId('confirm')}
115 ]} 120 ]}
116 ]}, 121 ]},
117 {tag:'div', cls:'clear'}, 122 {tag:'div', cls:'clear'},
118 {tag:'div', cls:'confirmButton', id:this.getId('confirmationButton'), children:[ 123 {tag:'div', cls:'confirmButton', id:this.getId('confirmationButton'), children:[
119 {tag:'span', html:"change passphrase"} 124 {tag:'span', html:"change passphrase"}
120 ]}, 125 ]}
121 126 ]},
122 {tag:'h3', cls:'manageOTP', html:"Manage One-Time Passphrases"}, 127 {tag:'li', id:this.getId('OTPPanel'), children:[
123 {} 128 // {tag:'h3', html:"Manage One-Time Passphrases"}
124 ]}, 129 ]},
125 {tag:'li', id:this.getId('preferencesPanel'), children:[ 130 {tag:'li', id:this.getId('preferencesPanel'), children:[
126 {tag:'h3', html:"-- Preferences --"} 131 // {tag:'h3', html:"-- Preferences --"}
127 ]}, 132 ]},
128 {tag:'li', id:this.getId('loginHistoryPanel'), children:[ 133 {tag:'li', id:this.getId('loginHistoryPanel'), children:[
129 {tag:'h3', html:"-- Login History --"} 134 // {tag:'h3', html:"-- Login History --"}
130 ]} 135 ]}
131 ]} 136 ]}
132 ]} 137 ]}
133 ]} 138 ]}
134 ]}, 139 ]},
135 {tag:'div', cls:'footer'} 140 {tag:'div', cls:'footer'}
136 ]); 141 ]);
137 142
138 this.tabPanelController().setup({selected:this.initiallySelectedTab()}); 143 this.tabPanelController().setup({selected:this.initiallySelectedTab()});
139 }, 144 },
140 145
141 //------------------------------------------------------------------------- 146 //-------------------------------------------------------------------------
142 147
143 148
144 __syntaxFix__: "syntax fix" 149 __syntaxFix__: "syntax fix"
145}); 150});
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 d2f1045..462d864 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/DataPanel.js
@@ -61,48 +61,56 @@ Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.DataPanel, Clipperz.PM.UI.Com
61 61
62 'toString': function () { 62 'toString': function () {
63 return "Clipperz.PM.UI.Web.Components.DataPanel component"; 63 return "Clipperz.PM.UI.Web.Components.DataPanel component";
64 }, 64 },
65 65
66 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
67 67
68 'renderSelf': function(/*aContainer, aPosition*/) { 68 'renderSelf': function(/*aContainer, aPosition*/) {
69 this.append(this.element(), [ 69 this.append(this.element(), [
70 {tag:'div', cls:'header', children:[ 70 {tag:'div', cls:'header', children:[
71 {tag:'div', cls:'subPanelTabs', children:[ 71 {tag:'div', cls:'subPanelTabs', children:[
72 {tag:'ul', children:[ 72 {tag:'ul', children:[
73 {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'},
74 {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'}]},
75 {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'}]},
76 {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'}]}
77 ]} 77 ]}
78 ]} 78 ]}
79 ]}, 79 ]},
80 {tag:'div', cls:'body', children:[ 80 {tag:'div', cls:'body', children:[
81 {tag:'div', cls:'accountPanel', children:[ 81 {tag:'div', cls:'accountPanel', children:[
82 {tag:'div', cls:'subPanelContent', children:[ 82 {tag:'div', cls:'subPanelContent', children:[
83 {tag:'ul', children:[ 83 {tag:'ul', children:[
84 {tag:'li', id:this.getId('offlineCopyPanel'),children:[ 84 {tag:'li', id:this.getId('offlineCopyPanel'),children:[
85 {tag:'h3', html:"Offline copy"} 85 // {tag:'h3', html:"Offline copy"},
86 {tag:'p', html:"With just one click you can dump all your encrypted data from Clipperz servers to your hard disk and create a read-only offline version of Clipperz to be used when you are not connected to the Internet."},
87 {tag:'a', id:this.getId('offlineCopyDownloadLink'), href:'#', html:"Download", cls:'downloadOfflineCopy'}
86 ]}, 88 ]},
87 {tag:'li', id:this.getId('sharingPanel'),children:[ 89 {tag:'li', id:this.getId('sharingPanel'),children:[
88 {tag:'h3', html:"Sharing"} 90 // {tag:'h3', html:"Sharing"}
89 ]}, 91 ]},
90 {tag:'li', id:this.getId('importPanel'), children:[ 92 {tag:'li', id:this.getId('importPanel'), children:[
91 {tag:'h3', html:"Import"} 93 // {tag:'h3', html:"Import"}
92 ]}, 94 ]},
93 {tag:'li', id:this.getId('exportPanel'), children:[ 95 {tag:'li', id:this.getId('exportPanel'), children:[
94 {tag:'h3', html:"Export"} 96 // {tag:'h3', html:"Export"}
95 ]} 97 ]}
96 ]} 98 ]}
97 ]} 99 ]}
98 ]} 100 ]}
99 ]}, 101 ]},
100 {tag:'div', cls:'footer'} 102 {tag:'div', cls:'footer'}
101 ]); 103 ]);
102 104
103 this.tabPanelController().setup({selected:this.initiallySelectedTab()}); 105 this.tabPanelController().setup({selected:this.initiallySelectedTab()});
106 MochiKit.Signal.connect(this.getId('offlineCopyDownloadLink'), 'onclick', this, 'downloadOfflineCopy');
104 }, 107 },
105 108
109 'downloadOfflineCopy': function (anEvent) {
110 anEvent.preventDefault();
111 MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'downloadOfflineCopy', anEvent.src());
112 },
113
106 //------------------------------------------------------------------------- 114 //-------------------------------------------------------------------------
107 __syntaxFix__: "syntax fix" 115 __syntaxFix__: "syntax fix"
108}); 116});
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 5d082b5..26506e7 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/LoginProgress.js
@@ -61,88 +61,92 @@ Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.LoginProgress, Clipperz.PM.UI
61 // var loginProgressElement; 61 // var loginProgressElement;
62 // 62 //
63 // loginProgressElement = MochiKit.DOM.getElement('loginProgress'); 63 // loginProgressElement = MochiKit.DOM.getElement('loginProgress');
64 // 64 //
65 // if (loginProgressElement == null) { 65 // if (loginProgressElement == null) {
66 // 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);
67 // } 67 // }
68 68
69//console.log(">> LoginProgress.renderSelf", this.element()); 69//console.log(">> LoginProgress.renderSelf", this.element());
70 this.append(this.element(), {tag:'div', id:'loginProgress', cls:'LoginProgress', children: [ 70 this.append(this.element(), {tag:'div', id:'loginProgress', cls:'LoginProgress', children: [
71 // this.append(loginProgressElement, [ 71 // this.append(loginProgressElement, [
72 {tag:'div', cls:'header', children:[ 72 {tag:'div', cls:'header', children:[
73 {tag:'h3', id:this.getId('title'), html:"login progress"} 73 {tag:'h3', id:this.getId('title'), html:"login progress"}
74 ]}, 74 ]},
75 {tag:'div', cls:'body', children:[ 75 {tag:'div', cls:'body', children:[
76 {tag:'div', id:this.getId('progressBar')}, 76 {tag:'div', id:this.getId('progressBar')},
77 {tag:'div', id:this.getId('errorBox'), cls:'errorBox', children:[ 77 {tag:'div', id:this.getId('errorBox'), cls:'errorBox', children:[
78 // {tag:'div',cls:'img ALERT', children:[{tag:'div'}]}, 78 // {tag:'div',cls:'img ALERT', children:[{tag:'div'}]},
79 {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')}]},
80 {tag:'p', html:"Login failed"} 80 {tag:'p', html:"Login failed"}
81 ]} 81 ]}
82 ]}, 82 ]},
83 {tag:'div', cls:'footer', children:[ 83 {tag:'div', cls:'footer', children:[
84 {tag:'div', cls:'buttonArea', id:this.getId('buttonArea'), children:[ 84 {tag:'div', cls:'buttonArea', id:this.getId('buttonArea'), children:[
85 {tag:'div', cls:'button', id:this.getId('button'), children:[ 85 // {tag:'div', cls:'button', id:this.getId('button'), children:[
86 {tag:'a', href:'#', id:this.getId('buttonLink'), html:"cancel"} 86 // {tag:'a', href:'#', id:this.getId('buttonLink'), html:"cancel"}
87 ]} 87 // ]}
88 {tag:'a', cls:'button', id:this.getId('button'), html:"cancel"}
88 ]} 89 ]}
89 ]} 90 ]}
90 ]}); 91 ]});
91 // ]); 92 // ]);
92 93
93 Clipperz.PM.UI.Canvas.marks['!'](this.getElement('canvas'), "#ffffff"); 94 Clipperz.PM.UI.Canvas.marks['!'](this.getElement('canvas'), "#ffffff");
94 95
95 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); 96 this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')}));
96 MochiKit.Style.hideElement(this.getElement('errorBox')); 97 MochiKit.Style.hideElement(this.getElement('errorBox'));
97 98
98 MochiKit.Signal.connect(this.getId('buttonLink'), 'onclick', this, 'cancelEventHandler'); 99 // MochiKit.Signal.connect(this.getId('buttonLink'), 'onclick', this, 'cancelEventHandler');
100 MochiKit.Signal.connect(this.getId('button'), 'onclick', this, 'cancelEventHandler');
99 }, 101 },
100 102
101 //------------------------------------------------------------------------- 103 //-------------------------------------------------------------------------
102 104
103 'displayElement': function() { 105 'displayElement': function() {
104 return MochiKit.DOM.getElement('loginProgress'); 106 return MochiKit.DOM.getElement('loginProgress');
105 }, 107 },
106 108
107 //------------------------------------------------------------------------- 109 //-------------------------------------------------------------------------
108 110
109 'cancelEventHandler': function(anEvent) { 111 'cancelEventHandler': function(anEvent) {
110 anEvent.preventDefault(); 112 anEvent.preventDefault();
111 113
112 MochiKit.Signal.signal(this, 'cancelEvent'); 114 MochiKit.Signal.signal(this, 'cancelEvent');
113 }, 115 },
114 116
115 //------------------------------------------------------------------------- 117 //-------------------------------------------------------------------------
116 118
117 'disableCancel': function() { 119 'disableCancel': function() {
118 MochiKit.Style.hideElement(this.getElement('buttonArea')); 120 MochiKit.Style.hideElement(this.getElement('buttonArea'));
119 }, 121 },
120 122
121 //------------------------------------------------------------------------- 123 //-------------------------------------------------------------------------
122 124
123 'showErrorMessage': function() { 125 'showErrorMessage': function() {
124 this.getElement('buttonLink').innerHTML = "close"; 126 // this.getElement('buttonLink').innerHTML = "close";
127 this.getElement('button').innerHTML = "close";
128 MochiKit.DOM.addElementClass(this.getElement('button'), 'default');
125 129
126 MochiKit.Style.hideElement(this.getElement('progressBar')); 130 MochiKit.Style.hideElement(this.getElement('progressBar'));
127 131
128 this.getElement('title').innerHTML = "Error"; 132 this.getElement('title').innerHTML = "Error";
129 MochiKit.Style.showElement(this.getElement('errorBox')); 133 MochiKit.Style.showElement(this.getElement('errorBox'));
130 MochiKit.Style.showElement(this.getElement('buttonArea')); 134 MochiKit.Style.showElement(this.getElement('buttonArea'));
131 }, 135 },
132 136
133 //------------------------------------------------------------------------- 137 //-------------------------------------------------------------------------
134 138
135 'deferredHideModalAndRemove': function(someParameters, aResult) { 139 'deferredHideModalAndRemove': function(someParameters, aResult) {
136 vardeferredResult; 140 vardeferredResult;
137 141
138 deferredResult = new Clipperz.Async.Deferred("LoginProgress.deferredHideModalAndRemove", {trace:false}); 142 deferredResult = new Clipperz.Async.Deferred("LoginProgress.deferredHideModalAndRemove", {trace:false});
139 deferredResult.addMethod(this, 'deferredHideModal'); 143 deferredResult.addMethod(this, 'deferredHideModal');
140 deferredResult.addMethod(this, 'remove'); 144 deferredResult.addMethod(this, 'remove');
141 deferredResult.addCallback(function () { 145 deferredResult.addCallback(function () {
142 return aResult; 146 return aResult;
143 }); 147 });
144 deferredResult.callback(someParameters); 148 deferredResult.callback(someParameters);
145 149
146 return deferredResult; 150 return deferredResult;
147 }, 151 },
148 152
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 3ee6189..0fa369f 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/ToolsPanel.js
@@ -61,50 +61,50 @@ Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.ToolsPanel, Clipperz.PM.UI.Co
61 61
62 'toString': function () { 62 'toString': function () {
63 return "Clipperz.PM.UI.Web.Components.ToolsPanel component"; 63 return "Clipperz.PM.UI.Web.Components.ToolsPanel component";
64 }, 64 },
65 65
66 //------------------------------------------------------------------------- 66 //-------------------------------------------------------------------------
67 67
68 'renderSelf': function(/*aContainer, aPosition*/) { 68 'renderSelf': function(/*aContainer, aPosition*/) {
69 this.append(this.element(), [ 69 this.append(this.element(), [
70 {tag:'div', cls:'header', children:[ 70 {tag:'div', cls:'header', children:[
71 {tag:'div', cls:'subPanelTabs', children:[ 71 {tag:'div', cls:'subPanelTabs', children:[
72 {tag:'ul', children:[ 72 {tag:'ul', children:[
73 {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'},
74 {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'}]},
75 {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'}]},
76 {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'}]}
77 ]} 77 ]}
78 ]} 78 ]}
79 ]}, 79 ]},
80 {tag:'div', cls:'body', children:[ 80 {tag:'div', cls:'body', children:[
81 {tag:'div', cls:'accountPanel', children:[ 81 {tag:'div', cls:'accountPanel', children:[
82 {tag:'div', cls:'subPanelContent', children:[ 82 {tag:'div', cls:'subPanelContent', children:[
83 {tag:'ul', children:[ 83 {tag:'ul', children:[
84 {tag:'li', id:this.getId('passwordGeneratorPanel'),children:[ 84 {tag:'li', id:this.getId('passwordGeneratorPanel'),children:[
85 {tag:'h3', html:"Password generator"} 85 // {tag:'h3', html:"Password generator"}
86 ]}, 86 ]},
87 {tag:'li', id:this.getId('bookmarkletPanel'),children:[ 87 {tag:'li', id:this.getId('bookmarkletPanel'),children:[
88 {tag:'h3', html:"Bookmarklet"} 88 // {tag:'h3', html:"Bookmarklet"}
89 ]}, 89 ]},
90 {tag:'li', id:this.getId('compactEditionPanel'), children:[ 90 {tag:'li', id:this.getId('compactEditionPanel'), children:[
91 {tag:'h3', html:"Compact edition"} 91 // {tag:'h3', html:"Compact edition"}
92 ]}, 92 ]},
93 {tag:'li', id:this.getId('httpAuthPanel'), children:[ 93 {tag:'li', id:this.getId('httpAuthPanel'), children:[
94 {tag:'h3', html:"HTTP Auth"} 94 // {tag:'h3', html:"HTTP Auth"}
95 ]} 95 ]}
96 ]} 96 ]}
97 ]} 97 ]}
98 ]} 98 ]}
99 ]}, 99 ]},
100 {tag:'div', cls:'footer'} 100 {tag:'div', cls:'footer'}
101 ]); 101 ]);
102 102
103 this.tabPanelController().setup({selected:this.initiallySelectedTab()}); 103 this.tabPanelController().setup({selected:this.initiallySelectedTab()});
104 }, 104 },
105 105
106 //------------------------------------------------------------------------- 106 //-------------------------------------------------------------------------
107 107
108 108
109 __syntaxFix__: "syntax fix" 109 __syntaxFix__: "syntax fix"
110}); 110});
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 9a0e744..1ab2e69 100644
--- a/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js
+++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Controllers/AppController.js
@@ -210,51 +210,53 @@ MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.AppController.prototype, {
210 210
211 'run': function(args) { 211 'run': function(args) {
212 var deferredResult; 212 var deferredResult;
213 varslot; 213 varslot;
214 varpage; 214 varpage;
215 var user; 215 var user;
216 216
217 slot = args.slot; 217 slot = args.slot;
218 user = args.user; 218 user = args.user;
219 219
220 this.setUser(user); 220 this.setUser(user);
221 221
222 slot.setContent(this.appPage()); 222 slot.setContent(this.appPage());
223 223
224 this.appPage().slotNamed('userInfoBox').setContent(this.userInfoBox()); 224 this.appPage().slotNamed('userInfoBox').setContent(this.userInfoBox());
225 this.appPage().slotNamed('tabSidePanel').setContent(this.tabSidePanel()); 225 this.appPage().slotNamed('tabSidePanel').setContent(this.tabSidePanel());
226 226
227 this.appPage().slotNamed('accountPanel').setContent(this.accountPanel()); 227 this.appPage().slotNamed('accountPanel').setContent(this.accountPanel());
228 this.appPage().slotNamed('dataPanel').setContent(this.dataPanel()); 228 this.appPage().slotNamed('dataPanel').setContent(this.dataPanel());
229 this.appPage().slotNamed('toolsPanel').setContent(this.toolsPanel()); 229 this.appPage().slotNamed('toolsPanel').setContent(this.toolsPanel());
230 230
231 this.hideAllAppPageTabSlots(); 231 this.hideAllAppPageTabSlots();
232 this.appPage().showSlot(this.slotNameForTab('cards')); 232 this.appPage().showSlot(this.slotNameForTab('cards'));
233 233
234 MochiKit.Signal.connect(this.tabSidePanel(), 'tabSelected',this, 'handleTabSelected'); 234 MochiKit.Signal.connect(this.tabSidePanel(), 'tabSelected', this, 'handleTabSelected');
235 MochiKit.Signal.connect(this.tabSidePanel(), 'addCard', this, 'handleAddCard'); 235 MochiKit.Signal.connect(this.tabSidePanel(), 'addCard', this, 'handleAddCard');
236 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'addCard', this, 'handleAddCard'); 236 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'addCard', this, 'handleAddCard');
237
238 MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'downloadOfflineCopy',this, 'handleDownloadOfflineCopy');
237 239
238 deferredResult = new Clipperz.Async.Deferred("AppController.run", {trace:false}); 240 deferredResult = new Clipperz.Async.Deferred("AppController.run", {trace:false});
239 241
240 deferredResult.addMethod(this.cardsController(), 'run', {slot:this.appPage().slotNamed('cardGrid'), user:user}); 242 deferredResult.addMethod(this.cardsController(), 'run', {slot:this.appPage().slotNamed('cardGrid'), user:user});
241 // deferredResult.addMethod(this.directLoginsController(), 'run', {slot:this.appPage().slotNamed('directLoginGrid'), user:user}); 243 // deferredResult.addMethod(this.directLoginsController(), 'run', {slot:this.appPage().slotNamed('directLoginGrid'), user:user});
242 deferredResult.addMethod(this, 'populateUserInfo'); 244 deferredResult.addMethod(this, 'populateUserInfo');
243 245
244 deferredResult.addCallback(MochiKit.Visual.ScrollTo, 'miscLinks', {duration:0}); 246 deferredResult.addCallback(MochiKit.Visual.ScrollTo, 'miscLinks', {duration:0});
245 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN'); 247 deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'CARDS_CONTROLLER_DID_RUN');
246 deferredResult.addMethod(this.tabSidePanel(), 'selectTab', 'cards'); 248 deferredResult.addMethod(this.tabSidePanel(), 'selectTab', 'cards');
247 deferredResult.callback(); 249 deferredResult.callback();
248 }, 250 },
249 251
250 //----------------------------------------------------------------------------- 252 //-----------------------------------------------------------------------------
251 253
252 'handleTabSelected': function (selectedTabName) { 254 'handleTabSelected': function (selectedTabName) {
253 var aTabName; 255 var aTabName;
254 var aSlotName; 256 var aSlotName;
255 257
256//Clipperz.log(">>> AppController.handleTabSelected", selectedTabName); 258//Clipperz.log(">>> AppController.handleTabSelected", selectedTabName);
257 this.hideAllAppPageTabSlots(); 259 this.hideAllAppPageTabSlots();
258 this.appPage().showSlot(this.slotNameForTab(selectedTabName)); 260 this.appPage().showSlot(this.slotNameForTab(selectedTabName));
259 261
260 switch (selectedTabName) { 262 switch (selectedTabName) {
@@ -300,27 +302,50 @@ MochiKit.Base.update(Clipperz.PM.UI.Web.Controllers.AppController.prototype, {
300 return deferredResult; 302 return deferredResult;
301 }, 303 },
302 304
303 //----------------------------------------------------------------------------- 305 //-----------------------------------------------------------------------------
304 306
305 'handleLock': function (anEvent) { 307 'handleLock': function (anEvent) {
306 return Clipperz.Async.callbacks("AppController.handleLock", [ 308 return Clipperz.Async.callbacks("AppController.handleLock", [
307 MochiKit.Base.method(this.cardsController(), 'deleteAllCleanTextData'), 309 MochiKit.Base.method(this.cardsController(), 'deleteAllCleanTextData'),
308 MochiKit.Base.method(this.user(), 'lock') 310 MochiKit.Base.method(this.user(), 'lock')
309 ], {trace:false}); 311 ], {trace:false});
310 }, 312 },
311 313
312 //............................................................................. 314 //.............................................................................
313 315
314 'handleUnlock': function (anEvent) { 316 'handleUnlock': function (anEvent) {
315 return Clipperz.Async.callbacks("AppController.handleUnock", [ 317 return Clipperz.Async.callbacks("AppController.handleUnock", [
316 MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress'), 318 MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'initProgress'),
317 MochiKit.Base.method(this.user(), 'login'), 319 MochiKit.Base.method(this.user(), 'login'),
318 MochiKit.Base.method(this.cardsController(), 'focus'), 320 MochiKit.Base.method(this.cardsController(), 'focus'),
319 MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'progressDone'), 321 MochiKit.Base.partial(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'progressDone'),
320 MochiKit.Base.method(this.userInfoBox(), 'unlock') 322 MochiKit.Base.method(this.userInfoBox(), 'unlock')
321 ], {trace:false}); 323 ], {trace:false});
322 }, 324 },
323 325
326 'handleDownloadOfflineCopy': function (anEvent) {
327console.log("AppController.handleDownloadOfflineCopy");
328 var downloadHref;
329
330 downloadHref = window.location.href.replace(/\/[^\/]*$/,'') + Clipperz_dumpUrl;
331
332 if (Clipperz_IEisBroken == true) {
333 window.open(downloadHref, "");
334 } else {
335 vardeferredResult;
336 var newWindow;
337
338 newWindow = window.open("", "");
339
340 deferredResult = new Clipperz.Async.Deferred("AppController.handleDownloadOfflineCopy", {trace:true});
341 deferredResult.addCallback(MochiKit.Base.method(this.user().connection(), 'message'), 'echo', {'echo':"echo"});
342 deferredResult.addCallback(function(aWindow) {
343 aWindow.location.href = downloadHref;
344 }, newWindow);
345 deferredResult.callback();
346 }
347 },
348
324 //============================================================================= 349 //=============================================================================
325 __syntaxFix__: "syntax fix" 350 __syntaxFix__: "syntax fix"
326}); 351});