Diffstat (limited to 'frontend/delta/js/Clipperz/PM/UI/MainController.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/delta/js/Clipperz/PM/UI/MainController.js | 130 |
1 files changed, 111 insertions, 19 deletions
diff --git a/frontend/delta/js/Clipperz/PM/UI/MainController.js b/frontend/delta/js/Clipperz/PM/UI/MainController.js index da7540e..20ff041 100644 --- a/frontend/delta/js/Clipperz/PM/UI/MainController.js +++ b/frontend/delta/js/Clipperz/PM/UI/MainController.js | |||
@@ -26,7 +26,7 @@ Clipperz.Base.module('Clipperz.PM.UI'); | |||
26 | Clipperz.PM.UI.MainController = function() { | 26 | Clipperz.PM.UI.MainController = function() { |
27 | var pages; | 27 | var pages; |
28 | 28 | ||
29 | this._proxy = null; | 29 | // this._proxy = null; |
30 | this._user = null; | 30 | this._user = null; |
31 | this._filter= ''; | 31 | this._filter= ''; |
32 | 32 | ||
@@ -39,12 +39,14 @@ Clipperz.PM.UI.MainController = function() { | |||
39 | 'registrationPage':new Clipperz.PM.UI.Components.RegistrationWizard(), | 39 | 'registrationPage':new Clipperz.PM.UI.Components.RegistrationWizard(), |
40 | 'cardListPage': new Clipperz.PM.UI.Components.CardList(), | 40 | 'cardListPage': new Clipperz.PM.UI.Components.CardList(), |
41 | 'cardDetailPage':new Clipperz.PM.UI.Components.CardDetail({card: {}}), | 41 | 'cardDetailPage':new Clipperz.PM.UI.Components.CardDetail({card: {}}), |
42 | 'preferencePage':new Clipperz.PM.UI.Components.PreferencePage(), | ||
42 | 'errorPage': new Clipperz.PM.UI.Components.ErrorPage({message:''}) | 43 | 'errorPage': new Clipperz.PM.UI.Components.ErrorPage({message:''}) |
43 | }; | 44 | }; |
44 | 45 | ||
45 | MochiKit.Base.map(function (anId) {React.renderComponent(pages[anId], MochiKit.DOM.getElement(anId))}, MochiKit.Base.keys(pages)); | 46 | MochiKit.Base.map(function (anId) {React.renderComponent(pages[anId], MochiKit.DOM.getElement(anId))}, MochiKit.Base.keys(pages)); |
46 | this._pages = pages; | 47 | this._pages = pages; |
47 | this.registerForNotificationCenterEvents(); | 48 | this.registerForNotificationCenterEvents(); |
49 | MochiKit.Signal.connect(MochiKit.DOM.currentDocument(), 'onselectionchange', this, 'selectionChangeHandler'); | ||
48 | 50 | ||
49 | return this; | 51 | return this; |
50 | } | 52 | } |
@@ -73,10 +75,12 @@ MochiKit.Base.update(Clipperz.PM.UI.MainController.prototype, { | |||
73 | 75 | ||
74 | isOnline: function() { | 76 | isOnline: function() { |
75 | return navigator.onLine; | 77 | return navigator.onLine; |
78 | // return false; | ||
76 | }, | 79 | }, |
77 | 80 | ||
78 | hasLocalData: function() { | 81 | hasLocalData: function() { |
79 | return false; | 82 | // return false; |
83 | return (Clipperz.PM.DataModel.devicePreferences.accountData() != null); | ||
80 | }, | 84 | }, |
81 | 85 | ||
82 | loginMode: function () { | 86 | loginMode: function () { |
@@ -98,26 +102,41 @@ MochiKit.Base.update(Clipperz.PM.UI.MainController.prototype, { | |||
98 | 102 | ||
99 | //========================================================================= | 103 | //========================================================================= |
100 | 104 | ||
105 | showOfflineError: function () { | ||
106 | console.log("THE BROWSER IS OFFLINE"); | ||
107 | }, | ||
108 | |||
101 | selectInitialProxy: function () { | 109 | selectInitialProxy: function () { |
102 | if (this.isOnline()) { | 110 | if (this.isOnline()) { |
103 | this._proxy = Clipperz.PM.Proxy.defaultProxy; | 111 | // this._proxy = Clipperz.PM.Proxy.defaultProxy; |
104 | } else { | 112 | } else { |
105 | if (this.hasLocalData()) { | 113 | if (this.hasLocalData()) { |
106 | this._proxy = new Clipperz.PM.Proxy.Offline({dataStore: new Clipperz.PM.Proxy.Offline.LocalStorageDataStore(), shouldPayTolls:false}); | 114 | // this._proxy = new Clipperz.PM.Proxy.Offline({dataStore: new Clipperz.PM.Proxy.Offline.LocalStorageDataStore(), shouldPayTolls:false}); |
115 | Clipperz.PM.Proxy.defaultProxy = new Clipperz.PM.Proxy.Offline({dataStore: new Clipperz.PM.Proxy.Offline.LocalStorageDataStore(), shouldPayTolls:false}); | ||
107 | } else { | 116 | } else { |
108 | this.showOfflineError(); | 117 | this.showOfflineError(); |
109 | } | 118 | } |
110 | } | 119 | } |
111 | }, | 120 | }, |
112 | 121 | ||
113 | proxy: function () { | 122 | //proxy: function () { |
114 | return this._proxy; | 123 | // return this._proxy; |
115 | }, | 124 | //}, |
116 | 125 | ||
117 | //========================================================================= | 126 | //========================================================================= |
118 | 127 | ||
119 | registerForNotificationCenterEvents: function () { | 128 | registerForNotificationCenterEvents: function () { |
120 | var events= ['doLogin', 'registerNewUser', 'showRegistrationForm', 'goBack', 'showRecord', 'searchCards', 'runDirectLogin']; | 129 | var events= [ |
130 | 'doLogin', | ||
131 | 'registerNewUser', | ||
132 | 'showRegistrationForm', | ||
133 | 'goBack', | ||
134 | 'showRecord', | ||
135 | 'searchCards', | ||
136 | 'showPreferences', | ||
137 | 'runDirectLogin', | ||
138 | 'synchronizeLocalData' | ||
139 | ]; | ||
121 | var self= this; | 140 | var self= this; |
122 | 141 | ||
123 | MochiKit.Base.map(function (anEvent) { | 142 | MochiKit.Base.map(function (anEvent) { |
@@ -130,12 +149,53 @@ MochiKit.Base.update(Clipperz.PM.UI.MainController.prototype, { | |||
130 | 149 | ||
131 | //------------------------------------------------------------------------- | 150 | //------------------------------------------------------------------------- |
132 | 151 | ||
152 | selectionChangeHandler: function (anEvent) { | ||
153 | varselection; | ||
154 | varselectionRange; | ||
155 | varselectionNode; | ||
156 | varvalueElement; | ||
157 | //other hints: http://www.bearpanther.com/2013/05/27/easy-text-selection-in-mobile-safari/ | ||
158 | //SELECTION: https://developer.mozilla.org/en-US/docs/Web/API/Selection | ||
159 | //RANGE: https://developer.mozilla.org/en-US/docs/Web/API/Range | ||
160 | //NODE TYPES: https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType | ||
161 | |||
162 | selection = MochiKit.DOM.currentWindow().getSelection(); | ||
163 | //console.log("-- selection", selection); | ||
164 | selectionRange = selection.getRangeAt(0); | ||
165 | selectionNode = selectionRange.startContainer.childNodes[selectionRange.startOffset]; | ||
166 | //console.log("-- selectionNode", selectionNode); | ||
167 | |||
168 | if (selectionNode != undefined) { | ||
169 | valueElement = MochiKit.DOM.getFirstElementByTagAndClassName('*', 'value', selectionNode); | ||
170 | //console.log("-- valueElement", valueElement); | ||
171 | } | ||
172 | |||
173 | if ((valueElement != null) && (valueElement != selectionNode)) { | ||
174 | var range; | ||
175 | range = MochiKit.DOM.currentDocument().createRange(); | ||
176 | range.selectNodeContents(valueElement); | ||
177 | selection.removeAllRanges(); | ||
178 | selection.addRange(range); | ||
179 | |||
180 | anEvent.preventDefault(); | ||
181 | anEvent.stopPropagation(); | ||
182 | |||
183 | //console.log("updated selection", MochiKit.DOM.currentWindow().getSelection()); | ||
184 | } | ||
185 | //console.log("-----------"); | ||
186 | }, | ||
187 | |||
188 | //------------------------------------------------------------------------- | ||
189 | |||
133 | run: function (parameters) { | 190 | run: function (parameters) { |
134 | var shouldShowRegistrationForm; | 191 | var shouldShowRegistrationForm; |
192 | varcanRegisterNewUsers; | ||
193 | |||
194 | canRegisterNewUsers = Clipperz.PM.Proxy.defaultProxy.canRegisterNewUsers(); | ||
135 | 195 | ||
136 | this.selectInitialProxy(); | 196 | this.selectInitialProxy(); |
137 | shouldShowRegistrationForm = parameters['shouldShowRegistrationForm'] && this.proxy().canRegisterNewUsers(); | 197 | shouldShowRegistrationForm = parameters['shouldShowRegistrationForm'] && canRegisterNewUsers; |
138 | this.pages()['loginPage'].setProps({'mode':this.loginMode(), 'isNewUserRegistrationAvailable': this.proxy().canRegisterNewUsers()}); | 198 | this.pages()['loginPage'].setProps({'mode':this.loginMode(), 'isNewUserRegistrationAvailable':canRegisterNewUsers}); |
139 | 199 | ||
140 | if (shouldShowRegistrationForm) { | 200 | if (shouldShowRegistrationForm) { |
141 | this.showRegistrationForm(); | 201 | this.showRegistrationForm(); |
@@ -151,7 +211,7 @@ MochiKit.Base.update(Clipperz.PM.UI.MainController.prototype, { | |||
151 | varloginFormPage; | 211 | varloginFormPage; |
152 | 212 | ||
153 | loginFormPage = this.pages()['loginPage']; | 213 | loginFormPage = this.pages()['loginPage']; |
154 | loginFormPage.setProps({'mode':this.loginMode(), 'isNewUserRegistrationAvailable': this.proxy().canRegisterNewUsers()}); | 214 | loginFormPage.setProps({'mode':this.loginMode(), 'isNewUserRegistrationAvailable':Clipperz.PM.Proxy.defaultProxy.canRegisterNewUsers()}); |
155 | this.moveInPage(this.currentPage(), 'loginPage'); | 215 | this.moveInPage(this.currentPage(), 'loginPage'); |
156 | MochiKit.Async.callLater(0.5, MochiKit.Base.method(loginFormPage, 'setInitialFocus')); | 216 | MochiKit.Async.callLater(0.5, MochiKit.Base.method(loginFormPage, 'setInitialFocus')); |
157 | }, | 217 | }, |
@@ -202,9 +262,9 @@ MochiKit.Base.update(Clipperz.PM.UI.MainController.prototype, { | |||
202 | deferredResult.addErrback(MochiKit.Base.bind(function (anEvent, anError) { | 262 | deferredResult.addErrback(MochiKit.Base.bind(function (anEvent, anError) { |
203 | if (anError['isPermanent'] != true) { | 263 | if (anError['isPermanent'] != true) { |
204 | this.pages()['loginPage'].setProps({disabled:false, 'mode':this.loginMode()}); | 264 | this.pages()['loginPage'].setProps({disabled:false, 'mode':this.loginMode()}); |
205 | this.pages()['loginPage'].setInitialFocus(); | 265 | this.pages()['loginPage'].setInitialFocus(); |
206 | } | 266 | } |
207 | return anError; | 267 | return anError; |
208 | }, this, event)) | 268 | }, this, event)) |
209 | deferredResult.callback(); | 269 | deferredResult.callback(); |
210 | 270 | ||
@@ -323,8 +383,11 @@ MochiKit.Base.update(Clipperz.PM.UI.MainController.prototype, { | |||
323 | 383 | ||
324 | runApplication: function () { | 384 | runApplication: function () { |
325 | MochiKit.Signal.connect(window, 'onpopstate',MochiKit.Base.method(this, 'historyGoBack')); | 385 | MochiKit.Signal.connect(window, 'onpopstate',MochiKit.Base.method(this, 'historyGoBack')); |
386 | /// TODO: remove this TEST HACK | ||
326 | this.moveInPage(this.currentPage(), 'cardListPage'); | 387 | this.moveInPage(this.currentPage(), 'cardListPage'); |
327 | return this.showRecordList(); | 388 | return this.showRecordList(); |
389 | |||
390 | // this.moveInPage(this.currentPage(), 'preferencePage'); | ||
328 | }, | 391 | }, |
329 | 392 | ||
330 | showRecord: function (aRecordReference) { | 393 | showRecord: function (aRecordReference) { |
@@ -333,7 +396,6 @@ MochiKit.Base.update(Clipperz.PM.UI.MainController.prototype, { | |||
333 | 396 | ||
334 | this.pages()['cardListPage'].setProps({selectedCard:aRecordReference}); | 397 | this.pages()['cardListPage'].setProps({selectedCard:aRecordReference}); |
335 | deferredResult = new Clipperz.Async.Deferred('MainController.runApplication', {trace:false}); | 398 | deferredResult = new Clipperz.Async.Deferred('MainController.runApplication', {trace:false}); |
336 | // deferredResult.addMethod(this.user(), 'getRecord', aRecordReference['_reference']); | ||
337 | deferredResult.addMethod(this.user(), 'getRecord', aRecordReference); | 399 | deferredResult.addMethod(this.user(), 'getRecord', aRecordReference); |
338 | deferredResult.addMethodcaller('content'); | 400 | deferredResult.addMethodcaller('content'); |
339 | deferredResult.addCallback(MochiKit.Base.bind(function (aCard) { | 401 | deferredResult.addCallback(MochiKit.Base.bind(function (aCard) { |
@@ -348,12 +410,10 @@ MochiKit.Base.update(Clipperz.PM.UI.MainController.prototype, { | |||
348 | }, | 410 | }, |
349 | 411 | ||
350 | runDirectLogin: function (someParameters) { | 412 | runDirectLogin: function (someParameters) { |
351 | console.log("RUN DIRECT LOGIN", someParameters); | 413 | //console.log("RUN DIRECT LOGIN", someParameters); |
352 | vardeferredResult; | 414 | vardeferredResult; |
353 | 415 | ||
354 | // this.pages()['cardListPage'].setProps({selectedCard:aRecordReference}); | ||
355 | deferredResult = new Clipperz.Async.Deferred('MainController.runDirectLogin', {trace:false}); | 416 | deferredResult = new Clipperz.Async.Deferred('MainController.runDirectLogin', {trace:false}); |
356 | // deferredResult.addMethod(this.user(), 'getRecord', aRecordReference['_reference']); | ||
357 | deferredResult.addMethod(this.user(), 'getRecord', someParameters['record']); | 417 | deferredResult.addMethod(this.user(), 'getRecord', someParameters['record']); |
358 | deferredResult.addMethodcaller('directLoginWithReference', someParameters['directLogin']); | 418 | deferredResult.addMethodcaller('directLoginWithReference', someParameters['directLogin']); |
359 | deferredResult.addCallback(Clipperz.PM.UI.DirectLoginRunner.openDirectLogin); | 419 | deferredResult.addCallback(Clipperz.PM.UI.DirectLoginRunner.openDirectLogin); |
@@ -363,13 +423,26 @@ console.log("RUN DIRECT LOGIN", someParameters); | |||
363 | }, | 423 | }, |
364 | 424 | ||
365 | shouldExitApp: function (anEvent) { | 425 | shouldExitApp: function (anEvent) { |
366 | console.log("SHOULD EXIT APP"); | 426 | //console.log("SHOULD EXIT APP"); |
367 | anEvent.preventDefault(); | 427 | anEvent.preventDefault(); |
368 | anEvent.stopPropagation(); | 428 | anEvent.stopPropagation(); |
369 | }, | 429 | }, |
370 | 430 | ||
371 | //========================================================================= | 431 | //========================================================================= |
372 | 432 | ||
433 | showPreferences: function (anEvent) { | ||
434 | vardeferredResult; | ||
435 | |||
436 | this.pages()['preferencePage'].setProps({}); | ||
437 | deferredResult = new Clipperz.Async.Deferred('MainController.showPreferences', {trace:false}); | ||
438 | deferredResult.addMethod(this, 'moveInPage', this.currentPage(), 'preferencePage', true); | ||
439 | deferredResult.callback(); | ||
440 | |||
441 | return deferredResult; | ||
442 | }, | ||
443 | |||
444 | //========================================================================= | ||
445 | |||
373 | genericErrorHandler: function (anEvent, anError) { | 446 | genericErrorHandler: function (anEvent, anError) { |
374 | var errorMessage; | 447 | var errorMessage; |
375 | varresult; | 448 | varresult; |
@@ -480,6 +553,25 @@ console.log("SHOULD EXIT APP"); | |||
480 | }, | 553 | }, |
481 | 554 | ||
482 | //========================================================================= | 555 | //========================================================================= |
556 | |||
557 | synchronizeLocalData: function (anEvent) { | ||
558 | vardeferredResult; | ||
559 | |||
560 | deferredResult = new Clipperz.Async.Deferred('MainController.synchronizeLocalData', {trace:true}); | ||
561 | // deferredResult.addMethod(this.proxy(), 'message', 'downloadAccountData', {}); | ||
562 | deferredResult.addMethod(this.user().connection(), 'message', 'downloadAccountData', {}); | ||
563 | deferredResult.addCallback(function (aResult) { | ||
564 | Clipperz.PM.DataModel.devicePreferences.setAccountDataWityResponse(aResult); | ||
565 | // localStorage.setItem('clipperz_dump_data', aResult['data']); | ||
566 | // localStorage.setItem('clipperz_dump_version', aResult['version']); | ||
567 | // localStorage.setItem('clipperz_dump_date', new Date()); | ||
568 | }) | ||
569 | deferredResult.callback(); | ||
570 | |||
571 | return deferredResult; | ||
572 | }, | ||
573 | |||
574 | //========================================================================= | ||
483 | /* | 575 | /* |
484 | wrongAppVersion: function (anError) { | 576 | wrongAppVersion: function (anError) { |
485 | // this.pages()['errorPage'].setProps({message:anError.message}); | 577 | // this.pages()['errorPage'].setProps({message:anError.message}); |