From b37126e1fdb6b22a32951cc0a38555ad730f6a96 Mon Sep 17 00:00:00 2001 From: Piotr Wronski Date: Mon, 2 Jun 2014 23:13:40 -0700 Subject: [PATCH] Revert "Updated application sources" This reverts commit 06c676ec7544e3b13473d0cb6b533f27487973f5. Change-Id: I7b1c11e2a21ed6eaa163913205aed4fc2aae36d1 --- project/.project | 17 +- project/config.xml | 84 ++- project/css/style.css | 187 +++--- project/index.html | 124 ++-- project/js/app.config.js | 53 +- project/js/app.js | 406 ++++++------ project/js/app.nfc.card.js | 188 +++--- project/js/app.nfc.js | 529 ++++++++------- project/js/app.nfc.peer.js | 134 ++-- project/js/app.ui.js | 1180 ++++++++++++++++------------------ project/js/app.ui.templateManager.js | 288 +++------ 11 files changed, 1504 insertions(+), 1686 deletions(-) diff --git a/project/.project b/project/.project index 196cd4d..8352d79 100644 --- a/project/.project +++ b/project/.project @@ -11,6 +11,11 @@ + org.eclipse.wst.jsdt.core.javascriptValidator + + + + json.validation.builder @@ -39,16 +44,6 @@ - - org.tizen.web.privilege.nature.PrivilegeBuilder - - - - - org.tizen.web.editor.css.nature.CSSBuilder - - - json.validation.nature @@ -58,7 +53,5 @@ org.eclipse.wst.common.project.facet.core.nature org.eclipse.wst.common.modulecore.ModuleCoreNature org.tizen.web.project.builder.WebNature - org.tizen.web.privilege.nature.PrivilegeNature - org.tizen.web.editor.css.nature.CSSNature diff --git a/project/config.xml b/project/config.xml index 7126ae9..b6a73ff 100644 --- a/project/config.xml +++ b/project/config.xml @@ -1,48 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Contacts Exchanger - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contacts Exchanger + + + + + + + + + diff --git a/project/css/style.css b/project/css/style.css index 9836078..b459631 100644 --- a/project/css/style.css +++ b/project/css/style.css @@ -1,129 +1,144 @@ -body { - -webkit-user-select: none; -} .ui-btn-start { - margin: 0px auto; - margin-top: 10px; - padding: 40px 0px 0px 0px; - width: 90%; - height: 50px; - font-size: 16px; -} + margin: 0px auto; + margin-top: 10px; + padding: 40px 0px 0px 0px; + width: 90%; + height: 50px; + font-size: 16px; +} + .defaultText { - font-size: 20px; - text-align: center; + font-size: 20px; + text-align: center; } + .comment { - font-size: 16px; - text-align: center; - color: black; - padding: 0px; - margin: 0px 0px 12px 0px; - white-space: nowrap; - width: 300px; - overflow: hidden; - text-overflow: ellipsis; -} + font-size: 16px; + text-align: center; + color: black; + padding: 0px; + margin: 0px 0px 12px 0px; + white-space: nowrap; + width: 300px; + overflow: hidden; + text-overflow: ellipsis; +} + #content-start { - display: table; + display: table; } + #comment { - left: 0px; - margin: 0 auto; - right: 0px; - width: inherit; + left: 0px; + margin: 0 auto; + right: 0px; + width: inherit; } + .box { - margin: 0px; - padding: 0 32px; - width: 296px; - text-align: center; - display: table-cell; - vertical-align: middle; -} + margin: 0px; + padding: 0 32px; + width: 296px; + text-align: center; + display: table-cell; + vertical-align: middle; +} + #waitingBox { - height: inherit; + height: inherit; } + .gap { - width: 100%; - height: 10px; + width: 100%; + height: 10px; } + #list-choose li a { - white-space: nowrap; - overflow: hidden !important; - text-overflow: ellipsis; - width: 60%; - float: left; + white-space: nowrap; + overflow: hidden !important; + text-overflow: ellipsis; + width: 60%; + float: left; } + #list-choose li .ui-li-text-sub { - white-space: nowrap; - overflow: hidden !important; - text-overflow: ellipsis; - width: 40%; + white-space: nowrap; + overflow: hidden !important; + text-overflow: ellipsis; + width: 40%; } + #list-choose li.ui-btn-down-s a { - color: black; + color: black; } + #comment-userName { - line-height: 30px; - font-size: 24px; + line-height: 30px; + font-size: 24px; } + #comment-name { - overflow: hidden !important; - text-overflow: ellipsis; - width: 90%; - margin-left: 5%; - font-size: 1rem; - font-weight: bold; -} + overflow: hidden !important; + text-overflow: ellipsis; + width: 90%; + margin-left: 5%; + font-size: 1rem; + font-weight: bold; +} + #comment-phone { - color: #85837E; - line-height: 20px; + color: #85837E; + line-height: 20px; } + #accept-choose { - width: auto; + width: auto; } + .defaultVeryBigText { - font-size: 30px; - margin: 0px; - padding: 0px; - text-align: center; - line-height: 30px; + font-size: 30px; + margin: 0px; + padding: 0px; + text-align: center; + line-height: 30px; } + .defaultCounterText { - margin-top: 10px; - margin-bottom: 10px; - font-size: 100px; - padding: 0px; - text-align: center; - line-height: 100px; -} + margin-top: 10px; + margin-bottom: 10px; + font-size: 100px; + padding: 0px; + text-align: center; + line-height: 100px; +} + .ui-btn-create span.ui-btn-text { - font-size: .8rem; + font-size: .8rem; } + #header-start .ui-title, #header-choose .ui-title, #header-contact .ui-title { - font-size: 1.1rem; + font-size: 1.1rem; } + /* overwrite web-ui-fw styles for popupwindow button */ - .ui-popupwindow .center_basic_1btn .popup-button-bg .ui-btn { - width: 90%; - height: auto; +.ui-popupwindow .center_basic_1btn .popup-button-bg .ui-btn { + width: 90%; + height: auto; } #list-choose li.selected { - background-color: #ccc; - margin-top: -1px; + background-color: #ccc; + margin-top: -1px; } + .ui-content { - padding: 0; + padding: 0; } + .ui-btn-back { - visibility:hidden; + visibility:hidden; } /* temporary workaround for N_SE-46139 */ - .ui-listview .ui-li > .ui-btn-inner { - padding: 0 0.5909090909090909rem !important; - margin: 0 !important; +.ui-listview .ui-li > .ui-btn-inner { + padding: 0 0.5909090909090909rem !important; + margin: 0 !important; } -li#vCard { - display: none; -} \ No newline at end of file diff --git a/project/index.html b/project/index.html index ae2f7d4..050679e 100644 --- a/project/index.html +++ b/project/index.html @@ -2,82 +2,82 @@ - - - + + + - Contacts exchanger + Contacts exchanger - - - + + + - - - - - - - + + + + + + + - + -
-
-

Contacts exchanger

-
-
-
-

Warning

-
- If you want to use "Contact Exchanger" you must agree to access - Contacts and NFC by this application. -
-
- OK -
-
-
+
+
+

Contacts exchanger

+
+
+
+

Warning

+
+ If you want to use "Contact Exchanger" you must agree to access + Contacts and NFC by this application. +
+
+ OK +
+
+
-
-
-

Contacts list

-
+
+
+

Contacts list

+
-
-
+
+
-
-
-

-
+
+
+

+
-
-
+
+
-
-
-

Add contact

- Save -
+
+
+

Add contact

