|
|
|
@ -135,6 +135,7 @@ var ProgressBar = (function ProgressBarClosure() {
@@ -135,6 +135,7 @@ var ProgressBar = (function ProgressBarClosure() {
|
|
|
|
|
// 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() { |
|
|
|
|
var isLocalStorageEnabled = (function localStorageEnabledTest() { |
|
|
|
|
// Feature test as per http://diveintohtml5.info/storage.html
|
|
|
|
@ -149,39 +150,52 @@ var Settings = (function SettingsClosure() {
@@ -149,39 +150,52 @@ var Settings = (function SettingsClosure() {
|
|
|
|
|
})(); |
|
|
|
|
|
|
|
|
|
function Settings(fingerprint) { |
|
|
|
|
var database = null; |
|
|
|
|
var index; |
|
|
|
|
//#if !(FIREFOX || MOZCENTRAL)
|
|
|
|
|
if (isLocalStorageEnabled) |
|
|
|
|
database = localStorage.getItem('database') || '{}'; |
|
|
|
|
else |
|
|
|
|
return; |
|
|
|
|
//#else
|
|
|
|
|
// database = FirefoxCom.requestSync('getDatabase', null) || '{}';
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
database = JSON.parse(database); |
|
|
|
|
if (!('files' in database)) |
|
|
|
|
database.files = []; |
|
|
|
|
if (database.files.length >= kSettingsMemory) |
|
|
|
|
database.files.shift(); |
|
|
|
|
for (var i = 0, length = database.files.length; i < length; i++) { |
|
|
|
|
var branch = database.files[i]; |
|
|
|
|
if (branch.fingerprint == fingerprint) { |
|
|
|
|
index = i; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (typeof index != 'number') |
|
|
|
|
index = database.files.push({fingerprint: fingerprint}) - 1; |
|
|
|
|
this.file = database.files[index]; |
|
|
|
|
this.database = database; |
|
|
|
|
//#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 >= kSettingsMemory) |
|
|
|
|
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 (!('file' in this)) |
|
|
|
|
return false; |
|
|
|
|
if (!this.initializedPromise.isResolved) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
var file = this.file; |
|
|
|
|
file[name] = val; |
|
|
|
@ -195,7 +209,7 @@ var Settings = (function SettingsClosure() {
@@ -195,7 +209,7 @@ var Settings = (function SettingsClosure() {
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
get: function settingsGet(name, defaultValue) { |
|
|
|
|
if (!('file' in this)) |
|
|
|
|
if (!this.initializedPromise.isResolved) |
|
|
|
|
return defaultValue; |
|
|
|
|
|
|
|
|
|
return this.file[name] || defaultValue; |
|
|
|
@ -697,20 +711,12 @@ var PDFView = {
@@ -697,20 +711,12 @@ var PDFView = {
|
|
|
|
|
|
|
|
|
|
var pagesCount = pdfDocument.numPages; |
|
|
|
|
var id = pdfDocument.fingerprint; |
|
|
|
|
var storedHash = null; |
|
|
|
|
document.getElementById('numPages').textContent = |
|
|
|
|
mozL10n.get('page_of', {pageCount: pagesCount}, 'of {{pageCount}}'); |
|
|
|
|
document.getElementById('pageNumber').max = pagesCount; |
|
|
|
|
PDFView.documentFingerprint = id; |
|
|
|
|
var store = PDFView.store = new Settings(id); |
|
|
|
|
if (store.get('exists', false)) { |
|
|
|
|
var page = store.get('page', '1'); |
|
|
|
|
var zoom = store.get('zoom', PDFView.currentScale); |
|
|
|
|
var left = store.get('scrollLeft', '0'); |
|
|
|
|
var top = store.get('scrollTop', '0'); |
|
|
|
|
|
|
|
|
|
storedHash = 'page=' + page + '&zoom=' + zoom + ',' + left + ',' + top; |
|
|
|
|
} |
|
|
|
|
var storePromise = store.initializedPromise; |
|
|
|
|
|
|
|
|
|
this.pageRotation = 0; |
|
|
|
|
|
|
|
|
@ -747,11 +753,22 @@ var PDFView = {
@@ -747,11 +753,22 @@ var PDFView = {
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// outline and initial view depends on destinations and pagesRefMap
|
|
|
|
|
PDFJS.Promise.all([pagesPromise, destinationsPromise]).then(function() { |
|
|
|
|
var promises = [pagesPromise, destinationsPromise, storePromise]; |
|
|
|
|
PDFJS.Promise.all(promises).then(function() { |
|
|
|
|
pdfDocument.getOutline().then(function(outline) { |
|
|
|
|
self.outline = new DocumentOutlineView(outline); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
var storedHash = null; |
|
|
|
|
if (store.get('exists', false)) { |
|
|
|
|
var page = store.get('page', '1'); |
|
|
|
|
var zoom = store.get('zoom', PDFView.currentScale); |
|
|
|
|
var left = store.get('scrollLeft', '0'); |
|
|
|
|
var top = store.get('scrollTop', '0'); |
|
|
|
|
|
|
|
|
|
storedHash = 'page=' + page + '&zoom=' + zoom + ',' + left + ',' + top; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
self.setInitialView(storedHash, scale); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
@ -2198,11 +2215,13 @@ function updateViewarea() {
@@ -2198,11 +2215,13 @@ function updateViewarea() {
|
|
|
|
|
pdfOpenParams += ',' + Math.round(topLeft[0]) + ',' + Math.round(topLeft[1]); |
|
|
|
|
|
|
|
|
|
var store = PDFView.store; |
|
|
|
|
store.set('exists', true); |
|
|
|
|
store.set('page', pageNumber); |
|
|
|
|
store.set('zoom', normalizedScaleValue); |
|
|
|
|
store.set('scrollLeft', Math.round(topLeft[0])); |
|
|
|
|
store.set('scrollTop', Math.round(topLeft[1])); |
|
|
|
|
store.initializedPromise.then(function() { |
|
|
|
|
store.set('exists', true); |
|
|
|
|
store.set('page', pageNumber); |
|
|
|
|
store.set('zoom', normalizedScaleValue); |
|
|
|
|
store.set('scrollLeft', Math.round(topLeft[0])); |
|
|
|
|
store.set('scrollTop', Math.round(topLeft[1])); |
|
|
|
|
}); |
|
|
|
|
var href = PDFView.getAnchorUrl(pdfOpenParams); |
|
|
|
|
document.getElementById('viewBookmark').href = href; |
|
|
|
|
} |
|
|
|
|