From d6ab0c61e813e35756df18939a7ad0a4338dce7e Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 2 Oct 2013 15:55:31 +0200 Subject: [PATCH 1/2] Move Settings from viewer.js to its own file --- web/settings.js | 115 ++++++++++++++++++++++++++++++++++++++++++++++++ web/viewer.html | 1 + web/viewer.js | 99 +---------------------------------------- 3 files changed, 118 insertions(+), 97 deletions(-) create mode 100644 web/settings.js diff --git a/web/settings.js b/web/settings.js new file mode 100644 index 000000000..e1b17d674 --- /dev/null +++ b/web/settings.js @@ -0,0 +1,115 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ +/* globals PDFJS, SETTINGS_MEMORY */ + +'use strict'; + +// Settings Manager - This is a utility for saving settings +// First we see if localStorage is available +// If not, we use FUEL in FF +// Use asyncStorage for B2G +var Settings = (function SettingsClosure() { +//#if !(FIREFOX || MOZCENTRAL || B2G) + var isLocalStorageEnabled = (function localStorageEnabledTest() { + // Feature test as per http://diveintohtml5.info/storage.html + // The additional localStorage call is to get around a FF quirk, see + // bug #495747 in bugzilla + try { + return 'localStorage' in window && window['localStorage'] !== null && + localStorage; + } catch (e) { + return false; + } + })(); +//#endif + + function Settings(fingerprint) { + this.fingerprint = fingerprint; + this.initializedPromise = new PDFJS.Promise(); + + var resolvePromise = (function settingsResolvePromise(db) { + this.initialize(db || '{}'); + this.initializedPromise.resolve(); + }).bind(this); + +//#if B2G +// asyncStorage.getItem('database', resolvePromise); +//#endif + +//#if FIREFOX || MOZCENTRAL +// resolvePromise(FirefoxCom.requestSync('getDatabase', null)); +//#endif + +//#if !(FIREFOX || MOZCENTRAL || B2G) + if (isLocalStorageEnabled) + resolvePromise(localStorage.getItem('database')); +//#endif + } + + Settings.prototype = { + initialize: function settingsInitialize(database) { + database = JSON.parse(database); + if (!('files' in database)) + database.files = []; + if (database.files.length >= SETTINGS_MEMORY) + database.files.shift(); + var index; + for (var i = 0, length = database.files.length; i < length; i++) { + var branch = database.files[i]; + if (branch.fingerprint == this.fingerprint) { + index = i; + break; + } + } + if (typeof index != 'number') + index = database.files.push({fingerprint: this.fingerprint}) - 1; + this.file = database.files[index]; + this.database = database; + }, + + set: function settingsSet(name, val) { + if (!this.initializedPromise.isResolved) + return; + + var file = this.file; + file[name] = val; + var database = JSON.stringify(this.database); + +//#if B2G +// asyncStorage.setItem('database', database); +//#endif + +//#if FIREFOX || MOZCENTRAL +// FirefoxCom.requestSync('setDatabase', database); +//#endif + +//#if !(FIREFOX || MOZCENTRAL || B2G) + if (isLocalStorageEnabled) + localStorage.setItem('database', database); +//#endif + }, + + get: function settingsGet(name, defaultValue) { + if (!this.initializedPromise.isResolved) + return defaultValue; + + return this.file[name] || defaultValue; + } + }; + + return Settings; +})(); diff --git a/web/viewer.html b/web/viewer.html index eb9fe60cf..f3aaaa4a4 100644 --- a/web/viewer.html +++ b/web/viewer.html @@ -60,6 +60,7 @@ limitations under the License. + diff --git a/web/viewer.js b/web/viewer.js index fe58e9170..94b3290d8 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -17,7 +17,7 @@ /* globals PDFJS, PDFBug, FirefoxCom, Stats, Cache, PDFFindBar, CustomStyle, PDFFindController, ProgressBar, TextLayerBuilder, DownloadManager, getFileName, getOutputScale, scrollIntoView, getPDFFileNameFromURL, - PDFHistory, PageView, ThumbnailView, noContextMenuHandler, + PDFHistory, Settings, PageView, ThumbnailView, noContextMenuHandler, SecondaryToolbar, PasswordPrompt, PresentationMode */ 'use strict'; @@ -64,105 +64,10 @@ var mozL10n = document.mozL10n || document.webL10n; //#include firefoxcom.js //#endif -// Settings Manager - This is a utility for saving settings -// First we see if localStorage is available -// If not, we use FUEL in FF -// Use asyncStorage for B2G -var Settings = (function SettingsClosure() { -//#if !(FIREFOX || MOZCENTRAL || B2G) - var isLocalStorageEnabled = (function localStorageEnabledTest() { - // Feature test as per http://diveintohtml5.info/storage.html - // The additional localStorage call is to get around a FF quirk, see - // bug #495747 in bugzilla - try { - return 'localStorage' in window && window['localStorage'] !== null && - localStorage; - } catch (e) { - return false; - } - })(); -//#endif - - function Settings(fingerprint) { - this.fingerprint = fingerprint; - this.initializedPromise = new PDFJS.Promise(); - - var resolvePromise = (function settingsResolvePromise(db) { - this.initialize(db || '{}'); - this.initializedPromise.resolve(); - }).bind(this); - -//#if B2G -// asyncStorage.getItem('database', resolvePromise); -//#endif - -//#if FIREFOX || MOZCENTRAL -// resolvePromise(FirefoxCom.requestSync('getDatabase', null)); -//#endif - -//#if !(FIREFOX || MOZCENTRAL || B2G) - if (isLocalStorageEnabled) - resolvePromise(localStorage.getItem('database')); -//#endif - } - - Settings.prototype = { - initialize: function settingsInitialize(database) { - database = JSON.parse(database); - if (!('files' in database)) - database.files = []; - if (database.files.length >= SETTINGS_MEMORY) - database.files.shift(); - var index; - for (var i = 0, length = database.files.length; i < length; i++) { - var branch = database.files[i]; - if (branch.fingerprint == this.fingerprint) { - index = i; - break; - } - } - if (typeof index != 'number') - index = database.files.push({fingerprint: this.fingerprint}) - 1; - this.file = database.files[index]; - this.database = database; - }, - - set: function settingsSet(name, val) { - if (!this.initializedPromise.isResolved) - return; - - var file = this.file; - file[name] = val; - var database = JSON.stringify(this.database); - -//#if B2G -// asyncStorage.setItem('database', database); -//#endif - -//#if FIREFOX || MOZCENTRAL -// FirefoxCom.requestSync('setDatabase', database); -//#endif - -//#if !(FIREFOX || MOZCENTRAL || B2G) - if (isLocalStorageEnabled) - localStorage.setItem('database', database); -//#endif - }, - - get: function settingsGet(name, defaultValue) { - if (!this.initializedPromise.isResolved) - return defaultValue; - - return this.file[name] || defaultValue; - } - }; - - return Settings; -})(); - var cache = new Cache(CACHE_SIZE); var currentPageNumber = 1; +//#include settings.js //#include pdf_find_bar.js //#include pdf_find_controller.js //#include pdf_history.js From 43b0b66ada6378bc00c8661bd9b54739bda4ace4 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 2 Oct 2013 15:57:23 +0200 Subject: [PATCH 2/2] Fix coding style and improve comment in settings.js --- web/settings.js | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/web/settings.js b/web/settings.js index e1b17d674..add465bed 100644 --- a/web/settings.js +++ b/web/settings.js @@ -18,10 +18,15 @@ 'use strict'; -// Settings Manager - This is a utility for saving settings -// First we see if localStorage is available -// If not, we use FUEL in FF -// Use asyncStorage for B2G +/** + * Settings Manager - This is a utility for saving settings. + * + * The way that settings are stored depends on how PDF.js is built, + * for 'node make ' the following cases exist: + * - FIREFOX or MOZCENTRAL - uses about:config. + * - B2G - uses asyncStorage. + * - GENERIC or CHROME - uses localStorage, if it is available. + */ var Settings = (function SettingsClosure() { //#if !(FIREFOX || MOZCENTRAL || B2G) var isLocalStorageEnabled = (function localStorageEnabledTest() { @@ -29,8 +34,8 @@ var Settings = (function SettingsClosure() { // The additional localStorage call is to get around a FF quirk, see // bug #495747 in bugzilla try { - return 'localStorage' in window && window['localStorage'] !== null && - localStorage; + return ('localStorage' in window && window['localStorage'] !== null && + localStorage); } catch (e) { return false; } @@ -55,36 +60,40 @@ var Settings = (function SettingsClosure() { //#endif //#if !(FIREFOX || MOZCENTRAL || B2G) - if (isLocalStorageEnabled) + if (isLocalStorageEnabled) { resolvePromise(localStorage.getItem('database')); + } //#endif } Settings.prototype = { initialize: function settingsInitialize(database) { database = JSON.parse(database); - if (!('files' in database)) + if (!('files' in database)) { database.files = []; - if (database.files.length >= SETTINGS_MEMORY) + } + if (database.files.length >= SETTINGS_MEMORY) { database.files.shift(); + } var index; for (var i = 0, length = database.files.length; i < length; i++) { var branch = database.files[i]; - if (branch.fingerprint == this.fingerprint) { + if (branch.fingerprint === this.fingerprint) { index = i; break; } } - if (typeof index != 'number') + if (typeof index !== 'number') { index = database.files.push({fingerprint: this.fingerprint}) - 1; + } this.file = database.files[index]; this.database = database; }, set: function settingsSet(name, val) { - if (!this.initializedPromise.isResolved) + if (!this.initializedPromise.isResolved) { return; - + } var file = this.file; file[name] = val; var database = JSON.stringify(this.database); @@ -98,15 +107,16 @@ var Settings = (function SettingsClosure() { //#endif //#if !(FIREFOX || MOZCENTRAL || B2G) - if (isLocalStorageEnabled) + if (isLocalStorageEnabled) { localStorage.setItem('database', database); + } //#endif }, get: function settingsGet(name, defaultValue) { - if (!this.initializedPromise.isResolved) + if (!this.initializedPromise.isResolved) { return defaultValue; - + } return this.file[name] || defaultValue; } };