Diffstat (limited to 'frontend/gamma/js/Clipperz/PM/UI/Mobile/Components') (more/less context) (ignore whitespace changes)
3 files changed, 30 insertions, 51 deletions
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardDetail.js b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardDetail.js index 32dfa63..abf4758 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardDetail.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardDetail.js | |||
@@ -1,299 +1,293 @@ | |||
1 | /* | 1 | /* |
2 | 2 | ||
3 | Copyright 2008-2011 Clipperz Srl | 3 | Copyright 2008-2013 Clipperz Srl |
4 | 4 | ||
5 | This file is part of Clipperz Community Edition. | 5 | This file is part of Clipperz, the online password manager. |
6 | Clipperz Community Edition is an online password manager. | ||
7 | For further information about its features and functionalities please | 6 | For further information about its features and functionalities please |
8 | refer to http://www.clipperz.com. | 7 | refer to http://www.clipperz.com. |
9 | 8 | ||
10 | * Clipperz Community Edition is free software: you can redistribute | 9 | * Clipperz is free software: you can redistribute it and/or modify it |
11 | it and/or modify it under the terms of the GNU Affero General Public | 10 | under the terms of the GNU Affero General Public License as published |
12 | License as published by the Free Software Foundation, either version | 11 | by the Free Software Foundation, either version 3 of the License, or |
13 | 3 of the License, or (at your option) any later version. | 12 | (at your option) any later version. |
14 | 13 | ||
15 | * Clipperz Community Edition is distributed in the hope that it will | 14 | * Clipperz is distributed in the hope that it will be useful, but |
16 | be useful, but WITHOUT ANY WARRANTY; without even the implied | 15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
18 | See the GNU Affero General Public License for more details. | 17 | See the GNU Affero General Public License for more details. |
19 | 18 | ||
20 | * You should have received a copy of the GNU Affero General Public | 19 | * You should have received a copy of the GNU Affero General Public |
21 | License along with Clipperz Community Edition. If not, see | 20 | License along with Clipperz. If not, see http://www.gnu.org/licenses/. |
22 | <http://www.gnu.org/licenses/>. | ||
23 | 21 | ||
24 | */ | 22 | */ |
25 | 23 | ||
26 | Clipperz.Base.module('Clipperz.PM.UI.Mobile.Components'); | 24 | Clipperz.Base.module('Clipperz.PM.UI.Mobile.Components'); |
27 | 25 | ||
28 | Clipperz.PM.UI.Mobile.Components.CardDetail = function(args) { | 26 | Clipperz.PM.UI.Mobile.Components.CardDetail = function(args) { |
29 | args = args || {}; | 27 | args = args || {}; |
30 | 28 | ||
31 | Clipperz.PM.UI.Mobile.Components.CardDetail.superclass.constructor.apply(this, arguments); | 29 | Clipperz.PM.UI.Mobile.Components.CardDetail.superclass.constructor.apply(this, arguments); |
32 | 30 | ||
33 | //this._cardReference = null; | 31 | //this._cardReference = null; |
34 | 32 | ||
35 | return this; | 33 | return this; |
36 | } | 34 | } |
37 | 35 | ||
38 | //============================================================================= | 36 | //============================================================================= |
39 | 37 | ||
40 | Clipperz.Base.extend(Clipperz.PM.UI.Mobile.Components.CardDetail, Clipperz.PM.UI.Common.Components.BaseComponent, { | 38 | Clipperz.Base.extend(Clipperz.PM.UI.Mobile.Components.CardDetail, Clipperz.PM.UI.Common.Components.BaseComponent, { |
41 | 39 | ||
42 | //------------------------------------------------------------------------- | 40 | //------------------------------------------------------------------------- |
43 | 41 | ||
44 | 'toString': function () { | 42 | 'toString': function () { |
45 | return "Clipperz.PM.UI.Mobile.Components.CardDetail component"; | 43 | return "Clipperz.PM.UI.Mobile.Components.CardDetail component"; |
46 | }, | 44 | }, |
47 | 45 | ||
48 | //------------------------------------------------------------------------- | 46 | //------------------------------------------------------------------------- |
49 | /* | 47 | /* |
50 | 'cardReference': function () { | 48 | 'cardReference': function () { |
51 | return this._cardReference; | 49 | return this._cardReference; |
52 | }, | 50 | }, |
53 | 51 | ||
54 | 'setCardReference': function (aValue) { | 52 | 'setCardReference': function (aValue) { |
55 | this._cardReference = aValue; | 53 | this._cardReference = aValue; |
56 | }, | 54 | }, |
57 | */ | 55 | */ |
58 | //------------------------------------------------------------------------- | 56 | //------------------------------------------------------------------------- |
59 | 57 | ||
60 | 'renderSelf': function () { | 58 | 'renderSelf': function () { |
61 | console.log("CardDetail.renderSelf"); | ||
62 | this.append(this.element(), {tag:'div', cls:'cardDetail', children:[ | 59 | this.append(this.element(), {tag:'div', cls:'cardDetail', children:[ |
63 | {tag:'div', cls:'toolbar', children:[ | 60 | {tag:'div', cls:'toolbar', children:[ |
64 | {tag:'a', href:'#', cls:'back', html:"List"}, | 61 | {tag:'a', href:'#', cls:'back', html:"List"}, |
65 | {tag:'h1', id:this.getId('cardTitle'), html:"…"} | 62 | {tag:'h1', id:this.getId('cardTitle'), html:"…"} |
66 | ]}, | 63 | ]}, |
67 | {tag:'div', cls:'scroll', id:this.getId('cardDetails'), children:[ | 64 | {tag:'div', cls:'scroll', id:this.getId('cardDetails'), children:[ |
68 | ]} | 65 | ]} |
69 | ]}); | 66 | ]}); |
70 | }, | 67 | }, |
71 | /* | 68 | /* |
72 | 'renderSelf': function() { | 69 | 'renderSelf': function() { |
73 | this.append(this.element(), [ | 70 | this.append(this.element(), [ |
74 | {tag:'div', cls:'cardDetail', id:this.getId('cardDetail'), children:[ | 71 | {tag:'div', cls:'cardDetail', id:this.getId('cardDetail'), children:[ |
75 | {tag:'div', id:this.getId('progressBar')} //, | 72 | {tag:'div', id:this.getId('progressBar')} //, |
76 | ]} | 73 | ]} |
77 | ]); | 74 | ]); |
78 | 75 | ||
79 | this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); | 76 | this.addComponent(new Clipperz.PM.UI.Common.Components.ProgressBar({'element':this.getElement('progressBar')})); |
80 | MochiKit.Signal.signal(Clipperz.PM.UI.Common.Controllers.ProgressBarController.defaultController, 'updateProgress', 0); | 77 | MochiKit.Signal.signal(Clipperz.PM.UI.Common.Controllers.ProgressBarController.defaultController, 'updateProgress', 0); |
81 | }, | 78 | }, |
82 | */ | 79 | */ |
83 | 80 | ||
84 | 'setTitle': function (aValue) { | 81 | 'setTitle': function (aValue) { |
85 | this.getElement('cardTitle').innerHTML = aValue; | 82 | this.getElement('cardTitle').innerHTML = aValue; |
86 | }, | 83 | }, |
87 | 84 | ||
88 | 'fieldListElement': function () { | 85 | 'fieldListElement': function () { |
89 | varresult; | 86 | varresult; |
90 | 87 | ||
91 | result = this.getElement('fieldList'); | 88 | result = this.getElement('fieldList'); |
92 | if (result == null) { | 89 | if (result == null) { |
93 | result = this.append(this.getElement('cardDetails'), {tag:'ul', cls:'rounded', id:this.getId('fieldList')}); | 90 | result = this.append(this.getElement('cardDetails'), {tag:'ul', cls:'rounded', id:this.getId('fieldList')}); |
94 | } | 91 | } |
95 | 92 | ||
96 | return result; | 93 | return result; |
97 | }, | 94 | }, |
98 | 95 | ||
99 | 'renderFieldValues': function (someFieldValues) { | 96 | 'renderFieldValues': function (someFieldValues) { |
100 | varfieldClass; | 97 | varfieldClass; |
101 | 98 | ||
102 | if ((someFieldValues['actionType'] != 'NONE') || (someFieldValues['label'] != '') && (someFieldValues['value'] != '')) { | 99 | if ((someFieldValues['actionType'] != 'NONE') || (someFieldValues['label'] != '') && (someFieldValues['value'] != '')) { |
103 | if (someFieldValues['isHidden'] == true) { | 100 | if (someFieldValues['isHidden'] == true) { |
104 | fieldClass = 'password'; | 101 | fieldClass = 'password'; |
105 | } else { | 102 | } else { |
106 | fieldClass = ''; | 103 | fieldClass = ''; |
107 | } | 104 | } |
108 | 105 | ||
109 | this.append(this.fieldListElement(), {tag:'li', cls:'cardField', children:[ | 106 | this.append(this.fieldListElement(), {tag:'li', cls:'cardField', children:[ |
110 | {tag:'a', href:'#', cls:fieldClass, html:someFieldValues['value'], children:[ | 107 | {tag:'a', href:'#', cls:fieldClass, html:someFieldValues['value'], children:[ |
111 | {tag:'small', cls:'label', html:someFieldValues['label']} | 108 | {tag:'small', cls:'label', html:someFieldValues['label']} |
112 | ]} | 109 | ]} |
113 | ]}) | 110 | ]}) |
114 | } | 111 | } |
115 | }, | 112 | }, |
116 | 113 | ||
117 | 'addField': function (aField) { | 114 | 'addField': function (aField) { |
118 | var deferredResult; | 115 | var deferredResult; |
119 | varfieldValues; | 116 | varfieldValues; |
120 | 117 | ||
121 | fieldValues = {}; | 118 | fieldValues = {}; |
122 | deferredResult = new Clipperz.Async.Deferred("CardDetail.addField", {trace:false}); | 119 | deferredResult = new Clipperz.Async.Deferred("CardDetail.addField", {trace:false}); |
123 | deferredResult.addMethod(aField, 'label'); | 120 | deferredResult.addMethod(aField, 'label'); |
124 | deferredResult.addCallback(function (aValue) { fieldValues['label'] = aValue; }); | 121 | deferredResult.addCallback(function (aValue) { fieldValues['label'] = aValue; }); |
125 | deferredResult.addMethod(aField, 'value'); | 122 | deferredResult.addMethod(aField, 'value'); |
126 | deferredResult.addCallback(function (aValue) { fieldValues['value'] = aValue; }); | 123 | deferredResult.addCallback(function (aValue) { fieldValues['value'] = aValue; }); |
127 | deferredResult.addMethod(aField, 'actionType'); | 124 | deferredResult.addMethod(aField, 'actionType'); |
128 | deferredResult.addCallback(function (aValue) { fieldValues['actionType'] = aValue; }); | 125 | deferredResult.addCallback(function (aValue) { fieldValues['actionType'] = aValue; }); |
129 | deferredResult.addMethod(aField, 'isHidden'); | 126 | deferredResult.addMethod(aField, 'isHidden'); |
130 | deferredResult.addCallback(function (aValue) { fieldValues['isHidden'] = aValue; }); | 127 | deferredResult.addCallback(function (aValue) { fieldValues['isHidden'] = aValue; }); |
131 | deferredResult.addMethod(this, 'renderFieldValues', fieldValues); | 128 | deferredResult.addMethod(this, 'renderFieldValues', fieldValues); |
132 | deferredResult.callback(); | 129 | deferredResult.callback(); |
133 | 130 | ||
134 | return deferredResult; | 131 | return deferredResult; |
135 | }, | 132 | }, |
136 | 133 | ||
137 | //------------------------------------------------------------------------- | 134 | //------------------------------------------------------------------------- |
138 | 135 | ||
139 | 'directLoginElement': function () { | 136 | 'directLoginElement': function () { |
140 | varresult; | 137 | varresult; |
141 | 138 | ||
142 | result = this.getElement('directLoginList'); | 139 | result = this.getElement('directLoginList'); |
143 | if (result == null) { | 140 | if (result == null) { |
144 | this.append(this.getElement('cardDetails'), {tag:'h2', html:"Direct login"}); | 141 | this.append(this.getElement('cardDetails'), {tag:'h2', html:"Direct login"}); |
145 | result = this.append(this.getElement('cardDetails'), {tag:'ul', cls:'rounded', id:this.getId('directLoginList')}); | 142 | result = this.append(this.getElement('cardDetails'), {tag:'ul', cls:'rounded', id:this.getId('directLoginList')}); |
146 | } | 143 | } |
147 | 144 | ||
148 | return result; | 145 | return result; |
149 | }, | 146 | }, |
150 | 147 | ||
151 | 'addDirectLogin': function (aDirectLogin) { | 148 | 'addDirectLogin': function (aDirectLogin) { |
152 | this.append(this.directLoginElement(), {tag:'li', cls:'directLogin forward', children:[ | 149 | this.append(this.directLoginElement(), {tag:'li', cls:'directLogin forward', children:[ |
153 | {tag:'a', href:'#', html:"direct login", children:[ | 150 | {tag:'a', href:'#', html:"direct login", children:[ |
154 | {tag:'small', cls:'favicon', children:[{tag:'img', cls:'favicon', src:'http://www.clipperz.com/favicon.ico'}]} | 151 | {tag:'small', cls:'favicon', children:[{tag:'img', cls:'favicon', src:'http://www.clipperz.com/favicon.ico'}]} |
155 | ]} | 152 | ]} |
156 | ]}) | 153 | ]}) |
157 | 154 | ||
158 | console.log("ADD DIRECT LOGIN", aDirectLogin); | ||
159 | }, | 155 | }, |
160 | 156 | ||
161 | //========================================================================= | 157 | //========================================================================= |
162 | 158 | ||
163 | 'showCard': function (aCard) { | 159 | 'showCard': function (aCard) { |
164 | var deferredResult; | 160 | var deferredResult; |
165 | 161 | ||
166 | // this.render(); | 162 | // this.render(); |
167 | 163 | ||
168 | console.log("CardDetail.showCard", aCard); | ||
169 | deferredResult = new Clipperz.Async.Deferred("CardDetail.showCard", {trace:false}); | 164 | deferredResult = new Clipperz.Async.Deferred("CardDetail.showCard", {trace:false}); |
170 | deferredResult.addMethod(aCard, 'label'); | 165 | deferredResult.addMethod(aCard, 'label'); |
171 | deferredResult.addMethod(this, 'setTitle'); | 166 | deferredResult.addMethod(this, 'setTitle'); |
172 | 167 | ||
173 | deferredResult.addMethod(aCard, 'fields'); | 168 | deferredResult.addMethod(aCard, 'fields'); |
174 | deferredResult.addCallback(MochiKit.Base.values); | 169 | deferredResult.addCallback(MochiKit.Base.values); |
175 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'addField')); | 170 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'addField')); |
176 | 171 | ||
177 | deferredResult.addMethod(aCard, 'directLogins'); | 172 | deferredResult.addMethod(aCard, 'directLogins'); |
178 | deferredResult.addCallback(MochiKit.Base.values); | 173 | deferredResult.addCallback(MochiKit.Base.values); |
179 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'addDirectLogin')); | 174 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'addDirectLogin')); |
180 | 175 | ||
181 | 176 | ||
182 | deferredResult.callback(); | 177 | deferredResult.callback(); |
183 | 178 | ||
184 | return deferredResult; | 179 | return deferredResult; |
185 | // return Clipperz.Async.callbacks("CardDialogController.updateComponentState", [ | 180 | // return Clipperz.Async.callbacks("CardDialogController.updateComponentState", [ |
186 | // MochiKit.Base.method(this.record(), 'hasPendingChanges'), | 181 | // MochiKit.Base.method(this.record(), 'hasPendingChanges'), |
187 | // MochiKit.Base.method(this.cardDialogComponent(), 'setShouldEnableSaving'), | 182 | // MochiKit.Base.method(this.cardDialogComponent(), 'setShouldEnableSaving'), |
188 | // | 183 | // |
189 | // MochiKit.Base.method(this.record(), 'label'), | 184 | // MochiKit.Base.method(this.record(), 'label'), |
190 | // MochiKit.Base.method(this.cardDialogComponent(), 'setTitle'), | 185 | // MochiKit.Base.method(this.cardDialogComponent(), 'setTitle'), |
191 | // MochiKit.Base.method(this.record(), 'notes'), | 186 | // MochiKit.Base.method(this.record(), 'notes'), |
192 | // MochiKit.Base.method(this.cardDialogComponent(), 'setNotes'), | 187 | // MochiKit.Base.method(this.cardDialogComponent(), 'setNotes'), |
193 | // | 188 | // |
194 | // MochiKit.Base.method(this.record(), 'fields'), | 189 | // MochiKit.Base.method(this.record(), 'fields'), |
195 | // MochiKit.Base.values, | 190 | // MochiKit.Base.values, |
196 | // MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addCardDialogComponentWithField')), | 191 | // MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addCardDialogComponentWithField')), |
197 | // | 192 | // |
198 | // MochiKit.Base.method(this.record(), 'directLogins'), | 193 | // MochiKit.Base.method(this.record(), 'directLogins'), |
199 | // MochiKit.Base.values, | 194 | // MochiKit.Base.values, |
200 | // MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addCardDialogComponentWithDirectLogin')), | 195 | // MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addCardDialogComponentWithDirectLogin')), |
201 | // | 196 | // |
202 | // MochiKit.Base.method(this.cardDialogComponent(), 'resetNewFieldInputs'), | 197 | // MochiKit.Base.method(this.cardDialogComponent(), 'resetNewFieldInputs'), |
203 | // MochiKit.Base.noop | 198 | // MochiKit.Base.noop |
204 | // ], {trace:false}); | 199 | // ], {trace:false}); |
205 | 200 | ||
206 | }, | 201 | }, |
207 | 202 | ||
208 | //========================================================================= | 203 | //========================================================================= |
209 | 204 | ||
210 | 'showCardDetails': function (someData) { | 205 | 'showCardDetails': function (someData) { |
211 | this.element().innerHTML = ''; | 206 | this.element().innerHTML = ''; |
212 | this.append(this.element(), [ | 207 | this.append(this.element(), [ |
213 | {tag:'fieldset', id:this.getId('fields'), children:MochiKit.Base.map(function (aFieldData) { | 208 | {tag:'fieldset', id:this.getId('fields'), children:MochiKit.Base.map(function (aFieldData) { |
214 | return {tag:'div', cls:'row', children:[ | 209 | return {tag:'div', cls:'row', children:[ |
215 | {tag:'label', html:aFieldData['label']}, | 210 | {tag:'label', html:aFieldData['label']}, |
216 | // {tag:'span', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), html:aFieldData['value']} | 211 | // {tag:'span', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), html:aFieldData['value']} |
217 | {tag:'div', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), children:[ | 212 | {tag:'div', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), children:[ |
218 | {tag:'div', children:[{tag:'p', html:aFieldData['value']}]} | 213 | {tag:'div', children:[{tag:'p', html:aFieldData['value']}]} |
219 | ]} | 214 | ]} |
220 | // {tag:'input', type:'text', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), value:aFieldData['value'], disabled:true} | 215 | // {tag:'input', type:'text', cls:('fieldValue ' + (aFieldData['isHidden']? 'password' : 'text')), value:aFieldData['value'], disabled:true} |
221 | 216 | ||
222 | ]} | 217 | ]} |
223 | }, someData['fields'])} | 218 | }, someData['fields'])} |
224 | ]); | 219 | ]); |
225 | 220 | ||
226 | MochiKit.Iter.forEach(MochiKit.Selector.findChildElements(this.element(), ['span.password']), MochiKit.Base.bind(function (aPasswordElement) { | 221 | MochiKit.Iter.forEach(MochiKit.Selector.findChildElements(this.element(), ['span.password']), MochiKit.Base.bind(function (aPasswordElement) { |
227 | MochiKit.Signal.connect(aPasswordElement, 'onclick', function (anEvent) { alert(MochiKit.DOM.scrapeText(anEvent.src())); }) | 222 | MochiKit.Signal.connect(aPasswordElement, 'onclick', function (anEvent) { alert(MochiKit.DOM.scrapeText(anEvent.src())); }) |
228 | }, this)); | 223 | }, this)); |
229 | 224 | ||
230 | if (someData['directLogins'].length > 0) { | 225 | if (someData['directLogins'].length > 0) { |
231 | this.append(this.element(), [ | 226 | this.append(this.element(), [ |
232 | {tag:'h2', html:"Direct logins"}, | 227 | {tag:'h2', html:"Direct logins"}, |
233 | {tag:'fieldset', id:this.getId('directLogins'), children:MochiKit.Base.map(function (aDirectLoginData) { | 228 | {tag:'fieldset', id:this.getId('directLogins'), children:MochiKit.Base.map(function (aDirectLoginData) { |
234 | return {tag:'div', cls:'row', id:('directLogin_' + aDirectLoginData['_reference']), children:[ | 229 | return {tag:'div', cls:'row', id:('directLogin_' + aDirectLoginData['_reference']), children:[ |
235 | {tag:'img', cls:'favicon', src:aDirectLoginData['favicon']}, | 230 | {tag:'img', cls:'favicon', src:aDirectLoginData['favicon']}, |
236 | // {tag:'input', cls:'directLogin', disabled:'disabled', type:'text', name:aDirectLoginData['label'], value:aDirectLoginData['label']} | 231 | // {tag:'input', cls:'directLogin', disabled:'disabled', type:'text', name:aDirectLoginData['label'], value:aDirectLoginData['label']} |
237 | {tag:'span', cls:'directLogin', html:aDirectLoginData['label']} | 232 | {tag:'span', cls:'directLogin', html:aDirectLoginData['label']} |
238 | ]} | 233 | ]} |
239 | }, someData['directLogins'])} | 234 | }, someData['directLogins'])} |
240 | ]); | 235 | ]); |
241 | 236 | ||
242 | MochiKit.Base.map(MochiKit.Base.bind(function (aRowNode) { | 237 | MochiKit.Base.map(MochiKit.Base.bind(function (aRowNode) { |
243 | MochiKit.Signal.connect(aRowNode, 'onclick', this, 'directLoginClickHandler'); | 238 | MochiKit.Signal.connect(aRowNode, 'onclick', this, 'directLoginClickHandler'); |
244 | }, this), | 239 | }, this), |
245 | MochiKit.Selector.findChildElements(this.getElement('directLogins'), ['div.row']) | 240 | MochiKit.Selector.findChildElements(this.getElement('directLogins'), ['div.row']) |
246 | ) | 241 | ) |
247 | }; | 242 | }; |
248 | 243 | ||
249 | if (someData['notes'] != '') { | 244 | if (someData['notes'] != '') { |
250 | this.append(this.element(), [ | 245 | this.append(this.element(), [ |
251 | {tag:'h2', html:"Notes"}, | 246 | {tag:'h2', html:"Notes"}, |
252 | {tag:'fieldset', id:this.getId('fieldset'), children:[ | 247 | {tag:'fieldset', id:this.getId('fieldset'), children:[ |
253 | {tag:'div', cls:'row notes', children:[ | 248 | {tag:'div', cls:'row notes', children:[ |
254 | {tag:'span', html:someData['notes']} | 249 | {tag:'span', html:someData['notes']} |
255 | ]} | 250 | ]} |
256 | ]} | 251 | ]} |
257 | ]); | 252 | ]); |
258 | }; | 253 | }; |
259 | 254 | ||
260 | return true; | 255 | return true; |
261 | }, | 256 | }, |
262 | 257 | ||
263 | //------------------------------------------------------------------------- | 258 | //------------------------------------------------------------------------- |
264 | /* | 259 | /* |
265 | 'toggleClickHandler': function (anEvent) { | 260 | 'toggleClickHandler': function (anEvent) { |
266 | varnextState; | 261 | varnextState; |
267 | varfieldValue; | 262 | varfieldValue; |
268 | 263 | ||
269 | //console.log("TOGGLE"); | ||
270 | anEvent.preventDefault; | 264 | anEvent.preventDefault; |
271 | fieldValue = MochiKit.Selector.findChildElements(anEvent.src().parentNode.parentNode, ['span.password'])[0]; | 265 | fieldValue = MochiKit.Selector.findChildElements(anEvent.src().parentNode.parentNode, ['span.password'])[0]; |
272 | 266 | ||
273 | nextState = (MochiKit.DOM.getNodeAttribute(anEvent.src(), 'toggled') != 'true'); | 267 | nextState = (MochiKit.DOM.getNodeAttribute(anEvent.src(), 'toggled') != 'true'); |
274 | if (nextState) { | 268 | if (nextState) { |
275 | MochiKit.DOM.removeElementClass(fieldValue, 'clear'); | 269 | MochiKit.DOM.removeElementClass(fieldValue, 'clear'); |
276 | } else { | 270 | } else { |
277 | MochiKit.DOM.addElementClass(fieldValue, 'clear'); | 271 | MochiKit.DOM.addElementClass(fieldValue, 'clear'); |
278 | } | 272 | } |
279 | 273 | ||
280 | MochiKit.DOM.setNodeAttribute(anEvent.src(), 'toggled', nextState); | 274 | MochiKit.DOM.setNodeAttribute(anEvent.src(), 'toggled', nextState); |
281 | }, | 275 | }, |
282 | * / | 276 | * / |
283 | //========================================================================= | 277 | //========================================================================= |
284 | /* | 278 | /* |
285 | 'directLoginClickHandler': function (anEvent) { | 279 | 'directLoginClickHandler': function (anEvent) { |
286 | anEvent.preventDefault(); | 280 | anEvent.preventDefault(); |
287 | 281 | ||
288 | if (/(directLogin_)/.test(anEvent.src().id)) { | 282 | if (/(directLogin_)/.test(anEvent.src().id)) { |
289 | var directLoginReference; | 283 | var directLoginReference; |
290 | 284 | ||
291 | directLoginReference = anEvent.src().id.match(/(directLogin_)(.*)/)[2]; | 285 | directLoginReference = anEvent.src().id.match(/(directLogin_)(.*)/)[2]; |
292 | MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectedDirectLogin', {cardReference:this.cardReference(), directLoginReference:directLoginReference}); | 286 | MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectedDirectLogin', {cardReference:this.cardReference(), directLoginReference:directLoginReference}); |
293 | } | 287 | } |
294 | }, | 288 | }, |
295 | */ | 289 | */ |
296 | //========================================================================= | 290 | //========================================================================= |
297 | 291 | ||
298 | __syntaxFix__: "syntax fix" | 292 | __syntaxFix__: "syntax fix" |
299 | }); | 293 | }); |
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardList.js b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardList.js index a4aa212..a0e4879 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardList.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/CardList.js | |||
@@ -1,254 +1,248 @@ | |||
1 | /* | 1 | /* |
2 | 2 | ||
3 | Copyright 2008-2011 Clipperz Srl | 3 | Copyright 2008-2013 Clipperz Srl |
4 | 4 | ||
5 | This file is part of Clipperz Community Edition. | 5 | This file is part of Clipperz, the online password manager. |
6 | Clipperz Community Edition is an online password manager. | ||
7 | For further information about its features and functionalities please | 6 | For further information about its features and functionalities please |
8 | refer to http://www.clipperz.com. | 7 | refer to http://www.clipperz.com. |
9 | 8 | ||
10 | * Clipperz Community Edition is free software: you can redistribute | 9 | * Clipperz is free software: you can redistribute it and/or modify it |
11 | it and/or modify it under the terms of the GNU Affero General Public | 10 | under the terms of the GNU Affero General Public License as published |
12 | License as published by the Free Software Foundation, either version | 11 | by the Free Software Foundation, either version 3 of the License, or |
13 | 3 of the License, or (at your option) any later version. | 12 | (at your option) any later version. |
14 | 13 | ||
15 | * Clipperz Community Edition is distributed in the hope that it will | 14 | * Clipperz is distributed in the hope that it will be useful, but |
16 | be useful, but WITHOUT ANY WARRANTY; without even the implied | 15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
18 | See the GNU Affero General Public License for more details. | 17 | See the GNU Affero General Public License for more details. |
19 | 18 | ||
20 | * You should have received a copy of the GNU Affero General Public | 19 | * You should have received a copy of the GNU Affero General Public |
21 | License along with Clipperz Community Edition. If not, see | 20 | License along with Clipperz. If not, see http://www.gnu.org/licenses/. |
22 | <http://www.gnu.org/licenses/>. | ||
23 | 21 | ||
24 | */ | 22 | */ |
25 | 23 | ||
26 | Clipperz.Base.module('Clipperz.PM.UI.Mobile.Components'); | 24 | Clipperz.Base.module('Clipperz.PM.UI.Mobile.Components'); |
27 | 25 | ||
28 | Clipperz.PM.UI.Mobile.Components.CardList = function(args) { | 26 | Clipperz.PM.UI.Mobile.Components.CardList = function(args) { |
29 | args = args || {}; | 27 | args = args || {}; |
30 | 28 | ||
31 | Clipperz.PM.UI.Mobile.Components.CardList.superclass.constructor.apply(this, arguments); | 29 | Clipperz.PM.UI.Mobile.Components.CardList.superclass.constructor.apply(this, arguments); |
32 | 30 | ||
33 | this._cardDetail = null; | 31 | this._cardDetail = null; |
34 | 32 | ||
35 | return this; | 33 | return this; |
36 | } | 34 | } |
37 | 35 | ||
38 | //============================================================================= | 36 | //============================================================================= |
39 | 37 | ||
40 | Clipperz.Base.extend(Clipperz.PM.UI.Mobile.Components.CardList, Clipperz.PM.UI.Common.Components.BaseComponent, { | 38 | Clipperz.Base.extend(Clipperz.PM.UI.Mobile.Components.CardList, Clipperz.PM.UI.Common.Components.BaseComponent, { |
41 | 39 | ||
42 | //------------------------------------------------------------------------- | 40 | //------------------------------------------------------------------------- |
43 | 41 | ||
44 | 'toString': function () { | 42 | 'toString': function () { |
45 | return "Clipperz.PM.UI.Mobile.Components.CardList component"; | 43 | return "Clipperz.PM.UI.Mobile.Components.CardList component"; |
46 | }, | 44 | }, |
47 | 45 | ||
48 | //------------------------------------------------------------------------- | 46 | //------------------------------------------------------------------------- |
49 | 47 | ||
50 | 'renderSelf': function () { | 48 | 'renderSelf': function () { |
51 | this.append(this.element(), {tag:'div', cls:'cardList', children:[ | 49 | this.append(this.element(), {tag:'div', cls:'cardList', children:[ |
52 | {tag:'div', cls:'toolbar', children:[ | 50 | {tag:'div', cls:'toolbar', children:[ |
53 | {tag:'h1', html:"clipperz"}, | 51 | {tag:'h1', html:"clipperz"}, |
54 | // {tag:'input', name:'search', type:'search', autocomplete:'off', placeholder:"search", id:this.getId('search')}, | 52 | // {tag:'input', name:'search', type:'search', autocomplete:'off', placeholder:"search", id:this.getId('search')}, |
55 | {tag:'a', href:'#', id:'settings', cls:'button', html:"*"} | 53 | {tag:'a', href:'#', id:'settings', cls:'button', html:"*"} |
56 | ]}, | 54 | ]}, |
57 | {tag:'div', cls:'scroll', id:this.getId('listBox'), children:[ | 55 | {tag:'div', cls:'scroll', id:this.getId('listBox'), children:[ |
58 | {tag:'ul', cls:'rounded', id:this.getId('list'), children:[ | 56 | {tag:'ul', cls:'rounded', id:this.getId('list'), children:[ |
59 | {tag:'li', html:'loading'} | 57 | {tag:'li', html:'loading'} |
60 | ]} | 58 | ]} |
61 | ]} | 59 | ]} |
62 | ]}); | 60 | ]}); |
63 | 61 | ||
64 | MochiKit.Signal.connect(this.getElement('list'), 'onclick', this, 'cardSelectionHandler'); | 62 | MochiKit.Signal.connect(this.getElement('list'), 'onclick', this, 'cardSelectionHandler'); |
65 | MochiKit.Signal.connect(this.getElement('list'), 'ontouchstart',this, 'cardSelectionHandler'); | 63 | MochiKit.Signal.connect(this.getElement('list'), 'ontouchstart',this, 'cardSelectionHandler'); |
66 | // MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onsubmit', this,'searchHandler'); | 64 | // MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onsubmit', this,'searchHandler'); |
67 | // MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeydown', this,'searchHandler'); | 65 | // MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeydown', this,'searchHandler'); |
68 | // MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeyup', this,'searchHandler'); | 66 | // MochiKit.Signal.connect(this.getElement('cardListSearchForm'), 'onkeyup', this,'searchHandler'); |
69 | 67 | ||
70 | // MochiKit.Signal.connect(this.getElement('cardListPanel'), 'onclick', this,'cardListClickHandler'); | 68 | // MochiKit.Signal.connect(this.getElement('cardListPanel'), 'onclick', this,'cardListClickHandler'); |
71 | // MochiKit.Signal.connect('backButton', 'onclick', this,'backButtonClickHandler'); | 69 | // MochiKit.Signal.connect('backButton', 'onclick', this,'backButtonClickHandler'); |
72 | 70 | ||
73 | // MochiKit.Style.hideElement('backButton'); | 71 | // MochiKit.Style.hideElement('backButton'); |
74 | // MochiKit.Style.hideElement(this.getElement('cardDetail')); | 72 | // MochiKit.Style.hideElement(this.getElement('cardDetail')); |
75 | }, | 73 | }, |
76 | 74 | ||
77 | 'showCards': function (someCards) { | 75 | 'showCards': function (someCards) { |
78 | varcardListElement; | 76 | varcardListElement; |
79 | if (this.isFullyRendered() == false) { | 77 | if (this.isFullyRendered() == false) { |
80 | this.render(); | 78 | this.render(); |
81 | }; | 79 | }; |
82 | 80 | ||
83 | cardListElement = this.getElement('list') | 81 | cardListElement = this.getElement('list') |
84 | 82 | ||
85 | cardInfo = { | 83 | cardInfo = { |
86 | '_rowObject': MochiKit.Async.succeed, | 84 | '_rowObject': MochiKit.Async.succeed, |
87 | '_reference': MochiKit.Base.methodcaller('reference'), | 85 | '_reference': MochiKit.Base.methodcaller('reference'), |
88 | '_searchableContent':MochiKit.Base.methodcaller('searchableContent'), | 86 | '_searchableContent':MochiKit.Base.methodcaller('searchableContent'), |
89 | 'label': MochiKit.Base.methodcaller('label'), | 87 | 'label': MochiKit.Base.methodcaller('label'), |
90 | 'favicon': MochiKit.Base.methodcaller('favicon') | 88 | 'favicon': MochiKit.Base.methodcaller('favicon') |
91 | }; | 89 | }; |
92 | 90 | ||
93 | //console.log("someCards", someCards); | ||
94 | deferredResult = new Clipperz.Async.Deferred("CardList.showCards", {trace:false}); | 91 | deferredResult = new Clipperz.Async.Deferred("CardList.showCards", {trace:false}); |
95 | deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("CardList.value - collectResults", cardInfo, {trace:false})); | 92 | deferredResult.addCallback(MochiKit.Base.map, Clipperz.Async.collectResults("CardList.value - collectResults", cardInfo, {trace:false})); |
96 | deferredResult.addCallback(Clipperz.Async.collectAll); | 93 | deferredResult.addCallback(Clipperz.Async.collectAll); |
97 | deferredResult.addCallback(MochiKit.Base.methodcaller('sort', Clipperz.Base.caseInsensitiveKeyComparator('label'))); | 94 | deferredResult.addCallback(MochiKit.Base.methodcaller('sort', Clipperz.Base.caseInsensitiveKeyComparator('label'))); |
98 | deferredResult.addCallbackPass(MochiKit.DOM.replaceChildNodes, cardListElement); | 95 | deferredResult.addCallbackPass(MochiKit.DOM.replaceChildNodes, cardListElement); |
99 | // deferredResult.addCallbackPass(MochiKit.DOM.removeElementClass, cardListElement, 'loading'); | 96 | // deferredResult.addCallbackPass(MochiKit.DOM.removeElementClass, cardListElement, 'loading'); |
100 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'appendCardToList', cardListElement)); | 97 | deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'appendCardToList', cardListElement)); |
101 | deferredResult.callback(someCards); | 98 | deferredResult.callback(someCards); |
102 | }, | 99 | }, |
103 | 100 | ||
104 | 'appendCardToList': function (aCardListElement, aCardInfo) { | 101 | 'appendCardToList': function (aCardListElement, aCardInfo) { |
105 | //console.log("appendCardToList", aCardInfo); | ||
106 | this.append(aCardListElement, {tag:'li', cls:'cardListItem arrow', cardreference:aCardInfo['_reference'], children:[ | 102 | this.append(aCardListElement, {tag:'li', cls:'cardListItem arrow', cardreference:aCardInfo['_reference'], children:[ |
107 | {tag:'a', href:'#', html:aCardInfo['label'], children:[ | 103 | {tag:'a', href:'#', html:aCardInfo['label'], children:[ |
108 | {tag:'small', cls:'favicon', children:[{tag:'img', cls:'favicon', src:aCardInfo['favicon']}]} | 104 | {tag:'small', cls:'favicon', children:[{tag:'img', cls:'favicon', src:aCardInfo['favicon']}]} |
109 | ]} | 105 | ]} |
110 | ]}); | 106 | ]}); |
111 | }, | 107 | }, |
112 | 108 | ||
113 | 'cardSelectionHandler': function (anEvent) { | 109 | 'cardSelectionHandler': function (anEvent) { |
114 | var listElement; | 110 | var listElement; |
115 | varcardReference; | 111 | varcardReference; |
116 | 112 | ||
117 | anEvent.preventDefault(); | 113 | anEvent.preventDefault(); |
118 | 114 | ||
119 | listElement = anEvent.target(); | 115 | listElement = anEvent.target(); |
120 | if (MochiKit.DOM.getNodeAttribute(listElement, 'cardreference') == null) { | 116 | if (MochiKit.DOM.getNodeAttribute(listElement, 'cardreference') == null) { |
121 | listElement = MochiKit.DOM.getFirstParentByTagAndClassName(anEvent.target(), tagName='li', className='cardListItem'); | 117 | listElement = MochiKit.DOM.getFirstParentByTagAndClassName(anEvent.target(), tagName='li', className='cardListItem'); |
122 | } | 118 | } |
123 | cardReference = MochiKit.DOM.getNodeAttribute(listElement, 'cardreference'); | 119 | cardReference = MochiKit.DOM.getNodeAttribute(listElement, 'cardreference'); |
124 | console.log("###", listElement, cardReference); | ||
125 | //TODO: Notify card with reference MochiKit.DOM.getNodeAttribute(listElement, 'cardreference') has been selected | 120 | //TODO: Notify card with reference MochiKit.DOM.getNodeAttribute(listElement, 'cardreference') has been selected |
126 | MochiKit.Signal.signal(this, 'selectedCard', cardReference); | 121 | MochiKit.Signal.signal(this, 'selectedCard', cardReference); |
127 | }, | 122 | }, |
128 | 123 | ||
129 | //------------------------------------------------------------------------- | 124 | //------------------------------------------------------------------------- |
130 | /* | 125 | /* |
131 | 'searchHandler': function (anEvent) { | 126 | 'searchHandler': function (anEvent) { |
132 | if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ENTER')) { //RETURN | 127 | if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ENTER')) { //RETURN |
133 | anEvent.preventDefault(); | 128 | anEvent.preventDefault(); |
134 | } else { | 129 | } else { |
135 | if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ESCAPE')) { | 130 | if ((typeof(anEvent.key()) != 'undefined') && (anEvent.key().string == 'KEY_ESCAPE')) { |
136 | anEvent.target().value = ""; | 131 | anEvent.target().value = ""; |
137 | } | 132 | } |
138 | 133 | ||
139 | if (anEvent.type() == 'keyup') { | 134 | if (anEvent.type() == 'keyup') { |
140 | MochiKit.Signal.signal(this, 'searchEvent', anEvent.target().value); | 135 | MochiKit.Signal.signal(this, 'searchEvent', anEvent.target().value); |
141 | } | 136 | } |
142 | } | 137 | } |
143 | }, | 138 | }, |
144 | 139 | ||
145 | //------------------------------------------------------------------------- | 140 | //------------------------------------------------------------------------- |
146 | 141 | ||
147 | 'update': function (someObjects) { | 142 | 'update': function (someObjects) { |
148 | varcardListPanel; | 143 | varcardListPanel; |
149 | var i,c; | 144 | var i,c; |
150 | 145 | ||
151 | cardListPanel = this.getElement('cardListPanel'); | 146 | cardListPanel = this.getElement('cardListPanel'); |
152 | cardListPanel.innerHTML = ''; | 147 | cardListPanel.innerHTML = ''; |
153 | 148 | ||
154 | c = someObjects.length; | 149 | c = someObjects.length; |
155 | 150 | ||
156 | for (i=0; i<c; i++) { | 151 | for (i=0; i<c; i++) { |
157 | this.append(cardListPanel, {tag:'li', cls:'cardListItem', id:('cardListItem_' + someObjects[i]['_reference']), children:[ | 152 | this.append(cardListPanel, {tag:'li', cls:'cardListItem', id:('cardListItem_' + someObjects[i]['_reference']), children:[ |
158 | {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=')}, | 153 | {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=')}, |
159 | {tag:'a', id:('cardListReference_' + someObjects[i]['_reference']), href:'#', html:someObjects[i]['label']} | 154 | {tag:'a', id:('cardListReference_' + someObjects[i]['_reference']), href:'#', html:someObjects[i]['label']} |
160 | ]}) | 155 | ]}) |
161 | 156 | ||
162 | MochiKit.Signal.connect('cardListItem_' + someObjects[i]['_reference'], 'onclick', this, 'cardListClickHandler'); | 157 | MochiKit.Signal.connect('cardListItem_' + someObjects[i]['_reference'], 'onclick', this, 'cardListClickHandler'); |
163 | } | 158 | } |
164 | 159 | ||
165 | }, | 160 | }, |
166 | 161 | ||
167 | 'cardListClickHandler': function (anEvent) { | 162 | 'cardListClickHandler': function (anEvent) { |
168 | anEvent.preventDefault(); | 163 | anEvent.preventDefault(); |
169 | 164 | ||
170 | if (/(cardListReference_|cardListItem_)/.test(anEvent.target().id)) { | 165 | if (/(cardListReference_|cardListItem_)/.test(anEvent.target().id)) { |
171 | var cardListReference; | 166 | var cardListReference; |
172 | 167 | ||
173 | cardListReference = anEvent.target().id.match(/(cardListReference_|cardListItem_)(.*)/)[2]; | 168 | cardListReference = anEvent.target().id.match(/(cardListReference_|cardListItem_)(.*)/)[2]; |
174 | //console.log("Showing detail for card named", cardListReference); | ||
175 | MochiKit.Signal.signal(this, 'selectedCard', cardListReference); | 169 | MochiKit.Signal.signal(this, 'selectedCard', cardListReference); |
176 | } | 170 | } |
177 | }, | 171 | }, |
178 | 172 | ||
179 | //========================================================================= | 173 | //========================================================================= |
180 | 174 | ||
181 | 'cardDetail': function (someData) { | 175 | 'cardDetail': function (someData) { |
182 | if (this._cardDetail == null) { | 176 | if (this._cardDetail == null) { |
183 | this._cardDetail = new Clipperz.PM.UI.Mobile.Components.CardDetail({element:this.getElement('cardDetail')}); | 177 | this._cardDetail = new Clipperz.PM.UI.Mobile.Components.CardDetail({element:this.getElement('cardDetail')}); |
184 | } | 178 | } |
185 | 179 | ||
186 | return this._cardDetail; | 180 | return this._cardDetail; |
187 | }, | 181 | }, |
188 | 182 | ||
189 | //------------------------------------------------------------------------- | 183 | //------------------------------------------------------------------------- |
190 | 184 | ||
191 | 'removeCardDetail': function () { | 185 | 'removeCardDetail': function () { |
192 | if (this._cardDetail != null) { | 186 | if (this._cardDetail != null) { |
193 | this._cardDetail.remove(); | 187 | this._cardDetail.remove(); |
194 | this._cardDetail = null; | 188 | this._cardDetail = null; |
195 | } | 189 | } |
196 | }, | 190 | }, |
197 | 191 | ||
198 | //========================================================================= | 192 | //========================================================================= |
199 | 193 | ||
200 | 'showCard': function (someData) { | 194 | 'showCard': function (someData) { |
201 | vardeferredResult; | 195 | vardeferredResult; |
202 | varoffset; | 196 | varoffset; |
203 | 197 | ||
204 | offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480); | 198 | offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480); |
205 | this.cardDetail().render(); | 199 | this.cardDetail().render(); |
206 | this.cardDetail().setCardReference(someData['_reference']); | 200 | this.cardDetail().setCardReference(someData['_reference']); |
207 | MochiKit.Style.setElementPosition(this.cardDetail().element(), {x:offset}); | 201 | MochiKit.Style.setElementPosition(this.cardDetail().element(), {x:offset}); |
208 | new MochiKit.Visual.Sequence([ | 202 | new MochiKit.Visual.Sequence([ |
209 | // new MochiKit.Visual.Move(this.cardDetail().element(), {x:offset, y:45, mode:'absolute', duration:0, sync:true}), | 203 | // new MochiKit.Visual.Move(this.cardDetail().element(), {x:offset, y:45, mode:'absolute', duration:0, sync:true}), |
210 | new MochiKit.Visual.Parallel([ | 204 | new MochiKit.Visual.Parallel([ |
211 | new MochiKit.Visual.Move(this.getElement('cardList'), {x:-offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}), | 205 | new MochiKit.Visual.Move(this.getElement('cardList'), {x:-offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}), |
212 | new MochiKit.Visual.Move(this.getElement('cardDetail'), {x:0, y:45, mode:'absolute',transition:MochiKit.Visual.Transitions.linear, sync:true}), | 206 | new MochiKit.Visual.Move(this.getElement('cardDetail'), {x:0, y:45, mode:'absolute',transition:MochiKit.Visual.Transitions.linear, sync:true}), |
213 | // new MochiKit.Visual.ScrollTo('toolbar', {sync:true}), | 207 | // new MochiKit.Visual.ScrollTo('toolbar', {sync:true}), |
214 | MochiKit.Visual.appear ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true}) | 208 | MochiKit.Visual.appear ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true}) |
215 | ], {duration:1, sync:true}), | 209 | ], {duration:1, sync:true}), |
216 | MochiKit.Visual.fade(this.getElement('cardList'), {duration:0, sync:true}) | 210 | MochiKit.Visual.fade(this.getElement('cardList'), {duration:0, sync:true}) |
217 | ], {}) | 211 | ], {}) |
218 | 212 | ||
219 | MochiKit.DOM.getElement('pageTitle').innerHTML = someData['title']; | 213 | MochiKit.DOM.getElement('pageTitle').innerHTML = someData['title']; |
220 | 214 | ||
221 | return true; | 215 | return true; |
222 | }, | 216 | }, |
223 | 217 | ||
224 | //------------------------------------------------------------------------- | 218 | //------------------------------------------------------------------------- |
225 | 219 | ||
226 | 'showCardDetails': function (someData) { | 220 | 'showCardDetails': function (someData) { |
227 | return this.cardDetail().showCardDetails(someData); | 221 | return this.cardDetail().showCardDetails(someData); |
228 | }, | 222 | }, |
229 | 223 | ||
230 | //========================================================================= | 224 | //========================================================================= |
231 | 225 | ||
232 | 'backButtonClickHandler': function (anEvent) { | 226 | 'backButtonClickHandler': function (anEvent) { |
233 | varoffset; | 227 | varoffset; |
234 | 228 | ||
235 | anEvent.preventDefault(); | 229 | anEvent.preventDefault(); |
236 | 230 | ||
237 | MochiKit.DOM.getElement('pageTitle').innerHTML = "cards"; | 231 | MochiKit.DOM.getElement('pageTitle').innerHTML = "cards"; |
238 | 232 | ||
239 | offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480); | 233 | offset = ((MochiKit.DOM.getNodeAttribute(MochiKit.DOM.currentDocument().body, 'orientation') == 'portrait') ? 320 : 480); |
240 | MochiKit.Style.setElementPosition(this.getElement('cardList'), {x:-offset}); | 234 | MochiKit.Style.setElementPosition(this.getElement('cardList'), {x:-offset}); |
241 | MochiKit.DOM.showElement(this.getElement('cardList')); | 235 | MochiKit.DOM.showElement(this.getElement('cardList')); |
242 | 236 | ||
243 | new MochiKit.Visual.Parallel([ | 237 | new MochiKit.Visual.Parallel([ |
244 | new MochiKit.Visual.Move(this.getElement('cardList'), {x:offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}), | 238 | new MochiKit.Visual.Move(this.getElement('cardList'), {x:offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}), |
245 | new MochiKit.Visual.Move(this.getElement('cardDetail'), {x:offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}), | 239 | new MochiKit.Visual.Move(this.getElement('cardDetail'), {x:offset, y:0, mode:'relative',transition:MochiKit.Visual.Transitions.linear, sync:true}), |
246 | MochiKit.Visual.fade (this.getElement('cardDetail'), { transition:MochiKit.Visual.Transitions.linear, sync:true}), | 240 | MochiKit.Visual.fade (this.getElement('cardDetail'), { transition:MochiKit.Visual.Transitions.linear, sync:true}), |
247 | MochiKit.Visual.fade ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true}) | 241 | MochiKit.Visual.fade ('backButton', { transition:MochiKit.Visual.Transitions.linear, sync:true}) |
248 | ], {duration:1, afterFinish:MochiKit.Base.method(this, 'removeCardDetail')}) | 242 | ], {duration:1, afterFinish:MochiKit.Base.method(this, 'removeCardDetail')}) |
249 | 243 | ||
250 | }, | 244 | }, |
251 | */ | 245 | */ |
252 | //========================================================================= | 246 | //========================================================================= |
253 | __syntaxFix__: "syntax fix" | 247 | __syntaxFix__: "syntax fix" |
254 | }); | 248 | }); |
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/LoginForm.js b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/LoginForm.js index eafcdbc..3aeac0c 100644 --- a/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/LoginForm.js +++ b/frontend/gamma/js/Clipperz/PM/UI/Mobile/Components/LoginForm.js | |||
@@ -1,356 +1,347 @@ | |||
1 | /* | 1 | /* |
2 | 2 | ||
3 | Copyright 2008-2011 Clipperz Srl | 3 | Copyright 2008-2013 Clipperz Srl |
4 | 4 | ||
5 | This file is part of Clipperz Community Edition. | 5 | This file is part of Clipperz, the online password manager. |
6 | Clipperz Community Edition is an online password manager. | ||
7 | For further information about its features and functionalities please | 6 | For further information about its features and functionalities please |
8 | refer to http://www.clipperz.com. | 7 | refer to http://www.clipperz.com. |
9 | 8 | ||
10 | * Clipperz Community Edition is free software: you can redistribute | 9 | * Clipperz is free software: you can redistribute it and/or modify it |
11 | it and/or modify it under the terms of the GNU Affero General Public | 10 | under the terms of the GNU Affero General Public License as published |
12 | License as published by the Free Software Foundation, either version | 11 | by the Free Software Foundation, either version 3 of the License, or |
13 | 3 of the License, or (at your option) any later version. | 12 | (at your option) any later version. |
14 | 13 | ||
15 | * Clipperz Community Edition is distributed in the hope that it will | 14 | * Clipperz is distributed in the hope that it will be useful, but |
16 | be useful, but WITHOUT ANY WARRANTY; without even the implied | 15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
18 | See the GNU Affero General Public License for more details. | 17 | See the GNU Affero General Public License for more details. |
19 | 18 | ||
20 | * You should have received a copy of the GNU Affero General Public | 19 | * You should have received a copy of the GNU Affero General Public |
21 | License along with Clipperz Community Edition. If not, see | 20 | License along with Clipperz. If not, see http://www.gnu.org/licenses/. |
22 | <http://www.gnu.org/licenses/>. | ||
23 | 21 | ||
24 | */ | 22 | */ |
25 | 23 | ||
26 | Clipperz.Base.module('Clipperz.PM.UI.Mobile.Components'); | 24 | Clipperz.Base.module('Clipperz.PM.UI.Mobile.Components'); |
27 | 25 | ||
28 | Clipperz.PM.UI.Mobile.Components.LoginForm = function(args) { | 26 | Clipperz.PM.UI.Mobile.Components.LoginForm = function(args) { |
29 | args = args || {}; | 27 | args = args || {}; |
30 | 28 | ||
31 | this._pin = ''; | 29 | this._pin = ''; |
32 | 30 | ||
33 | this._message = null; | 31 | this._message = null; |
34 | this._steps = 0; | 32 | this._steps = 0; |
35 | this._actualSteps = 0; | 33 | this._actualSteps = 0; |
36 | 34 | ||
37 | this._callback = null; | 35 | this._callback = null; |
38 | this._errorCallback = null; | 36 | this._errorCallback = null; |
39 | 37 | ||
40 | this._mode = 'CREDENTIALS'; | 38 | this._mode = 'CREDENTIALS'; |
41 | 39 | ||
42 | Clipperz.PM.UI.Mobile.Components.LoginForm.superclass.constructor.apply(this, arguments); | 40 | Clipperz.PM.UI.Mobile.Components.LoginForm.superclass.constructor.apply(this, arguments); |
43 | 41 | ||
44 | return this; | 42 | return this; |
45 | } | 43 | } |
46 | 44 | ||
47 | //============================================================================= | 45 | //============================================================================= |
48 | 46 | ||
49 | Clipperz.Base.extend(Clipperz.PM.UI.Mobile.Components.LoginForm, Clipperz.PM.UI.Common.Components.BaseComponent, { | 47 | Clipperz.Base.extend(Clipperz.PM.UI.Mobile.Components.LoginForm, Clipperz.PM.UI.Common.Components.BaseComponent, { |
50 | 48 | ||
51 | //------------------------------------------------------------------------- | 49 | //------------------------------------------------------------------------- |
52 | 50 | ||
53 | 'toString': function () { | 51 | 'toString': function () { |
54 | return "Clipperz.PM.UI.Mobile.Components.LoginForm component"; | 52 | return "Clipperz.PM.UI.Mobile.Components.LoginForm component"; |
55 | }, | 53 | }, |
56 | 54 | ||
57 | //------------------------------------------------------------------------- | 55 | //------------------------------------------------------------------------- |
58 | 56 | ||
59 | 'callback': function () { | 57 | 'callback': function () { |
60 | return this._callback; | 58 | return this._callback; |
61 | }, | 59 | }, |
62 | 60 | ||
63 | 'errorCallback': function () { | 61 | 'errorCallback': function () { |
64 | return this._errorCallback; | 62 | return this._errorCallback; |
65 | }, | 63 | }, |
66 | 64 | ||
67 | //------------------------------------------------------------------------- | 65 | //------------------------------------------------------------------------- |
68 | 66 | ||
69 | 'mode': function () { | 67 | 'mode': function () { |
70 | return this._mode; | 68 | return this._mode; |
71 | }, | 69 | }, |
72 | 70 | ||
73 | 'setMode': function (aValue) { | 71 | 'setMode': function (aValue) { |
74 | this._mode = aValue; | 72 | this._mode = aValue; |
75 | }, | 73 | }, |
76 | 74 | ||
77 | //.......................................................................... | 75 | //.......................................................................... |
78 | 76 | ||
79 | 'pin': function () { | 77 | 'pin': function () { |
80 | return this._pin; | 78 | return this._pin; |
81 | }, | 79 | }, |
82 | 80 | ||
83 | 'setPin': function (aValue) { | 81 | 'setPin': function (aValue) { |
84 | this._pin = aValue; | 82 | this._pin = aValue; |
85 | }, | 83 | }, |
86 | 84 | ||
87 | //.......................................................................... | 85 | //.......................................................................... |
88 | 86 | ||
89 | 'username': function () { | 87 | 'username': function () { |
90 | return this._username; | 88 | return this._username; |
91 | }, | 89 | }, |
92 | 90 | ||
93 | 'setUsername': function (aValue) { | 91 | 'setUsername': function (aValue) { |
94 | this._username = aValue; | 92 | this._username = aValue; |
95 | }, | 93 | }, |
96 | 94 | ||
97 | //.......................................................................... | 95 | //.......................................................................... |
98 | 96 | ||
99 | 'passphrase': function () { | 97 | 'passphrase': function () { |
100 | return this._passphrase; | 98 | return this._passphrase; |
101 | }, | 99 | }, |
102 | 100 | ||
103 | 'setPassphrase': function (aValue) { | 101 | 'setPassphrase': function (aValue) { |
104 | this._passphrase = aValue; | 102 | this._passphrase = aValue; |
105 | }, | 103 | }, |
106 | 104 | ||
107 | //------------------------------------------------------------------------- | 105 | //------------------------------------------------------------------------- |
108 | 106 | ||
109 | 'message': function () { | 107 | 'message': function () { |
110 | return this._message; | 108 | return this._message; |
111 | }, | 109 | }, |
112 | 110 | ||
113 | '_setMessage': function (aValue) { | 111 | '_setMessage': function (aValue) { |
114 | this._message = aValue; | 112 | this._message = aValue; |
115 | 113 | ||
116 | if (aValue == null) { | 114 | if (aValue == null) { |
117 | MochiKit.Style.hideElement(this.getElement('credentialsMessage')); | 115 | MochiKit.Style.hideElement(this.getElement('credentialsMessage')); |
118 | } else { | 116 | } else { |
119 | this.getElement('message').innerHTML = aValue; | 117 | this.getElement('message').innerHTML = aValue; |
120 | MochiKit.Style.showElement(this.getElement('credentialsMessage')); | 118 | MochiKit.Style.showElement(this.getElement('credentialsMessage')); |
121 | } | 119 | } |
122 | }, | 120 | }, |
123 | 121 | ||
124 | 'setMessage': function (aValue) { | 122 | 'setMessage': function (aValue) { |
125 | this._setMessage(aValue); | 123 | this._setMessage(aValue); |
126 | MochiKit.DOM.removeElementClass(this.getElement('credentialsMessage'), 'error'); | 124 | MochiKit.DOM.removeElementClass(this.getElement('credentialsMessage'), 'error'); |
127 | }, | 125 | }, |
128 | 126 | ||
129 | 'setErrorMessage': function (aValue) { | 127 | 'setErrorMessage': function (aValue) { |
130 | this._setMessage(aValue); | 128 | this._setMessage(aValue); |
131 | MochiKit.DOM.addElementClass(this.getElement('credentialsMessage'), 'error'); | 129 | MochiKit.DOM.addElementClass(this.getElement('credentialsMessage'), 'error'); |
132 | }, | 130 | }, |
133 | 131 | ||
134 | //------------------------------------------------------------------------- | 132 | //------------------------------------------------------------------------- |
135 | 133 | ||
136 | 'setCallbacks': function (args) { | 134 | 'setCallbacks': function (args) { |
137 | this._callback = args['callback']; | 135 | this._callback = args['callback']; |
138 | this._errorCallback = args['errorCallback']; | 136 | this._errorCallback = args['errorCallback']; |
139 | }, | 137 | }, |
140 | 138 | ||
141 | 'showErrors': function (args) { | 139 | 'showErrors': function (args) { |
142 | //console.log("LoginForm.showErrors", args); | ||
143 | if (args['previousFailedAttempt'] == 'LOGIN') { | 140 | if (args['previousFailedAttempt'] == 'LOGIN') { |
144 | this.setErrorMessage("Wrong credentials"); | 141 | this.setErrorMessage("Wrong credentials"); |
145 | } else if (args['previousFailedAttempt'] == 'PIN') { | 142 | } else if (args['previousFailedAttempt'] == 'PIN') { |
146 | if (args['failedAttempts'] == -1) { | 143 | if (args['failedAttempts'] == -1) { |
147 | this.setErrorMessage("Wrong PIN - Resetted"); | 144 | this.setErrorMessage("Wrong PIN - Resetted"); |
148 | } else { | 145 | } else { |
149 | this.setErrorMessage("Wrong PIN"); | 146 | this.setErrorMessage("Wrong PIN"); |
150 | } | 147 | } |
151 | } else { | 148 | } else { |
152 | this.setMessage(null); | 149 | this.setMessage(null); |
153 | } | 150 | } |
154 | }, | 151 | }, |
155 | 152 | ||
156 | 'updateWithArgs': function (args) { | 153 | 'updateWithArgs': function (args) { |
157 | this.renderIfNeeded(); | 154 | this.renderIfNeeded(); |
158 | this.setCallbacks(args); | 155 | this.setCallbacks(args); |
159 | this.showErrors(args); | 156 | this.showErrors(args); |
160 | this.updateRendering(); | 157 | this.updateRendering(); |
161 | }, | 158 | }, |
162 | 159 | ||
163 | 'showPinLogin': function (args) { | 160 | 'showPinLogin': function (args) { |
164 | this.setPin(''); | 161 | this.setPin(''); |
165 | this.setMode('PIN'); | 162 | this.setMode('PIN'); |
166 | this.updateWithArgs(args); | 163 | this.updateWithArgs(args); |
167 | 164 | ||
168 | // $(this.getAnchor('PIN')).focus(); | 165 | // $(this.getAnchor('PIN')).focus(); |
169 | this.getElement('PIN').focus(); | 166 | this.getElement('PIN').focus(); |
170 | }, | 167 | }, |
171 | 168 | ||
172 | 'showCredentialsLogin': function (args) { | 169 | 'showCredentialsLogin': function (args) { |
173 | this.setMode('CREDENTIALS'); | 170 | this.setMode('CREDENTIALS'); |
174 | this.updateWithArgs(args); | 171 | this.updateWithArgs(args); |
175 | 172 | ||
176 | if (this.getElement('usernameField').value.length == 0) { | 173 | if (this.getElement('usernameField').value.length == 0) { |
177 | // $(this.getAnchor('usernameField')).focus(); | 174 | // $(this.getAnchor('usernameField')).focus(); |
178 | this.getElement('usernameField').focus(); | 175 | this.getElement('usernameField').focus(); |
179 | } else { | 176 | } else { |
180 | // $(this.getAnchor('passphraseField')).focus(); | 177 | // $(this.getAnchor('passphraseField')).focus(); |
181 | this.getElement('passphraseField').focus(); | 178 | this.getElement('passphraseField').focus(); |
182 | this.getElement('passphraseField').select(); | 179 | this.getElement('passphraseField').select(); |
183 | } | 180 | } |
184 | }, | 181 | }, |
185 | 182 | ||
186 | //------------------------------------------------------------------------- | 183 | //------------------------------------------------------------------------- |
187 | 184 | ||
188 | 'renderIfNeeded': function () { | 185 | 'renderIfNeeded': function () { |
189 | if (this.isFullyRendered() == false) { | 186 | if (this.isFullyRendered() == false) { |
190 | this.render(); | 187 | this.render(); |
191 | }; | 188 | }; |
192 | this.updateRendering(); | 189 | this.updateRendering(); |
193 | }, | 190 | }, |
194 | 191 | ||
195 | 'updateRendering': function () { | 192 | 'updateRendering': function () { |
196 | MochiKit.Style.showElement(this.getElement('credentialsBody')); | 193 | MochiKit.Style.showElement(this.getElement('credentialsBody')); |
197 | MochiKit.Style.hideElement(this.getElement('validating')); | 194 | MochiKit.Style.hideElement(this.getElement('validating')); |
198 | 195 | ||
199 | // this.hideAllPanes(); | 196 | // this.hideAllPanes(); |
200 | MochiKit.Base.map(function (aNode) { MochiKit.Style.hideElement(aNode); }, MochiKit.Selector.findDocElements('div.credentialsBody > div')); | 197 | MochiKit.Base.map(function (aNode) { MochiKit.Style.hideElement(aNode); }, MochiKit.Selector.findDocElements('div.credentialsBody > div')); |
201 | if (this.mode() == 'CREDENTIALS') { | 198 | if (this.mode() == 'CREDENTIALS') { |
202 | selectedPanel = this.getElement('credentials') | 199 | selectedPanel = this.getElement('credentials') |
203 | } else if (this.mode() == 'PIN') { | 200 | } else if (this.mode() == 'PIN') { |
204 | selectedPanel = this.getElement('pin') | 201 | selectedPanel = this.getElement('pin') |
205 | // this.updatePinDisplay(); | 202 | // this.updatePinDisplay(); |
206 | } else { | 203 | } else { |
207 | throw 'Unhandled login form mode'; | 204 | throw 'Unhandled login form mode'; |
208 | } | 205 | } |
209 | MochiKit.Style.showElement(selectedPanel); | 206 | MochiKit.Style.showElement(selectedPanel); |
210 | 207 | ||
211 | MochiKit.Style.hideElement(this.getElement('validating')); | 208 | MochiKit.Style.hideElement(this.getElement('validating')); |
212 | }, | 209 | }, |
213 | 210 | ||
214 | 'renderSelf': function() { | 211 | 'renderSelf': function() { |
215 | var selectedPanel; | 212 | var selectedPanel; |
216 | this.append(this.element(), {tag:'div', id:'login', children:[ | 213 | this.append(this.element(), {tag:'div', id:'login', children:[ |
217 | {tag:'div', cls:'toolbar', children:[ | 214 | {tag:'div', cls:'toolbar', children:[ |
218 | {tag:'h1', html:"clipperz"} | 215 | {tag:'h1', html:"clipperz"} |
219 | ]}, | 216 | ]}, |
220 | {tag:'div', cls:'scroll', children:[ | 217 | {tag:'div', cls:'scroll', children:[ |
221 | //================================================================== | 218 | //================================================================== |
222 | {tag:'div', cls:'credentialsMessage', id:this.getId('credentialsMessage'), children:[ | 219 | {tag:'div', cls:'credentialsMessage', id:this.getId('credentialsMessage'), children:[ |
223 | {tag:'h1', cls:'message', id:this.getId('message'), html:"Message"} | 220 | {tag:'h1', cls:'message', id:this.getId('message'), html:"Message"} |
224 | ]}, | 221 | ]}, |
225 | //================================================================== | 222 | //================================================================== |
226 | {tag:'div', cls:'credentialsBody', id:this.getId('credentialsBody'), children:[ | 223 | {tag:'div', cls:'credentialsBody', id:this.getId('credentialsBody'), children:[ |
227 | //-------------------------------------------------------------- | 224 | //-------------------------------------------------------------- |
228 | {tag:'div', cls:'pin', id:this.getId('pin'), children:[ | 225 | {tag:'div', cls:'pin', id:this.getId('pin'), children:[ |
229 | {tag:'form', cls:'scroll', id:this.getId('pinForm'), children:[ | 226 | {tag:'form', cls:'scroll', id:this.getId('pinForm'), children:[ |
230 | {tag:'ul', cls:'edit rounded', children:[ | 227 | {tag:'ul', cls:'edit rounded', children:[ |
231 | {tag:'li', children:[{tag:'input', type:'number', name:'PIN', placeholder:"PIN", id:this.getId('PIN') }]}, | 228 | {tag:'li', children:[{tag:'input', type:'number', name:'PIN', placeholder:"PIN", id:this.getId('PIN') }]}, |
232 | ]}, | 229 | ]}, |
233 | {tag:'a', href:'#', cls:'greenButton', id:this.getId('pinSubmitButton'), html:"Login"} | 230 | {tag:'a', href:'#', cls:'greenButton', id:this.getId('pinSubmitButton'), html:"Login"} |
234 | ]} | 231 | ]} |
235 | ]}, | 232 | ]}, |
236 | //-------------------------------------------------------------- | 233 | //-------------------------------------------------------------- |
237 | {tag:'div', cls:'credentials', id:this.getId('credentials'), children:[ | 234 | {tag:'div', cls:'credentials', id:this.getId('credentials'), children:[ |
238 | {tag:'form', cls:'scroll', id:this.getId('credentialsForm'), children:[ | 235 | {tag:'form', cls:'scroll', id:this.getId('credentialsForm'), children:[ |
239 | {tag:'ul', cls:'edit rounded', children:[ | 236 | {tag:'ul', cls:'edit rounded', children:[ |
240 | {tag:'li', children:[{tag:'input', type:'email', name:'name', /*value:'joe',*/ placeholder:"username", id:this.getId('usernameField') }]}, | 237 | {tag:'li', children:[{tag:'input', type:'email', name:'name', /*value:'joe',*/ placeholder:"username", id:this.getId('usernameField') }]}, |
241 | {tag:'li', children:[{tag:'input', type:'password', name:'passphrase', /*value:'clipperz',*/placeholder:"passphrase", id:this.getId('passphraseField') }]} | 238 | {tag:'li', children:[{tag:'input', type:'password', name:'passphrase', /*value:'clipperz',*/placeholder:"passphrase", id:this.getId('passphraseField') }]} |
242 | ]}, | 239 | ]}, |
243 | {tag:'a', href:'#', cls:'greenButton', id:this.getId('credentialsSubmitButton'), html:"Login"} | 240 | {tag:'a', href:'#', cls:'greenButton', id:this.getId('credentialsSubmitButton'), html:"Login"} |
244 | // {tag:'input', type:'submit', cls:'greenButton', id:this.getId('credentialsSubmitButton'), value:"Login"} | 241 | // {tag:'input', type:'submit', cls:'greenButton', id:this.getId('credentialsSubmitButton'), value:"Login"} |
245 | 242 | ||
246 | ]} | 243 | ]} |
247 | ]}, | 244 | ]}, |
248 | //-------------------------------------------------------------- | 245 | //-------------------------------------------------------------- |
249 | ]}, | 246 | ]}, |
250 | //================================================================== | 247 | //================================================================== |
251 | {tag:'div', cls:'validating', id:this.getId('validating'), children:[ | 248 | {tag:'div', cls:'validating', id:this.getId('validating'), children:[ |
252 | {tag:'div', cls:'loading', children:[ | 249 | {tag:'div', cls:'loading', children:[ |
253 | {tag:'div', cls:'spinner', children:[ | 250 | {tag:'div', cls:'spinner', children:[ |
254 | {tag:'div', cls:'bar01'}, | 251 | {tag:'div', cls:'bar01'}, |
255 | {tag:'div', cls:'bar02'}, | 252 | {tag:'div', cls:'bar02'}, |
256 | {tag:'div', cls:'bar03'}, | 253 | {tag:'div', cls:'bar03'}, |
257 | {tag:'div', cls:'bar04'}, | 254 | {tag:'div', cls:'bar04'}, |
258 | {tag:'div', cls:'bar05'}, | 255 | {tag:'div', cls:'bar05'}, |
259 | {tag:'div', cls:'bar06'}, | 256 | {tag:'div', cls:'bar06'}, |
260 | {tag:'div', cls:'bar07'}, | 257 | {tag:'div', cls:'bar07'}, |
261 | {tag:'div', cls:'bar08'}, | 258 | {tag:'div', cls:'bar08'}, |
262 | {tag:'div', cls:'bar09'}, | 259 | {tag:'div', cls:'bar09'}, |
263 | {tag:'div', cls:'bar10'}, | 260 | {tag:'div', cls:'bar10'}, |
264 | {tag:'div', cls:'bar11'}, | 261 | {tag:'div', cls:'bar11'}, |
265 | {tag:'div', cls:'bar12'} | 262 | {tag:'div', cls:'bar12'} |
266 | ]} | 263 | ]} |
267 | ]}, | 264 | ]}, |
268 | {tag:'div', id:this.getId('loadingMessage')}, | 265 | {tag:'div', id:this.getId('loadingMessage')}, |
269 | {tag:'a', href:'#', cls:'grayButton', id:this.getId('loginCancelButton'), html:"Cancel"} | 266 | {tag:'a', href:'#', cls:'grayButton', id:this.getId('loginCancelButton'), html:"Cancel"} |
270 | ]} | 267 | ]} |
271 | //================================================================== | 268 | //================================================================== |
272 | ]} | 269 | ]} |
273 | ]}); | 270 | ]}); |
274 | 271 | ||
275 | MochiKit.Signal.connect(this.getElement('credentialsForm'), 'onsubmit', this, 'submitCredentialsHandler'); | 272 | MochiKit.Signal.connect(this.getElement('credentialsForm'), 'onsubmit', this, 'submitCredentialsHandler'); |
276 | MochiKit.Signal.connect(this.getElement('credentialsSubmitButton'), 'onclick', this, 'submitCredentialsHandler'); | 273 | MochiKit.Signal.connect(this.getElement('credentialsSubmitButton'), 'onclick', this, 'submitCredentialsHandler'); |
277 | 274 | ||
278 | MochiKit.Signal.connect(this.getElement('pinForm'), 'onsubmit', this, 'submitPinHandler'); | 275 | MochiKit.Signal.connect(this.getElement('pinForm'), 'onsubmit', this, 'submitPinHandler'); |
279 | MochiKit.Signal.connect(this.getElement('pinSubmitButton'), 'onclick', this, 'submitPinHandler'); | 276 | MochiKit.Signal.connect(this.getElement('pinSubmitButton'), 'onclick', this, 'submitPinHandler'); |
280 | 277 | ||
281 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'initProgress', this, 'initProgressHandle'); | 278 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'initProgress', this, 'initProgressHandle'); |
282 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'updateProgress',this, 'updateProgressHandle'); | 279 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'updateProgress',this, 'updateProgressHandle'); |
283 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'advanceProgress',this, 'advanceProgressHandle'); | 280 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'advanceProgress',this, 'advanceProgressHandle'); |
284 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'progressDone', this, 'progressDoneHandle'); | 281 | MochiKit.Signal.connect(Clipperz.Signal.NotificationCenter, 'progressDone', this, 'progressDoneHandle'); |
285 | }, | 282 | }, |
286 | 283 | ||
287 | //------------------------------------------------------------------------- | 284 | //------------------------------------------------------------------------- |
288 | 285 | ||
289 | 'submitPinHandler': function (anEvent) { | 286 | 'submitPinHandler': function (anEvent) { |
290 | varpin; | 287 | varpin; |
291 | 288 | ||
292 | this.setMessage(null); | 289 | this.setMessage(null); |
293 | pin = this.getElement('PIN').value; | 290 | pin = this.getElement('PIN').value; |
294 | // $(this.getAnchor('PIN')).blur(); | 291 | // $(this.getAnchor('PIN')).blur(); |
295 | this.getElement('PIN').blur(); | 292 | this.getElement('PIN').blur(); |
296 | 293 | ||
297 | credentials = Clipperz.PM.PIN.credentialsWithPIN(pin); | 294 | credentials = Clipperz.PM.PIN.credentialsWithPIN(pin); |
298 | this.loginWithCredentials(credentials); | 295 | this.loginWithCredentials(credentials); |
299 | }, | 296 | }, |
300 | 297 | ||
301 | 'submitCredentialsHandler': function (anEvent) { | 298 | 'submitCredentialsHandler': function (anEvent) { |
302 | //console.log("submitCredentialsHandler"); | ||
303 | varcredentials; | 299 | varcredentials; |
304 | 300 | ||
305 | this.setMessage(null); | 301 | this.setMessage(null); |
306 | 302 | ||
307 | credentials = {}; | 303 | credentials = {}; |
308 | credentials['username'] = this.getElement('usernameField').value; | 304 | credentials['username'] = this.getElement('usernameField').value; |
309 | credentials['passphrase'] = this.getElement('passphraseField').value; | 305 | credentials['passphrase'] = this.getElement('passphraseField').value; |
310 | // $(this.getAnchor('passphraseField')).blur(); | 306 | // $(this.getAnchor('passphraseField')).blur(); |
311 | this.getElement('passphraseField').blur(); | 307 | this.getElement('passphraseField').blur(); |
312 | 308 | ||
313 | this.loginWithCredentials(credentials); | 309 | this.loginWithCredentials(credentials); |
314 | }, | 310 | }, |
315 | 311 | ||
316 | //------------------------------------------------------------------------- | 312 | //------------------------------------------------------------------------- |
317 | 313 | ||
318 | 'loginWithCredentials': function (someCredentials) { | 314 | 'loginWithCredentials': function (someCredentials) { |
319 | varargs; | 315 | varargs; |
320 | 316 | ||
321 | args = {}; | 317 | args = {}; |
322 | args['credentials'] = someCredentials; | 318 | args['credentials'] = someCredentials; |
323 | args['errorCallback'] = this.errorCallback(); | 319 | args['errorCallback'] = this.errorCallback(); |
324 | 320 | ||
325 | MochiKit.Style.hideElement(this.getElement('credentialsBody')); | 321 | MochiKit.Style.hideElement(this.getElement('credentialsBody')); |
326 | MochiKit.Style.showElement(this.getElement('validating')); | 322 | MochiKit.Style.showElement(this.getElement('validating')); |
327 | 323 | ||
328 | MochiKit.Async.callLater(0.1, this.callback(), args); | 324 | MochiKit.Async.callLater(0.1, this.callback(), args); |
329 | }, | 325 | }, |
330 | 326 | ||
331 | //------------------------------------------------------------------------- | 327 | //------------------------------------------------------------------------- |
332 | 328 | ||
333 | 'initProgressHandle': function (anEvent) { | 329 | 'initProgressHandle': function (anEvent) { |
334 | //console.log("** initProgressHandle", anEvent); | ||
335 | this._steps = anEvent['steps']; | 330 | this._steps = anEvent['steps']; |
336 | this._actualSteps = 0; | 331 | this._actualSteps = 0; |
337 | }, | 332 | }, |
338 | 333 | ||
339 | 'updateProgressHandle': function (anEvent) { | 334 | 'updateProgressHandle': function (anEvent) { |
340 | //console.log("** updateProgressHandle", anEvent); | ||
341 | this._steps += anEvent['extraSteps']; | 335 | this._steps += anEvent['extraSteps']; |
342 | }, | 336 | }, |
343 | 337 | ||
344 | 'advanceProgressHandle': function (anEvent) { | 338 | 'advanceProgressHandle': function (anEvent) { |
345 | //console.log("** advanceProgressHandle", anEvent); | ||
346 | this._actualSteps ++; | 339 | this._actualSteps ++; |
347 | //console.log("STEPS: " + this._actualSteps + "/" + this._steps); | ||
348 | }, | 340 | }, |
349 | 341 | ||
350 | 'progressDoneHandle': function (anEvent) { | 342 | 'progressDoneHandle': function (anEvent) { |
351 | //console.log("** progressDoneHandle", anEvent); | ||
352 | }, | 343 | }, |
353 | 344 | ||
354 | //------------------------------------------------------------------------- | 345 | //------------------------------------------------------------------------- |
355 | __syntaxFix__: "syntax fix" | 346 | __syntaxFix__: "syntax fix" |
356 | }); | 347 | }); |