+ Save +
-
+
- -
-
-
-
- -
-
+ +
+
+
+
+ +
+
diff --git a/project/js/app.config.js b/project/js/app.config.js index 568351f..e0332c3 100644 --- a/project/js/app.config.js +++ b/project/js/app.config.js @@ -1,45 +1,28 @@ -/* - * Copyright 2013 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** * @class Config */ - function Config() { - 'use strict'; + 'use strict'; } (function () { // strict mode wrapper - 'use strict'; - Config.prototype = { + 'use strict'; + Config.prototype = { - properties: { - 'templateDir': 'templates', - 'templateExtension': '.tpl' - }, + properties: { + 'templateDir': 'templates', + 'templateExtension': '.tpl' + }, - /** - * Returns config value - */ - get: function (value, defaultValue) { + /** + * Returns config value + */ + get: function (value, defaultValue) { - if (this.properties.hasOwnProperty(value)) { - return this.properties[value]; - } - return defaultValue; - } - }; -}()); \ No newline at end of file + if (this.properties.hasOwnProperty(value)) { + return this.properties[value]; + } + return defaultValue; + } + }; +}()); diff --git a/project/js/app.js b/project/js/app.js index 404b53b..c38e777 100644 --- a/project/js/app.js +++ b/project/js/app.js @@ -15,7 +15,7 @@ */ /*jslint devel: true*/ -/*global $, tizen, Config, localStorage */ +/*global $, tizen, Config */ var App = null; @@ -23,207 +23,213 @@ var App = null; var app = null; (function () { // strict mode wrapper - 'use strict'; - - /** - * Creates a new application object - * - * @class Application - */ - App = function App() {}; - - App.prototype = { - nfcAdapter: null, - addressBook: null, - started: false, - timeOutHandler: null, - counterState: true, - nfc: null, - - init: function appInit() { - this.config = new Config(); - this.ui = new App.Ui(this); - this.nfc = new App.NFCControl(this); - this.ui.defineEvents(); - this.initAddressBook(this.nfc.startNFC.bind(this.nfc)); - }, - - saveDefaultCard: function saveDefaultCard() { - var elementSelected = $('#list-choose li.selected'); - localStorage.started = true; - localStorage.id = elementSelected.data('id'); - localStorage.caller = elementSelected.data('caller'); - localStorage.firstName = elementSelected.data('firstName'); - localStorage.middleName = elementSelected.data('middleName'); - localStorage.lastName = elementSelected.data('lastName'); - localStorage.phoneNumber = elementSelected.data('phoneNumber'); - localStorage.vCard = elementSelected.data('vCard'); - this.started = true; - - $.mobile.changePage('#start'); - }, - - updateDefaultCard: function updateDefaultCard(contact) { - localStorage.caller = this.ui.prepareCallerName(contact); - localStorage.firstName = contact.name.firstName || ''; - localStorage.middleName = contact.name.middleName || ''; - localStorage.lastName = contact.name.lastName || ''; - localStorage.phoneNumber = contact.phoneNumbers[0].number; - localStorage.id = contact.id; - localStorage.vCard = contact.convertToString('VCARD_30'); - }, - - /** - * @param {Array} addressbooks - */ - getAddressBooksSuccess: function getAddressBooksSuccess(addressbooks) { - if (addressbooks.length > 0) { - var self = this, - resetLocalSorage = function () { - // Reset localStorage - localStorage.clear(); - self.started = false; - - // Load start page with temporary content - self.ui.moveToStartPage(); - self.ui.loadTemporaryContent(); - }; - this.addressBook = addressbooks[0]; - - if (localStorage.id) { - try { - this.updateDefaultCard( - this.addressBook.get(localStorage.id) - ); - } catch (err) { - if (err.name === 'NotFoundError') { - resetLocalSorage(); - } - } - } - - // Registers to be notified when the address book changes - this.addressBook.addChangeListener({ - oncontactsadded: function (contacts) { - // Refresh if choose page active - self.ui.refreshIfActivePage('choose'); - }, - oncontactsremoved: function (ids) { - // Refresh localStorage if default contact was deleted - if (ids.indexOf(localStorage.id) >= 0) { - resetLocalSorage(); - alert('Your default contact has been removed. ' + - 'Please choose another one.'); - } else { - // Refresh if choose page active - self.ui.refreshIfActivePage('choose'); - } - }, - oncontactsupdated: function (contacts) { - var index = contacts.length; - - // check if default contact was updated - while (index - 1) { - if (contacts[index].id === localStorage.id) { - try { - self.updateDefaultCard(contacts[index]); - } catch (e) { - resetLocalSorage(); - alert('That contact is no longer valid. ' + - 'Choose another one.'); - } finally { - break; - } - } - index -= 1; - } - - self.ui.refreshIfActivePage('start'); - } - }); - } else { - console.error('initAddressBook failed'); - } - }, - - /** - * - * @param {Error} e - */ - getAddressBooksError: function getAddressBooksError(e) { - console.error('getAddressBooks() error: ' + e.message); - }, - - initAddressBook: function initAddressBook(callback) { - try { - tizen.contact.getAddressBooks(function (addressbook) { - this.getAddressBooksSuccess(addressbook); - callback(); - }.bind(this), - this.getAddressBooksError.bind(this)); - } catch (e) { - if (e.name === 'SecurityError') { - this.ui.showPopupWarning(); - } - console.error('getAddressBooks() error: ' + e.message); - } - }, - - countDown: function countDown(time, obj) { - if (!this.counterState) { - setTimeout(function () { - this.countDown(time, obj); - }.bind(this), 500); - return; - } - - obj.text(time); - if (time > 0) { - if (this.nfc.isPowered()) { - time -= 1; - this.timeOutHandler = setTimeout(function () { - this.countDown(time, obj); - }.bind(this), 1000); - } else { - this.nfc.timeExpired(); - } - } else { - this.nfc.timeExpired(); - } - }, - - saveContact: function saveContact() { - var contact = null, - data = $('#contact').data('contactsData'); - if (!(data.phone && (data.first || data.last))) { - this.ui.moveToStartPage('Cannot add empty contact'); - console.error('saveContact error: empty contact'); - } else { - try { - contact = new tizen.Contact(data.vCard, 'VCARD_30'); - this.addressBook.add(contact); - this.ui.moveToStartPage('New contact added'); - } catch (err) { - this.ui.moveToStartPage('Problem with new contact adding'); - console.error('saveContact error:' + err.name); - } - } - }, - - /** - * Load contacts from the address book and pass the result to a callback - * - * @param {function} successCallback - * @param {function} errorCallback - */ - loadContacts: function loadContacts(successCallback, errorCallback) { - this.addressBook.find(successCallback, errorCallback); - } - - }; + 'use strict'; + + /** + * Creates a new application object + * + * @class Application + */ + App = function App() {}; + + App.prototype = { + nfcAdapter: null, + addressBook: null, + started: false, + timeOutHandler: null, + counterState: true, + nfc: null, + + init: function appInit() { + this.config = new Config(); + this.ui = new App.Ui(this); + this.nfc = new App.NFCControl(this); + this.ui.defineEvents(); + this.initAddressBook(this.nfc.startNFC.bind(this.nfc)); + }, + + saveDefaultCard: function saveDefaultCard() { + var elementSelected = $('#list-choose li.selected'); + localStorage.started = true; + localStorage.id = elementSelected.data('id'); + localStorage.caller = elementSelected.data('caller'); + localStorage.firstName = elementSelected.data('firstName'); + localStorage.lastName = elementSelected.data('lastName'); + localStorage.phoneNumber = elementSelected.data('phoneNumber'); + localStorage.vCard = elementSelected.data('vCard'); + this.started = true; + $.mobile.changePage('#start'); + }, + + updateDefaultCard: function updateDefaultCard (contact) { + localStorage.caller = this.ui.prepareCallerName(contact); + localStorage.firstName = contact.name.firstName || ''; + localStorage.lastName = contact.name.lastName || ''; + localStorage.phoneNumber = contact.phoneNumbers[0].number; + localStorage.id = contact.id; + localStorage.vCard = contact.convertToString('VCARD_30'); + }, + + /** + * @param {Array} addressbooks + */ + getAddressBooksSuccess: function getAddressBooksSuccess(addressbooks) { + if (addressbooks.length > 0) { + var self = this, + resetLocalSorage = function () { + // Reset localStorage + localStorage.clear(); + self.started = false; + + // Load start page with temporary content + self.ui.moveToStartPage(); + self.ui.loadTemporaryContent(); + }; + this.addressBook = addressbooks[0]; + + if (localStorage.id) { + try { + this.updateDefaultCard( + this.addressBook.get(localStorage.id) + ); + } catch (err) { + if (err.name === "NotFoundError") { + resetLocalSorage(); + } + } + } + + // Registers to be notified when the address book changes + this.addressBook.addChangeListener({ + oncontactsadded: function(contacts) { + // Refresh if choose page active + self.ui.refreshIfActivePage("choose"); + }, + oncontactsremoved: function(ids) { + // Refresh localStorage if default contact was deleted + if (ids.indexOf(localStorage.id) >= 0) { + resetLocalSorage(); + alert("Your default contact has been removed. Please choose another one."); + } else { + // Refresh if choose page active + self.ui.refreshIfActivePage("choose"); + } + }, + oncontactsupdated: function (contacts) { + var index = contacts.length; + + // check if default contact was updated + while (index--) { + if (contacts[index].id === localStorage.id) { + self.updateDefaultCard(contacts[index]); + break; + } + } + + self.ui.refreshIfActivePage("start"); + } + }); + } else { + console.error('initAddressBook failed'); + } + }, + + /** + * + * @param {Error} e + */ + getAddressBooksError: function getAddressBooksError(e) { + console.error('getAddressBooks() error: ' + e.message); + }, + + initAddressBook: function initAddressBook(callback) { + try { + tizen.contact.getAddressBooks( + function (addressbook) { + this.getAddressBooksSuccess(addressbook) + callback(); + }.bind(this), + this.getAddressBooksError.bind(this) + ); + } catch (e) { + if (e.name === "SecurityError") { + this.ui.showPopupWarning(); + } + console.error('getAddressBooks() error: ' + e.message); + } + }, + + countDown: function countDown(time, obj) { + if (!this.counterState) { + setTimeout(function () { + this.countDown(time, obj); + }.bind(this), 500); + return; + } + + obj.text(time); + if (time > 0) { + if (this.nfc.isPowered()) { + time -= 1; + this.timeOutHandler = setTimeout(function () { + this.countDown(time, obj); + }.bind(this), 1000); + } else { + this.nfc.timeExpired(); + } + } else { + this.nfc.timeExpired(); + } + }, + + saveContact: function saveContact() { + var contact = null, i, empty = true, + data = $('#contact').data('contactsData'); + + for (i in data) { + if (data.hasOwnProperty(i) && empty) { + if (data[i] !== '') { + empty = false; + } + } + } + + if (empty) { + this.ui.moveToStartPage('Cannot add empty contact'); + console.error('saveContact error: empty contact'); + } else { + try { + contact = new tizen.Contact({ + name: new tizen.ContactName({ + caller: data.caller, + firstName: data.first, + lastName: data.last + }), + phoneNumbers: [new tizen.ContactPhoneNumber(data.phone)] + }); + this.addressBook.add(contact); + this.ui.moveToStartPage('New contact added'); + } catch (err) { + this.ui.moveToStartPage('Problem with new contact adding'); + console.error('saveContact error:' + err.name); + } + } + }, + + /** + * Load contacts from the address book and pass the result to a callback + * + * @param {function} successCallback + * @param {function} errorCallback + */ + loadContacts: function loadContacts(successCallback, errorCallback) { + this.addressBook.find(successCallback, errorCallback); + } + + }; }()); app = new App(); -$(document).ready(app.init.bind(app)); \ No newline at end of file +$(document).ready(app.init.bind(app)); diff --git a/project/js/app.nfc.card.js b/project/js/app.nfc.card.js index a9e5e95..d6ad313 100644 --- a/project/js/app.nfc.card.js +++ b/project/js/app.nfc.card.js @@ -1,121 +1,99 @@ -/* - * Copyright 2013 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /*jslint devel: true*/ -/*global $, tizen, App, app, localStorage */ +/*global $, tizen, App, app */ (function () { // strict mode wrapper - 'use strict'; + 'use strict'; - /** - * Constructs NFCCard - * @constructor - * @param {NFCControl} nfc - */ - App.NFCCard = function nfc_NFCCard(nfc) { - this.nfc = nfc; - }; + /** + * Constructs NFCCard + * @constructor + * @param {NFCControl} nfc + */ + App.NFCCard = function nfc_NFCCard(nfc) { + this.nfc = nfc; + }; - App.NFCCard.prototype = { + App.NFCCard.prototype = { - readMessageErr: function nfc_card_readMessageErr(e) { - console.error('Read error! ' + e.message, e); - this.nfc.timeExpired('Read error! ' + e.message); - }, + readMessageErr: function nfc_card_readMessageErr(e) { + console.error('Read error! ' + e.message, e); + this.nfc.timeExpired('Read error! ' + e.message); + }, - /** - * Read contents from a tag - * @param {NFCTag} tag - */ - sucTagReadAttach: function nfc_card_sucTagReadAttach(tag) { - try { - if (!tag.isSupportedNDEF) { - throw { - message: "This tag doesn't support NDEF" - }; - } - tag.readNDEF( - this.nfc.readMessage.bind(this.nfc), - this.readMessageErr.bind(this) - ); - } catch (e) { - this.readMessageErr(e); - } - }, + /** + * Read contents from a tag + * @param {NFCTag} tag + */ + sucTagReadAttach: function nfc_card_sucTagReadAttach(tag) { + try { + if (!tag.isSupportedNDEF) { + throw {message: "This tag doesn't support NDEF"}; + } + tag.readNDEF( + this.nfc.readMessage.bind(this.nfc), + this.readMessageErr.bind(this) + ); + } catch (e) { + this.readMessageErr(e); + } + }, - /** - * Set tag listener - */ - setTagDetectRead: function nfc_card_setTagDetectRead() { - try { - this.nfc.nfcAdapter.unsetTagListener(); - this.nfc.nfcAdapter.setTagListener({ - onattach: this.sucTagReadAttach.bind(this), - ondetach: this.nfc.sucDetach.bind(this.nfc) - }); - } catch (error) { - this.readMessageErr(error); - } - }, + /** + * Set tag listener + */ + setTagDetectRead: function nfc_card_setTagDetectRead() { + try { + this.nfc.nfcAdapter.setTagListener({ + onattach: this.sucTagReadAttach.bind(this), + ondetach: this.nfc.sucDetach.bind(this.nfc) + }); + } catch (error) { + this.readMessageErr(error); + } + }, - sucSend: function nfc_card_sucSend() { - this.nfc.timeExpired('Send success!'); - }, + sucSend: function nfc_card_sucSend() { + this.nfc.timeExpired('Send success!'); + }, - errSend: function nfc_card_errSend(e) { - console.warn('errSend', e); - this.nfc.timeExpired('Write error! ' + e.message); - }, + errSend: function nfc_card_errSend(e) { + console.warn('errSend', e); + this.nfc.timeExpired('Write error! ' + e.message); + }, - sucTagWriteAttach: function nfc_card_sucTagWriteAttach(tag) { - var newMessage = null, - fullContact = ''; + sucTagWriteAttach: function nfc_card_sucTagWriteAttach(tag) { + var newMessage = null, + fullContact = ''; - try { - fullContact = this.nfc.prepareForNFC(localStorage); - newMessage = this.nfc.phoneNumber2NDEF(fullContact); - if (!tag.isSupportedNDEF) { - throw { - message: "This tag doesn't support NDEF" - }; - } - tag.writeNDEF( - newMessage, - this.sucSend.bind(this), - this.errSend.bind(this) - ); - } catch (e) { - this.errSend(e); - } - }, + try { + fullContact = this.nfc.prepareForNFC(localStorage); + newMessage = this.nfc.phoneNumber2NDEF(fullContact); + if (!tag.isSupportedNDEF) { + throw {message: "This tag doesn't support NDEF"}; + } + tag.writeNDEF( + newMessage, + this.sucSend.bind(this), + this.errSend.bind(this) + ); + } catch (e) { + this.errSend(e); + } + }, - setTagDetectWrite: function nfc_card_setTagDetectWrite() { - var suc = { - onattach: this.sucTagWriteAttach.bind(this), - ondetach: this.nfc.sucDetach.bind(this.nfc) - }; + setTagDetectWrite: function nfc_card_setTagDetectWrite() { + var suc = { + onattach: this.sucTagWriteAttach.bind(this), + ondetach: this.nfc.sucDetach.bind(this.nfc) + }; - try { - this.nfc.nfcAdapter.unsetTagListener(); - this.nfc.nfcAdapter.setTagListener(suc); - } catch (error) { - console.error(error); - } - } + try { + this.nfc.nfcAdapter.setTagListener(suc); + } catch (error) { + console.error(error); + } + } - }; + }; -}()); \ No newline at end of file +}()); diff --git a/project/js/app.nfc.js b/project/js/app.nfc.js index 3bedee0..4d86ffb 100644 --- a/project/js/app.nfc.js +++ b/project/js/app.nfc.js @@ -1,297 +1,288 @@ -/* - * Copyright 2013 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /*jslint devel: true*/ -/*global $, tizen, App, app */ +/*global $, tizen, App, app */ + (function () { // strict mode wrapper - 'use strict'; + 'use strict'; + + /** + * Constructs NFCControl + * @constructor + * @param {App} app + */ + App.NFCControl = function NFCControl(app) { + this.app = app; + this.init(); + }; + + App.NFCControl.prototype = { + nfcTarget: null, + nfcStateMemory: false, + + /** + * Initialize NFC application module + */ + init: function nfc_init() { + this.card = new App.NFCCard(this); + this.peer = new App.NFCPeer(this); + this.separator = String.fromCharCode(30); + this.endOfText = String.fromCharCode(3); + }, + /** + * Disable tag/target detection and move to start page + * + * @param {string} monit message text to be displayed + */ + timeExpired: function nfc_timeExpired(monit) { + clearTimeout(this.app.timeOutHandler); + this.unsetTargetDetect(); + this.unsetTagDetect(); + this.app.ui.moveToStartPage(monit); + }, - /** - * Constructs NFCControl - * @constructor - * @param {App} app - */ - App.NFCControl = function NFCControl(app) { - this.app = app; - this.init(); - }; + /** + * Get the field separator + * + * @returns {string} + */ + getSeparator: function nfc_getSeparator() { + return this.separator; + }, - App.NFCControl.prototype = { - nfcTarget: null, - nfcStateMemory: false, + /** + * Get the end of text marker + * + * @returns {string} + */ + getEndOfText: function nfc_getEndOfText() { + return this.endOfText; + }, - /** - * Initialize NFC application module - */ - init: function nfc_init() { - this.card = new App.NFCCard(this); - this.peer = new App.NFCPeer(this); - this.endOfText = String.fromCharCode(3); - }, - /** - * Disable tag/target detection and move to start page - * - * @param {string} monit message text to be displayed - */ - timeExpired: function nfc_timeExpired(monit) { - clearTimeout(this.app.timeOutHandler); - if (tizen.nfc.getDefaultAdapter().powered) { - this.unsetTargetDetect(); - this.unsetTagDetect(); - } - this.app.ui.moveToStartPage(monit); - }, + createContactString: function createContactString(contact) { + var contactString; + contactString = contact.phoneNumber + this.getSeparator(); + contactString += contact.firstName + this.getSeparator(); + contactString += contact.lastName; + return contactString; + }, - /** - * Get the end of text marker - * - * @returns {string} - */ - getEndOfText: function nfc_getEndOfText() { - return this.endOfText; - }, + /** + * + * @param {string|object} contact + * @returns {string} + */ + prepareForNFC: function nfc_prepareForNFC(contact) { + if ($.type(contact) !== 'string') { + contact = this.createContactString(contact); + } + if (contact.length > 31) { + contact = contact.substring(0, 31); + if (contact[29] !== this.getSeparator()) { + contact = contact.substring(0, 30) + this.getEndOfText(); + } + } + return contact; + }, - /** - * - * @param {string|object} contact - * @returns {string} - */ - prepareForNFC: function nfc_prepareForNFC(contact) { - return contact.vCard; - }, + resolveData: function nfc_resolveData(value, endOfText) { + if (!value) { + return ''; + } - resolveData: function nfc_resolveData(value, endOfText) { - if (!value) { - return ''; - } - endOfText = endOfText || this.getEndOfText(); - return value.replace(endOfText, '…'); - }, + endOfText = endOfText || this.getEndOfText(); + return value.replace(endOfText, '…'); + }, - resolveContact: function nfc_resolveContact(contactsString) { - var receivedContact = new tizen.Contact(contactsString, 'VCARD_30'); + resolveContact: function nfc_resolveContact(contactsString) { + var separator = this.getSeparator(), + contactsArray = contactsString.split(separator); - return { - phone: receivedContact.phoneNumbers[0].number, - phone_type: receivedContact.phoneNumbers[0].types[0], - first: receivedContact.name.firstName, - middle: receivedContact.name.middleName, - last: receivedContact.name.lastName, - vCard: receivedContact.convertToString('VCARD_30') - }; - }, + return { + phone: this.resolveData(contactsArray[0]), + first: this.resolveData(contactsArray[1]), + last: this.resolveData(contactsArray[2]) + }; + }, - /** - * - * @param {type} record - * @returns {undefined} - */ - fillRecordInfo: function nfc_fillRecordInfo(record) { - try { - var contactsData = this.resolveContact( - this.convertNDEF2phoneNumber(record.payload) - ); - this.app.nfc.displayContact(contactsData); - } catch (error) { - console.error(error); - } - }, + /** + * + * @param {type} record + * @returns {undefined} + */ + fillRecordInfo: function nfc_fillRecordInfo(record) { + try { + var contactsData = this.resolveContact(this.convertNDEF2phoneNumber(record.payload)); + this.app.nfc.displayContact(contactsData); + } catch (error) { + console.error(error); + } + }, - /** - * - * @param {NDEFMessage} message - */ - readMessage: function nfc_readMessage(message) { - try { - this.fillRecordInfo(message.records[0]); - } catch (e) { - console.error(e.message); - } - }, + /** + * + * @param {NDEFMessage} message + */ + readMessage: function nfc_readMessage(message) { + try { + this.fillRecordInfo(message.records[0]); + } catch (e) { + console.error(e.message); + } + }, - /** - * - * @param {string|object} contact - * @returns {NDEFMessage} - */ - contact2NDEF: function nfc_contact2NDEF(contact) { - var t, a = [], - len, i, newMessage = new tizen.NDEFMessage(); - if (typeof contact === 'string') { - t = contact; - } else { - t = contact.convertToString('VCARD_30'); - } - len = t.length; - for (i = 0; i < len; i += 1) { - a[i] = t.charCodeAt(i); - } - newMessage.records[0] = - new tizen.NDEFRecordMedia('text/x-vcard', a); - return newMessage; - }, + /** + * + * @param {string|object} contact + * @returns {NDEFMessage} + */ + contact2NDEF: function nfc_contact2NDEF(contact) { + var t, a = [], len, i, newMessage = new tizen.NDEFMessage(); + if (typeof contact === 'string') { + t = contact; + } else { + t = contact.convertToString("VCARD_30"); + } + len = t.length; + for (i = 0; i < len; i += 1) { + a[i] = t.charCodeAt(i); + } + newMessage.records[0] = new tizen.NDEFRecordMedia('text/x-vcard', a); + return newMessage; + }, - /** - * - * @param {string} contact - * @returns {NDEFMessage} - */ - phoneNumber2NDEF: function nfc_phoneNumber2NDEF(contact) { - var phoneNumberArray = [], - i, - length = contact.length, - newMessage = new tizen.NDEFMessage(); - for (i = 0; i < length; i += 1) { - phoneNumberArray.push(contact.charCodeAt(i)); - } - newMessage.records[0] = - new tizen.NDEFRecordMedia('text/x-vcard', phoneNumberArray); - return newMessage; - }, + /** + * + * @param {string} contact + * @returns {NDEFMessage} + */ + phoneNumber2NDEF: function nfc_phoneNumber2NDEF(contact) { + var phoneNumberArray = [], i, length = contact.length, newMessage = new tizen.NDEFMessage(); + for (i = 0; i < length; i += 1) { + phoneNumberArray.push(contact.charCodeAt(i)); + } + newMessage.records[0] = new tizen.NDEFRecordMedia('text/x-vcard', phoneNumberArray); + return newMessage; + }, - /** - * - * @param {string} contact - * @returns {string} - */ - convertNDEF2phoneNumber: function nfc_convertNDEF2phoneNumber(contact) { - var i, length = contact.length, - phoneNumber = ''; - for (i = 0; i < length; i += 1) { - phoneNumber += String.fromCharCode(contact[i]); - } - return phoneNumber; - }, + /** + * + * @param {string} contact + * @returns {string} + */ + convertNDEF2phoneNumber: function nfc_convertNDEF2phoneNumber(contact) { + var i, length = contact.length, phoneNumber = ''; + for (i = 0; i < length; i += 1) { + phoneNumber += String.fromCharCode(contact[i]); + } + return phoneNumber; + }, - /** - * NFC setPowered success callback - * @returns {undefined} - */ - onPowerOn: function nfc_onPowerOn() { - console.log('Power On succeeded.'); - this.app.started = true; - this.app.ui.loadStartPage(); - }, + /** + * NFC setPowered success callback + * @returns {undefined} + */ + onPowerOn: function nfc_onPowerOn() { + console.log('Power On succeeded.'); + this.app.started = true; + this.app.ui.loadStartPage(); + }, - /** - * NFC setPowered error callback - * @param {Error} err - * @returns {undefined} - */ - onPowerOnFails: function nfc_onPowerOnFails(err) { - console.error('Power On error: ' + err.message); - this.app.ui.showPopupWarning(); - }, + /** + * NFC setPowered error callback + * @param {Error} err + * @returns {undefined} + */ + onPowerOnFails: function nfc_onPowerOnFails(err) { + console.error('Power On error: ' + err.message); + this.app.ui.showPopupWarning(); + }, - /** - * NFC setPowered success callback - * @returns {undefined} - */ - onPowerOff: function nfc_onPowerOff() { - tizen.application.getCurrentApplication().exit(); - }, + /** + * NFC setPowered success callback + * @returns {undefined} + */ + onPowerOff: function nfc_onPowerOff() { + tizen.application.getCurrentApplication().exit(); + }, - /** - * NFC setPowered error callback - * @param {Error} err - * @returns {undefined} - */ - onPowerOffFails: function nfc_onPowerOffFails(err) { - console.error('Power Off error', err); - tizen.application.getCurrentApplication().exit(); - }, + /** + * NFC setPowered error callback + * @param {Error} err + * @returns {undefined} + */ + onPowerOffFails: function nfc_onPowerOffFails(err) { + console.error('Power Off error', err); + tizen.application.getCurrentApplication().exit(); + }, - isPowered: function nfc_isPowered() { - return this.nfcAdapter.powered; - }, + isPowered: function nfc_isPowered() { + return this.nfcAdapter.powered; + }, - startNFC: function nfc_startNFC() { - try { - this.nfcAdapter = tizen.nfc.getDefaultAdapter(); - if (this.nfcAdapter.powered) { - this.nfcStateMemory = true; - this.onPowerOn(); - return; - } - this.nfcStateMemory = false; - console.log('Turning NFC adapter On...'); - this.nfcAdapter.setPowered( - true, - this.onPowerOn.bind(this), - this.onPowerOnFails.bind(this) - ); - } catch (e) { - console.error('startNFC problem', e); - this.app.ui.showPopupWarning(); - } - }, + startNFC: function nfc_startNFC() { + try { + this.nfcAdapter = tizen.nfc.getDefaultAdapter(); + if (this.nfcAdapter.powered) { + this.nfcStateMemory = true; + this.onPowerOn(); + return; + } + this.nfcStateMemory = false; + console.log('Turning NFC adapter On...'); + this.nfcAdapter.setPowered(true, this.onPowerOn.bind(this), this.onPowerOnFails.bind(this)); + } catch (e) { + console.error('startNFC problem', e); + this.app.ui.showPopupWarning(); + } + }, - stopNFC: function nfc_stopNFC() { - try { - if (this.nfcStateMemory) { - this.onPowerOff(); - } else { - this.nfcAdapter.setPowered( - false, - this.onPowerOff.bind(this), - this.onPowerOffFails.bind(this) - ); - } - } catch (err) { - console.error('setPowered(false) problem', err); - } - }, + stopNFC: function nfc_stopNFC() { + try { + if (this.nfcStateMemory) { + this.onPowerOff(); + } else { + this.nfcAdapter.setPowered(false, this.onPowerOff.bind(this), this.onPowerOffFails.bind(this)); + } + } catch (err) { + console.error('setPowered(false) problem', err); + } + }, - unsetTargetDetect: function nfc_unsetTargetDetect() { - try { - if (this.nfcTarget) { - this.nfcTarget.unsetReceiveNDEFListener(); - this.nfcTarget = null; - } else { - //console.info('app.nfc.nfcTarget not set'); - } - } catch (error) { - console.error('error: ' + error.message); - } - try { - this.nfcAdapter.unsetPeerListener(); - } catch (e) { - console.error('error: ' + e.message); - } - }, + unsetTargetDetect: function nfc_unsetTargetDetect() { + try { + if (this.nfcTarget) { + this.nfcTarget.unsetReceiveNDEFListener(); + this.nfcTarget = null; + } else { + //console.warn("app.nfc.nfcTarget not set"); + } + } catch (error) { + console.error('error: ' + error.message); + } + try { + this.nfcAdapter.unsetPeerListener(); + } catch (e) { + console.error('error: ' + e.message); + } + }, - unsetTagDetect: function nfc_unsetTagDetect() { - try { - this.nfcAdapter.unsetTagListener(); - } catch (error) { - console.error('error: ' + error.message); - } - }, + unsetTagDetect: function nfc_unsetTagDetect() { + try { + this.nfcAdapter.unsetTagListener(); + } catch (error) { + console.error('error: ' + error.message); + } + }, - displayContact: function nfc_displayContact(obj) { - clearTimeout(this.app.timeOutHandler); - if (tizen.nfc.getDefaultAdapter().powered) { - this.unsetTargetDetect(); - this.unsetTagDetect(); - } - this.app.ui.moveToContactPage(obj); - }, + displayContact: function nfc_displayContact(obj) { + clearTimeout(this.app.timeOutHandler); + this.unsetTargetDetect(); + this.unsetTagDetect(); + this.app.ui.moveToContactPage(obj); + }, - sucDetach: function nfc_sucDetach() {} - }; + sucDetach: function nfc_sucDetach() { + } + }; -}()); \ No newline at end of file +}()); diff --git a/project/js/app.nfc.peer.js b/project/js/app.nfc.peer.js index df46512..f1999b7 100644 --- a/project/js/app.nfc.peer.js +++ b/project/js/app.nfc.peer.js @@ -1,88 +1,72 @@ -/* - * Copyright 2013 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /*jslint devel: true*/ -/*global $, tizen, App, app, localStorage*/ +/*global $, tizen, App, app */ (function () { // strict mode wrapper - 'use strict'; + 'use strict'; + + /** + * Constructs NFCPeer + * @constructor + * @param {NFCControl} nfc + */ + App.NFCPeer = function (nfc) { + this.nfc = nfc; + }; - /** - * Constructs NFCPeer - * @constructor - * @param {NFCControl} nfc - */ - App.NFCPeer = function (nfc) { - this.nfc = nfc; - }; + App.NFCPeer.prototype = { - App.NFCPeer.prototype = { + sucSendToTarget: function nfc_peer_sucSendToTarget() { + }, - sucSendToTarget: function nfc_peer_sucSendToTarget() {}, + errSendToTarget: function nfc_peer_errSendToTarget(e) { + this.nfc.timeExpired('Send problem! ' + e.message); + }, - errSendToTarget: function nfc_peer_errSendToTarget(e) { - this.nfc.timeExpired('Send problem! ' + e.message); - }, + setReceiveFromTarget: function nfc_peer_setReceiveFromTarget() { + try { + if (!this.nfc.nfcTarget) { + console.warn("app.nfc.nfcTarget not set"); + return; + } + this.nfc.nfcTarget.setReceiveNDEFListener( + this.nfc.readMessage.bind(this.nfc) + ); + } catch (error) { + console.error('setReceiveFromTarget error: ' + error.message); + } + }, - setReceiveFromTarget: function nfc_peer_setReceiveFromTarget() { - try { - if (!this.nfc.nfcTarget) { - console.warn("app.nfc.nfcTarget not set"); - return; - } - this.nfc.nfcTarget.unsetReceiveNDEFListener(); - this.nfc.nfcTarget.setReceiveNDEFListener( - this.nfc.readMessage.bind(this.nfc) - ); - } catch (error) { - console.error('setReceiveFromTarget error: ' + error.message); - } - }, + sucTargetAttach: function nfc_peer_sucTargetAttach(target) { + var newMessage = null, + fullContact = this.nfc.prepareForNFC(localStorage); - sucTargetAttach: function nfc_peer_sucTargetAttach(target) { - var newMessage = null, - fullContact = this.nfc.prepareForNFC(localStorage); - this.nfc.nfcTarget = target; - this.setReceiveFromTarget(); + this.nfc.nfcTarget = target; + this.setReceiveFromTarget(); - try { - newMessage = this.nfc.phoneNumber2NDEF(fullContact); - target.sendNDEF( - newMessage, - this.sucSendToTarget.bind(this), - this.errSendToTarget.bind(this) - ); - } catch (e) { - console.error("NDEFMessage problem: " + e.message); - } - }, + try { + newMessage = this.nfc.phoneNumber2NDEF(fullContact); + target.sendNDEF( + newMessage, + this.sucSendToTarget.bind(this), + this.errSendToTarget.bind(this) + ); + } catch (e) { + console.error("NDEFMessage problem: " + e.message); + } + }, - setTargetDetect: function nfc_peer_setTargetDetect() { - var successCallbacks = { - onattach: this.sucTargetAttach.bind(this), - ondetach: this.nfc.sucDetach.bind(this.nfc) - }; + setTargetDetect: function nfc_peer_setTargetDetect() { + var successCallbacks = { + onattach: this.sucTargetAttach.bind(this), + ondetach: this.nfc.sucDetach.bind(this.nfc) + }; - try { - this.nfc.nfcAdapter.unsetPeerListener(); - this.nfc.nfcAdapter.setPeerListener(successCallbacks); - } catch (error) { - console.error(error.message); - } - } - }; + try { + this.nfc.nfcAdapter.setPeerListener(successCallbacks); + } catch (error) { + console.error(error.message); + } + } + }; -}()); \ No newline at end of file +}()); diff --git a/project/js/app.ui.js b/project/js/app.ui.js index ae3dab7..3f7b1b7 100644 --- a/project/js/app.ui.js +++ b/project/js/app.ui.js @@ -1,619 +1,571 @@ -/* - * Copyright 2013 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /*jslint devel: true*/ -/*global $, tizen, App, app, localStorage: true, TemplateManager,document */ -/*global window, setTimeout */ +/*global $, tizen, App, app, localStorage: true, TemplateManager, document, window, setTimeout */ App.Ui = null; (function () { // strict mode wrapper - 'use strict'; - - App.Ui = function App_Ui(app) { - this.app = app; - this.templateManager = new TemplateManager(app.config); - }; - - App.Ui.prototype = { - prepareCallerName: function ui_prepareCallerName(contact) { - var name = contact.name.displayName; - return (name && name.length > 0) ? name : 'No Name'; - }, - - /** - * Show a popup - * @param {string} message - */ - showPopup: function ui_showPopup(message) { - var popup = $('#alertPopup'); - if (!popup.hasClass('ui-popup')) { - popup.popup().trigger('create'); - } - $('.ui-popup-text', popup).text(message); - popup.popup('open', { - positionTo: 'window' - }); - }, - - closePopup: function ui_closePopup() { - var activePopup = $.mobile.popup.active; - if (activePopup) { - if (activePopup.attr('id') === 'alertPopup') { - activePopup.close(); - } - } - }, - - createListRecord: function ui_createListRecord() { - $.mobile.changePage('#choose'); - }, - - /** - * - * @param {string} text - * @returns {string} - */ - getWaitingContentHtml: function getWaitingContentHtml(text) { - var html; - html += '

'; - html += text; - html += '

'; - - html += '

'; - - return html; - }, - - /** - * - * @param {string} title - * @param {string} text - */ - prepareWaitingPage: function ui_prepareWaitingPage(title, text) { - var waitingBox, waitingContent, - contentTransfer = $('#content-transfer'); - waitingBox = $('
'); - waitingContent = $(this.getWaitingContentHtml(text)); - $('#header-transfer H1').text(title); - contentTransfer.empty(); - waitingBox.append(waitingContent); - contentTransfer.append(waitingBox); - $('#content-start').trigger('create'); - this.app.countDown(10, $('#counter')); - }, - - /** - * @returns {string} - */ - getTemporaryBoxHtml: function ui_getTemporaryBoxHtml() { - return '
'; - }, - - /** - * @returns {string} - */ - showPopupWarning: function ui_showPopupWarning() { - setTimeout(function () { - $('#contact-nfc-error').popup('open', { - 'positionTo': 'window' - }); - }, 500); - }, - - getTemporaryBoxContentHtml: function ui_getTemporaryBoxContentHtml() { - return '

' - + 'Default card is not defined yet!
' - + 'Do you want to define it now?' + '

'; - }, - - loadTemporaryContent: function ui_loadTemporaryContent() { - var temporaryBox, temporaryContent, temporaryButton; - - temporaryBox = $(this.getTemporaryBoxHtml()); - temporaryContent = $(this.getTemporaryBoxContentHtml()); - temporaryButton = $(this.getButtonHtml('Create default card')); - - temporaryButton.on('click', function (event) { - event.preventDefault(); - $.mobile.changePage('#choose'); - }); - - temporaryBox.append(temporaryContent).append(temporaryButton); - - $('#content-start').empty().append(temporaryBox).trigger('create'); - }, - /** - * - * @param {string} text button text - * @returns {string} - */ - getButtonHtml: function ui_getButtonHtml(text) { - return '
' - + text + '
'; - }, - - /** - * - * @param {string} firstName - * @param {string} lastName - * @returns {string} - */ - getCommentHtml: function ui_getCommentHtml(data) { - var def_name = $('

') - .text(data.caller).html(); - return '

' - + '

Your default contact

' - + '

' - + def_name + '

' + '

' - + data.phoneNumber + '

' + '
'; - }, - - - /** - * Change Contact button action - * @event - * @param {Event} event - */ - changeContact: function ui_changeContact(event) { - event.preventDefault(); - $.mobile.changePage('#choose'); - }, - - /** - * @returns {jQuery} - */ - getChangeContactButton: function ui_getChangeContactButton() { - var changeContactButton; - changeContactButton = - $(this.getButtonHtml('Change your default contact')); - changeContactButton.on('click', this.changeContact); - return changeContactButton; - }, - - /** - * Read From Card button action - * @event - * @param {Event} event - */ - readFromCard: function ui_readFromCard(event) { - event.preventDefault(); - if (tizen.nfc.getDefaultAdapter().powered) { - try { - $('#transfer').data('option', 'read'); - $.mobile.changePage('#transfer'); - } catch (e) { - console.error(e.message); - } - } else { - $.mobile.changePage('#start'); - alert('Please turn on NFC adapter'); - } - }, - - /** - * @returns {jQuery} - */ - getReadFromCardButton: function ui_getReadFromCardButton() { - var readFromCardButton; - readFromCardButton = $(this.getButtonHtml('Read from card')); - readFromCardButton.on('click', this.readFromCard); - return readFromCardButton; - }, - - /** - * Write To Card button action - * @param {Event} event - */ - writeToCard: function ui_writeToCard(event) { - event.preventDefault(); - if (tizen.nfc.getDefaultAdapter().powered) { - try { - $('#transfer').data('option', 'write'); - $.mobile.changePage('#transfer'); - } catch (e) { - console.error(e.message); - } - } else { - alert('Please turn on NFC adapter'); - } - }, - - /** - * @returns {jQuery} - */ - getWriteToCardButton: function ui_getWriteToCardButton() { - var writeToCardButton; - writeToCardButton = $(this.getButtonHtml('Write to card')); - writeToCardButton.on('click', this.writeToCard); - return writeToCardButton; - }, - - /** - * Communicate With Other Device button action - * @param {type} event - */ - commWithOtherDevice: function ui_commWithOtherDevice(event) { - event.preventDefault(); - if (tizen.nfc.getDefaultAdapter().powered) { - try { - $('#transfer').data('option', 'communicate'); - $.mobile.changePage('#transfer'); - } catch (e) { - console.error(e.message); - } - } else { - alert('Please turn on NFC adapter'); - } - }, - - /** - * @returns {jQuery} - */ - getCommWithOtherDeviceBtnn: function ui_getCommWithOtherDeviceBtnn() { - var communicateWithOtherDeviceButton; - communicateWithOtherDeviceButton = - $(this.getButtonHtml('Communicate with another device')); - communicateWithOtherDeviceButton - .on('click', this.commWithOtherDevice); - return communicateWithOtherDeviceButton; - }, - - loadStartContent: function ui_loadStartContent() { - var startBox, contentStart, gap, comment; - contentStart = $('#content-start'); - startBox = $('
'); - gap = $('
'); - comment = $(this.getCommentHtml(localStorage)); - - contentStart.empty(); - startBox - .append(this.getChangeContactButton()) - .append(gap.clone()) - .append(this.getReadFromCardButton()) - .append(gap.clone()) - .append(this.getWriteToCardButton()) - .append(gap.clone()) - .append(this.getCommWithOtherDeviceBtnn()) - .prepend(comment); - - contentStart.append(startBox); - contentStart.trigger('create'); - }, - - loadStartPage: function ui_loadStartPage() { - if (localStorage.started === undefined) { - this.loadTemporaryContent(); - } else { - this.loadStartContent(); - } - }, - - /** - * - * @param {string} value - * @param {string} label - * @returns {string} - */ - getLiHtml: function ui_getLiHtml(value, label) { - var html; - html = '
  • ' - + '' + '' + label + '' - + '' + ((!value) ? '...' : value) - + '' + '' + '
  • '; - return html; - }, - - /** - * - * @param {string} phone - * @param {string} first - * @param {string} last - * @returns {string} - */ - getContactsUlHtml: function ui_getContactsUlHtml( - phone, - phone_type, - first, - middle, - last, - vCard - ) { - var html; - html = '
      '; - html += this.getLiHtml(first, 'First Name'); - html += this.getLiHtml(middle, 'Middle Name'); - html += this.getLiHtml(last, 'Last Name'); - html += this.getLiHtml(phone, 'Phone'); - html += this.getLiHtml(phone_type, 'Type'); - html += this.getLiHtml(vCard, 'vCard'); - html += '
    '; - return html; - }, - - /** - * @param {object} contact - * @returns {string} - */ - getContactsListElement: function ui_getContactsListElement(contact) { - var caller = $('') - .text(contact.caller).html(), - phoneNumber = contact.phoneNumber, - html = '
  • ' - + '' + caller + '' - + phoneNumber + '' + '' + '
  • '; - return html; - }, - - prepareContactsTemplate: function ui_prepareContactsTemplate( - phone, - phone_type, - first, - middle, - last, - vCard - ) { - $('#content-contact > .ui-scrollview-view') - .empty() - .append( - this.getContactsUlHtml( - phone, - phone_type, - first, - middle, - last, - vCard - ) - ); - $('#content-contact').trigger('create'); - }, - - contactsCompare: function ui_contactsCompare(a, b) { - if (a.caller < b.caller) { - return -1; - } - if (a.caller > b.caller) { - return 1; - } - return 0; - }, - - createSortedContactArray: function ui_createSortedContactArray( - contacts - ) { - var i, len, sortedContactList = [], - contact, phoneNumber; - - for (i = 0, len = contacts.length; i < len; i += 1) { - contact = contacts[i]; - if (contact.phoneNumbers.length === 0) { - phoneNumber = ''; - } else { - phoneNumber = contact.phoneNumbers[0].number; - } - sortedContactList.push({ - caller: this.prepareCallerName(contact), - firstName: contact.name.firstName || '', - middleName: contact.name.middleName || '', - lastName: contact.name.lastName || '', - phoneNumber: phoneNumber, - id: contact.id, - vCard: contact.convertToString('VCARD_30'), - contact: contact - }); - } - sortedContactList.sort(this.contactsSort); - - return sortedContactList; - }, - - createSortedContactList: function ui_createSortedContactList( - contacts - ) { - var sortedContactList = this.createSortedContactArray(contacts), - ul = $('
      '), - i, - len, - listElement, - listElementTap, - self = this, - contact; - - listElementTap = function (event) { - event.preventDefault(); - $(this).addClass('selected').siblings().removeClass('selected'); - self.app.saveDefaultCard(); - }; - - for (i = 0, len = sortedContactList.length; i < len; i += 1) { - contact = sortedContactList[i]; - if (contact.phoneNumber !== '') { - listElement = $(this.getContactsListElement(contact)); - listElement - .data('caller', contact.caller) - .data('firstName', contact.firstName) - .data('middleName', contact.middleName) - .data('lastName', contact.lastName) - .data('phoneNumber', contact.phoneNumber) - .data('id', contact.id) - .data('vCard', contact.vCard); - if (localStorage.id === listElement.data('id')) { - listElement.addClass('selected'); - } - ul.append(listElement); - } - } - ul.on('tap taphold click', 'li', listElementTap); - return ul; - }, - - showContactsList: function ui_showContactsList(contacts) { - var ul = this.createSortedContactList(contacts); - $('#content-choose > .ui-scrollview-view').empty().append(ul); - $('#content-choose').trigger('create'); - }, - - moveToStartPage: function ui_moveToStartPage(monit) { - $('#start').data('monit', monit || ''); - $.mobile.changePage('#start'); - }, - - isActivePage: function ui_isActivePage(id) { - return (id === $.mobile.activePage.attr('id')); - }, - - refreshIfActivePage: function ui_refreshIfActivePage(id) { - if (this.isActivePage(id)) { - $.mobile.activePage - .trigger('pagebeforeshow') - .trigger('pageshow'); - } - }, - - moveToContactPage: function ui_moveToContactPage(obj) { - $('#start').data('monit', ''); - $('#contact').data('contactsData', obj); - $.mobile.changePage('#contact'); - }, - - defineEvents: function ui_defineEvents() { - var self = this; - - $('#header-start .ui-btn-back').on('click', function (event) { - event.preventDefault(); - self.app.nfc.stopNFC(); - }); - - $('#header-start') - .on('click', '.ui-btn-back.ui-focus', function () { - return false; - }); - - $('#footer-contact').on('click', '.ui-btn-back', function (event) { - event.preventDefault(); - $.mobile.changePage('#start'); - }); - - $('#footer-choose').on('click', '.ui-btn-back', function (event) { - event.preventDefault(); - $.mobile.changePage('#start'); - }); - - $('#choose').on('pageshow', function (event) { - self.app.loadContacts( - self.showContactsList.bind(self), - function (e) { - alert('Cannot load the contacts list: ' + e.message); - console.error(e.message, e); - } - ); - }); - - $('#contact').on('pageshow', function (event) { - var data = $(this).data('contactsData'); - self.prepareContactsTemplate( - data.phone, - data.phone_type, - data.first, - data.middle, - data.last, - data.vCard - ); - }); - - $('#save-contact').on('click', function (event) { - event.preventDefault(); - self.app.saveContact(); - }); - - $('#start').on('pagebeforeshow', function () { - if (self.app.started) { - self.loadStartPage(); - } - }); - - $('#start').on('pageshow', function () { - var obj = $(this), - monit = obj.data('monit'); - if (monit !== '' && monit !== undefined) { - self.showPopup(obj.data('monit')); - obj.data('monit', ''); - } - }); - - $('#contact-nfc-error').bind({ - popupafterclose: function () { - tizen.application.getCurrentApplication().exit(); - } - }); - - window.addEventListener('tizenhwkey', function (e) { - if (e.keyName === 'back') { - if ($.mobile.popup.active) { - $.mobile.popup.active.close(); - } else if ($.mobile.activePage.attr('id') === 'start') { - tizen.application.getCurrentApplication().exit(); - } else { - self.app.nfc.timeExpired(); - } - } - }); - - document.addEventListener('webkitvisibilitychange', function () { - if (document.webkitVisibilityState === 'visible') { - if ($.mobile.activePage.attr('id') === 'choose') { - $.mobile.activePage.trigger('pageshow'); - } - app.counterState = true; - } else { - app.counterState = false; - } - }); - - $('#transfer').on('pageshow', function () { - if (tizen.nfc.getDefaultAdapter().powered) { - try { - var option = $(this).data('option'); - if (option === 'read') { - self.prepareWaitingPage( - 'Card to device', - 'PUT WIRELESS TAG
      CLOSE TO
      YOUR DEVICE' - ); - self.app.nfc.card.setTagDetectRead(); - } else if (option === 'write') { - self.prepareWaitingPage( - 'Device to card', - 'PUT WIRELESS TAG
      CLOSE TO
      YOUR DEVICE' - ); - self.app.nfc.card.setTagDetectWrite(); - } else { - self.prepareWaitingPage('Device to device', - 'PUT YOUR DEVICE
      CLOSE TO
      OTHER DEVICE'); - self.app.nfc.peer.setTargetDetect(); - } - } catch (e) { - console.error(e.message); - } - } else { - $.mobile.changePage('#start'); - alert('Please turn on NFC adapter'); - } - }); - } - - }; - -}()); \ No newline at end of file + 'use strict'; + + App.Ui = function App_Ui(app) { + this.app = app; + this.templateManager = new TemplateManager(app.config); + }; + + App.Ui.prototype = { + prepareCallerName: function ui_prepareCallerName(contact) { + var callerName, firstName, lastName; + + callerName = ''; + firstName = contact.name.firstName; + lastName = contact.name.lastName; + + if (firstName !== '' && firstName !== null) { + callerName = firstName; + } + if (lastName !== '' && lastName !== null) { + if (callerName !== '') { + callerName += ' '; + } + callerName += lastName; + } + if (callerName === '') { + callerName = 'No Name'; + } + return callerName; + }, + + /** + * Show a popup + * @param {string} message + */ + showPopup: function ui_showPopup(message) { + var popup = $("#alertPopup"); + if(!popup.hasClass('ui-popup')) { + popup.popup().trigger('create'); + } + $(".ui-popup-text", popup).text(message); + popup.popup("open", {positionTo: 'window'}); + }, + + closePopup: function ui_closePopup() { + var activePopup = $.mobile.popup.active; + if (activePopup) { + if (activePopup.attr('id') === 'alertPopup') { + activePopup.close(); + } + } + }, + + createListRecord: function ui_createListRecord() { + $.mobile.changePage('#choose'); + }, + + /** + * + * @param {string} text + * @returns {string} + */ + getWaitingContentHtml: function getWaitingContentHtml(text) { + var html; + html += '

      '; + html += text; + html += '

      '; + + html += '

      '; + + return html; + }, + + /** + * + * @param {string} title + * @param {string} text + */ + prepareWaitingPage: function ui_prepareWaitingPage(title, text) { + var waitingBox, waitingContent, + contentTransfer = $('#content-transfer'); + waitingBox = $('
      '); + waitingContent = $(this.getWaitingContentHtml(text)); + $('#header-transfer H1').text(title); + contentTransfer.empty(); + waitingBox.append(waitingContent); + contentTransfer.append(waitingBox); + $('#content-start').trigger('create'); + this.app.countDown(10, $('#counter')); + }, + + /** + * @returns {string} + */ + getTemporaryBoxHtml: function ui_getTemporaryBoxHtml() { + return '
      '; + }, + + /** + * @returns {string} + */ + showPopupWarning: function ui_showPopupWarning(){ + setTimeout(function(){ + $("#contact-nfc-error").popup("open",{"positionTo":"window"}); + },500); + }, + + getTemporaryBoxContentHtml: function ui_getTemporaryBoxContentHtml() { + return '

      ' + + 'Default card is not defined yet!
      ' + + 'Do you want to define it now?' + + '

      '; + }, + + loadTemporaryContent: function ui_loadTemporaryContent() { + var temporaryBox, temporaryContent, temporaryButton; + + temporaryBox = $(this.getTemporaryBoxHtml()); + temporaryContent = $(this.getTemporaryBoxContentHtml()); + temporaryButton = $(this.getButtonHtml('Create default card')); + + temporaryButton.on('click', function (event) { + event.preventDefault(); + $.mobile.changePage('#choose'); + }); + + temporaryBox.append(temporaryContent).append(temporaryButton); + + $('#content-start').empty().append(temporaryBox).trigger('create'); + }, + /** + * + * @param {string} text button text + * @returns {string} + */ + getButtonHtml: function ui_getButtonHtml(text) { + return '
      ' + + text + + '
      '; + }, + + /** + * + * @param {string} firstName + * @param {string} lastName + * @returns {string} + */ + getCommentHtml: function ui_getCommentHtml(data) { + var def_name = $('

      ') + .text(data.caller).html(); + return '

      ' + + '

      Your default contact

      ' + + '

      ' + + def_name + '

      ' + + '

      ' + + data.phoneNumber + '

      ' + + '
      '; + }, + + + /** + * Change Contact button action + * @event + * @param {Event} event + */ + changeContact: function ui_changeContact(event) { + event.preventDefault(); + $.mobile.changePage('#choose'); + }, + + /** + * @returns {jQuery} + */ + getChangeContactButton: function ui_getChangeContactButton() { + var changeContactButton; + changeContactButton = $(this.getButtonHtml('Change your default contact')); + changeContactButton.on('click', this.changeContact); + return changeContactButton; + }, + + /** + * Read From Card button action + * @event + * @param {Event} event + */ + readFromCard: function ui_readFromCard(event) { + event.preventDefault(); + if (tizen.nfc.getDefaultAdapter().powered) { + try { + $('#transfer').data('option', 'read'); + $.mobile.changePage('#transfer'); + } catch (e) { + console.error(e.message); + } + } else { + $.mobile.changePage('#start'); + alert('Please turn on NFC adapter'); + } + }, + + /** + * @returns {jQuery} + */ + getReadFromCardButton: function ui_getReadFromCardButton() { + var readFromCardButton; + readFromCardButton = $(this.getButtonHtml('Read from card')); + readFromCardButton.on('click', this.readFromCard); + return readFromCardButton; + }, + + /** + * Write To Card button action + * @param {Event} event + */ + writeToCard: function ui_writeToCard(event) { + event.preventDefault(); + if (tizen.nfc.getDefaultAdapter().powered) { + try { + $('#transfer').data('option', 'write'); + $.mobile.changePage('#transfer'); + } catch (e) { + console.error(e.message); + } + } else { + alert('Please turn on NFC adapter'); + } + }, + + /** + * @returns {jQuery} + */ + getWriteToCardButton: function ui_getWriteToCardButton() { + var writeToCardButton; + writeToCardButton = $(this.getButtonHtml('Write to card')); + writeToCardButton.on('click', this.writeToCard); + return writeToCardButton; + }, + + /** + * Communicate With Other Device button action + * @param {type} event + */ + communicateWithOtherDevice: function ui_communicateWithOtherDevice(event) { + event.preventDefault(); + if (tizen.nfc.getDefaultAdapter().powered) { + try { + $('#transfer').data('option', 'communicate'); + $.mobile.changePage('#transfer'); + } catch (e) { + console.error(e.message); + } + } else { + alert('Please turn on NFC adapter'); + } + }, + + /** + * @returns {jQuery} + */ + getCommunicateWithOtherDeviceButton: function ui_getCommunicateWithOtherDeviceButton() { + var communicateWithOtherDeviceButton; + communicateWithOtherDeviceButton = $(this.getButtonHtml('Communicate with another device')); + communicateWithOtherDeviceButton.on('click', this.communicateWithOtherDevice); + return communicateWithOtherDeviceButton; + }, + + loadStartContent: function ui_loadStartContent() { + var startBox, contentStart, gap, comment; + contentStart = $('#content-start'); + startBox = $('
      '); + gap = $('
      '); + comment = $(this.getCommentHtml(localStorage)); + + contentStart.empty(); + startBox + .append(this.getChangeContactButton()) + .append(gap.clone()) + .append(this.getReadFromCardButton()) + .append(gap.clone()) + .append(this.getWriteToCardButton()) + .append(gap.clone()) + .append(this.getCommunicateWithOtherDeviceButton()) + .prepend(comment); + + contentStart.append(startBox); + contentStart.trigger('create'); + }, + + loadStartPage: function ui_loadStartPage() { + if (localStorage.started === undefined) { + this.loadTemporaryContent(); + } else { + this.loadStartContent(); + } + }, + + /** + * + * @param {string} value + * @param {string} label + * @returns {string} + */ + getLiHtml: function ui_getLiHtml(value, label) { + var html; + html = '
    • ' + + '' + + '' + label + '' + + '' + + ((!value) ? '...' : value) + + '' + + '' + + '
    • '; + return html; + }, + + /** + * + * @param {string} phone + * @param {string} first + * @param {string} last + * @returns {string} + */ + getContactsUlHtml: function ui_getContactsUlHtml(phone, first, last) { + var html; + html = '
        '; + html += this.getLiHtml(first, 'First Name'); + html += this.getLiHtml(last, 'Last Name'); + html += this.getLiHtml(phone, 'Phone'); + html += '
      '; + return html; + }, + + /** + * @param {object} contact + * @returns {string} + */ + getContactsListElement: function ui_getContactsListElement(contact) { + var caller = $('') + .text(contact.caller).html(), + phoneNumber = contact.phoneNumber, + html = + '
    • ' + + '' + caller + + '' + phoneNumber + '' + + '' + + '
    • '; + return html; + }, + + prepareContactsTemplate: function ui_prepareContactsTemplate(phone, first, last) { + $('#content-contact > .ui-scrollview-view') + .empty() + .append(this.getContactsUlHtml(phone, first, last)); + $('#content-contact').trigger('create'); + }, + + contactsCompare: function ui_contactsCompare(a, b) { + if (a.caller < b.caller) { + return -1; + } + if (a.caller > b.caller) { + return 1; + } + return 0; + }, + + createSortedContactArray: function ui_createSortedContactArray(contacts) { + var i, len, sortedContactList = [], contact, phoneNumber; + + for (i = 0, len = contacts.length; i < len; i += 1) { + contact = contacts[i]; + if (contact.phoneNumbers.length === 0) { + phoneNumber = ''; + } else { + phoneNumber = contact.phoneNumbers[0].number; + } + sortedContactList.push({ + caller: this.prepareCallerName(contact), + firstName: contact.name.firstName || '', + lastName: contact.name.lastName || '', + phoneNumber: phoneNumber, + id: contact.id, + vCard: contact.convertToString('VCARD_30'), + contact: contact + }); + } + sortedContactList.sort(this.contactsSort); + + return sortedContactList; + }, + + createSortedContactList: function ui_createSortedContactList(contacts) { + var sortedContactList = this.createSortedContactArray(contacts), + ul = $('
        '), + i, + len, + listElement, + listElementTap, + self = this, + contact; + + listElementTap = function (event) { + event.preventDefault(); + $(this).addClass('selected').siblings().removeClass('selected'); + self.app.saveDefaultCard(); + }; + + for (i = 0, len = sortedContactList.length; i < len; i += 1) { + contact = sortedContactList[i]; + if (contact.phoneNumber !== '') { + listElement = $(this.getContactsListElement(contact)); + listElement + .data('caller', contact.caller) + .data('firstName', contact.firstName) + .data('lastName', contact.lastName) + .data('phoneNumber', contact.phoneNumber) + .data('id', contact.id) + .data('vCard', contact.vCard); + if (localStorage.id === listElement.data('id')) { + listElement.addClass('selected'); + } + ul.append(listElement); + } + } + ul.on('tap taphold click', 'li', listElementTap); + return ul; + }, + + showContactsList: function ui_showContactsList(contacts) { + var ul = this.createSortedContactList(contacts); + $('#content-choose > .ui-scrollview-view').empty().append(ul); + $('#content-choose').trigger('create'); + }, + + moveToStartPage: function ui_moveToStartPage(monit) { + $('#start').data('monit', monit || ''); + $.mobile.changePage('#start'); + }, + + isActivePage: function ui_isActivePage(id) { + return (id === $.mobile.activePage.attr("id")); + }, + + refreshIfActivePage: function ui_refreshIfActivePage(id) { + if (this.isActivePage(id)) { + $.mobile.activePage + .trigger("pagebeforeshow") + .trigger("pageshow"); + } + }, + + moveToContactPage: function ui_moveToContactPage(obj) { + $('#start').data('monit', ''); + $('#contact').data('contactsData', obj); + $.mobile.changePage('#contact'); + }, + + defineEvents: function ui_defineEvents() { + var self = this; + + $('#header-start .ui-btn-back').on('click', function (event) { + event.preventDefault(); + self.app.nfc.stopNFC(); + }); + + $('#header-start').on('click', '.ui-btn-back.ui-focus', function () { + return false; + }); + + $('#footer-contact').on('click', '.ui-btn-back', function (event) { + event.preventDefault(); + $.mobile.changePage('#start'); + }); + + $('#footer-choose').on('click', '.ui-btn-back', function (event) { + event.preventDefault(); + $.mobile.changePage('#start'); + }); + + $('#choose').on('pageshow', function (event) { + self.app.loadContacts(self.showContactsList.bind(self), function (e) { + alert('Cannot load the contacts list: ' + e.message); + console.error(e.message, e); + }); + }); + + $('#contact').on('pageshow', function (event) { + var data = $(this).data('contactsData'); + self.prepareContactsTemplate(data.phone, data.first, data.last); + }); + + $('#save-contact').on('click', function (event) { + event.preventDefault(); + self.app.saveContact(); + }); + + $('#start').on('pagebeforeshow', function () { + if (self.app.started) { + self.loadStartPage(); + } + }); + + $('#start').on('pageshow', function () { + var obj = $(this), monit = obj.data('monit'); + if (monit !== '' && monit !== undefined) { + self.showPopup(obj.data('monit')); + obj.data('monit', ''); + } + }); + + $( "#contact-nfc-error" ).bind({ + popupafterclose: function(){ + tizen.application.getCurrentApplication().exit(); + } + }); + + window.addEventListener('tizenhwkey', function(e) { + if (e.keyName == "back") { + if ($.mobile.popup.active) { + $.mobile.popup.active.close(); + } else if ($.mobile.activePage.attr('id') === 'start') { + tizen.application.getCurrentApplication().exit(); + } else { + self.app.nfc.timeExpired(); + } + } + }); + + document.addEventListener('webkitvisibilitychange', function () { + if(document.webkitVisibilityState === "visible") { + if ($.mobile.activePage.attr('id') === "choose") { + $.mobile.activePage.trigger('pageshow'); + } + app.counterState = true; + } else { + app.counterState = false; + } + }); + + $('#transfer').on('pageshow', function () { + if (tizen.nfc.getDefaultAdapter().powered) { + try { + var option = $(this).data('option'); + if (option === 'read') { + self.prepareWaitingPage('Card to device', 'PUT WIRELESS TAG
        CLOSE TO
        YOUR DEVICE'); + self.app.nfc.card.setTagDetectRead(); + } else if (option === 'write') { + self.prepareWaitingPage('Device to card', 'PUT WIRELESS TAG
        CLOSE TO
        YOUR DEVICE'); + self.app.nfc.card.setTagDetectWrite(); + } else { + self.prepareWaitingPage('Device to device', 'PUT YOUR DEVICE
        CLOSE TO
        OTHER DEVICE'); + self.app.nfc.peer.setTargetDetect(); + } + } catch (e) { + console.error(e.message); + } + } else { + $.mobile.changePage('#start'); + alert('Please turn on NFC adapter'); + } + }); + } + + }; + +}()); diff --git a/project/js/app.ui.templateManager.js b/project/js/app.ui.templateManager.js index c880c5e..68c6678 100644 --- a/project/js/app.ui.templateManager.js +++ b/project/js/app.ui.templateManager.js @@ -1,187 +1,111 @@ -/* -* Copyright 2013 Samsung Electronics Co., Ltd -* -* Licensed under the Flora License, Version 1.1 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://floralicense.org/license/ -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/*global tizen, $, app, ModifierManager */ - +/*global tizen, $, app */ /** -* @class TemplateManager -*/ + * @class TemplateManager + */ function TemplateManager() { - 'use strict'; - this.init(); + 'use strict'; + this.init(); } (function () { // strict mode wrapper - 'use strict'; - - TemplateManager.prototype = { - - /** - * Template cache - */ - cache: {}, - - /** - * UI module initialisation - */ - init: function init() { - this.modifiers = new ModifierManager().getAll(); - }, - - /** - * Returns template html (from cache) - * @param {string} tplName - * @param {string} tplParams - */ - get: function TemplateManager_get(tplName, tplParams) { - if (this.cache[tplName] !== undefined) { - return this.getCompleted(this.cache[tplName], tplParams); - } - return ''; - }, - - /** - * Load templates to cache - * @param {string} tplNames - * @param {function} onSuccess - */ - loadToCache: function TemplateManager_loadToCache(tplNames, onSuccess) { - var self = this, - cachedTemplates = 0, - tplName, - tplPath; - - if ($.isArray(tplNames)) { - - // for each template - $.each(tplNames, function (index, fileName) { - - // cache template html - if (self.cache[fileName] === undefined) { - tplName = [ - fileName, - app.config.get('templateExtension') - ].join(''); - tplPath = [ - app.config.get('templateDir'), - tplName - ].join('/'); - - $.ajax({ - url: tplPath, - cache: true, - dataType: 'html', - async: true, - success: function (data) { - // increase counter - cachedTemplates += 1; - - // save to cache - self.cache[fileName] = data; - - // if all templates are cached launch callback - if ( - cachedTemplates >= tplNames.length && - typeof onSuccess === 'function' - ) { - onSuccess(); - } - }, - error: function (jqXHR, textStatus, errorThrown) { - console.error( - 'templateManagerError: ' + - errorThrown - ); - } - }); - } else { - // template is already cached - cachedTemplates += 1; - // if all templates are cached launch callback - if ( - cachedTemplates >= tplNames.length && - typeof onSuccess === 'function' - ) { - onSuccess(); - } - } - }); - - } - }, - - /** - * Returns template completed by specified params - * @param {string} tplHtml - * @param {string} tplParams - */ - getCompleted: function TemplateManager_getCompleted( - tplHtml, - tplParams - ) { - var tplParam; - - for (tplParam in tplParams) { - if (tplParams.hasOwnProperty(tplParam)) { - tplHtml = this.passThruModifiers( - tplHtml, - tplParam, - tplParams[tplParam] - ); - } - } - - return tplHtml; - }, - - /** - * Returns template completed by specified params - * including modifiers - * @param {string} tplHtml - * @param {string} tplParams - * @param {string} content - */ - passThruModifiers: function (tplHtml, tplParam, content) { - var regModOn = new RegExp('%' + tplParam + '(\\|(.+?)){1,}%', 'g'), - regModOff = new RegExp(['%', tplParam, '%'].join(''), 'g'), - regModGet = new RegExp('%' + tplParam + '\\|(.+?)%'), - regModPut = new RegExp('%' + tplParam + '\\|(.+?)%', 'g'), - specRegExp = new RegExp('\\$', 'g'), - modifiers, - i; - - if (content && (typeof content === 'string')) { - content = content.replace(specRegExp, '$$$$'); - } - - if (regModOn.test(tplHtml)) { - modifiers = tplHtml.match(regModGet)[1].split('|'); - for (i in modifiers) { - if (this.modifiers[modifiers[i]] instanceof Function) { - content = this.modifiers[modifiers[i]](content); - } else { - console.error('unknown modifier: ' + modifiers[i]); - } - } - tplHtml = tplHtml.replace(regModPut, content); - } - tplHtml = tplHtml.replace(regModOff, content); - - return tplHtml; - } - }; - -}()); + 'use strict'; + TemplateManager.prototype = { + + /** + * Template cache + */ + cache: {}, + + /** + * UI module initialisation + */ + init: function init() { + }, + + /** + * Returns template html (from cache) + * @param {string} tplName + * @param {string} tplParams + */ + get: function TemplateManager_get(tplName, tplParams) { + if (this.cache[tplName] !== undefined) { + return this.getCompleted(this.cache[tplName], tplParams); + } + return ''; + }, + + /** + * Load templates to cache + * @param {string} tplNames + * @param {function} onSuccess + */ + loadToCache: function TemplateManager_loadToCache(tplNames, onSuccess) { + var self = this, + cachedTemplates = 0, + tplName, + tplPath; + + if ($.isArray(tplNames)) { + + // for each template + $.each(tplNames, function (index, fileName) { + + // cache template html + if (self.cache[fileName] === undefined) { + tplName = [fileName, app.config.get('templateExtension')].join(''); + tplPath = [app.config.get('templateDir'), tplName].join('/'); + + $.ajax({ + url: tplPath, + cache: true, + dataType: 'html', + async: true, + success: function (data) { + // increase counter + cachedTemplates += 1; + + // save to cache + self.cache[fileName] = data; + + // if all templates are cached launch callback + if (cachedTemplates >= tplNames.length && typeof onSuccess === 'function') { + onSuccess(); + } + }, + error: function (jqXHR, textStatus, errorThrown) { + console.error('templateManagerError: ' + errorThrown); + } + }); + } else { + // template is already cached + cachedTemplates += 1; + // if all templates are cached launch callback + if (cachedTemplates >= tplNames.length && typeof onSuccess === 'function') { + onSuccess(); + } + } + }); + + } + }, + + /** + * Returns template completed by specified params + * @param {string} tplHtml + * @param {string} tplParams + */ + getCompleted: function TemplateManager_getCompleted(tplHtml, tplParams) { + var tplParam, replaceRegExp; + + for (tplParam in tplParams) { + if (tplParams.hasOwnProperty(tplParam)) { + replaceRegExp = new RegExp(['%', tplParam, '%'].join(''), 'g'); + tplHtml = tplHtml.replace(replaceRegExp, tplParams[tplParam]); + } + } + + return tplHtml; + } + }; + +}()); \ No newline at end of file -- 2.7.4