Skip to content

Commit

Permalink
Implemented Settings manager. Now remembering scroll positions
Browse files Browse the repository at this point in the history
  • Loading branch information
saebekassebil committed Dec 22, 2011
1 parent 0e906bb commit d44f9f2
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 3 deletions.
10 changes: 9 additions & 1 deletion src/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,14 @@ var PDFDocModel = (function PDFDocModelClosure() {
this.startXRef,
this.mainXRefEntriesOffset);
this.catalog = new Catalog(this.xref);

if(this.xref.trailer && this.xref.trailer.has('ID')) {
var fileID = '';
this.xref.trailer.get('ID')[0].split('').forEach(function(el) {
fileID += Number(el.charCodeAt(0)).toString(16);
});
this.fileID = fileID;
}
},
get numPages() {
var linearization = this.linearization;
Expand Down Expand Up @@ -560,7 +568,7 @@ var PDFDoc = (function PDFDocClosure() {
this.data = data;
this.stream = stream;
this.pdf = new PDFDocModel(stream);

this.fileID = this.pdf.fileID;
this.catalog = this.pdf.catalog;
this.objs = new PDFObjects();

Expand Down
2 changes: 1 addition & 1 deletion src/obj.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ var XRef = (function XRefClosure() {
this.entries = [];
this.xrefstms = {};
var trailerDict = this.readXRef(startXRef);

this.trailer = trailerDict;
// prepare the XRef cache
this.cache = [];

Expand Down
69 changes: 68 additions & 1 deletion web/viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,61 @@ var Cache = function cacheCache(size) {
};
};

// Settings Manager - This is a utility for saving settings
// First we see if localStorage is available, which isn't pt. in FF due to bug #495747
// If not, we use FUEL in FF and fallback to Cookies for other browsers.
(function(parent) {
var COOKIE_WORKS = (function() {
document.cookie = 'they=work';
return document.cookie.length > 0;
})();

var LOCALSTORAGE_WORKS = (function() {
try {
if(typeof localStorage != 'undefined') {
return true;
}
} catch(e) {
return false;
}
return true;
})();

var extPrefix = '[email protected]';

var Settings = {
set: function(name, val) {
if(location.protocol == 'chrome:' && !LOCALSTORAGE_WORKS) {
Application.prefs.setValue(extPrefix + '.' + name, val);
} else if(LOCALSTORAGE_WORKS) {
localStorage.setItem(name, val);
} else if(COOKIE_WORKS) {
var cookieString = name + '=' + escape(val);
var expire = (new Date((new Date().getTime())+1000*60*60*24*365)).toGMTString();
cookieString += '; expires='+expire;
document.cookie = cookieString;
}
},

get: function(name, defaultValue) {
if(location.protocol == 'chrome:' && !LOCALSTORAGE_WORKS) {
return Application.prefs.getValue(extPrefix + '.' + name, defaultValue);
} else if(LOCALSTORAGE_WORKS) {
return localStorage.getItem(name) || defaultValue;
} else if(COOKIE_WORKS) {
var res = document.cookie.match ( '(^|;) ?' + name + '=([^;]*)(;|$)' );
if (res) {
return unescape(res[2]);
} else {
return fallback;
}
}
}
};

parent.Settings = Settings;
})(this);

var cache = new Cache(kCacheSize);
var currentPageNumber = 1;

Expand Down Expand Up @@ -292,6 +347,15 @@ var PDFView = {
pagesRefMap[pageRef.num + ' ' + pageRef.gen + ' R'] = i;
}

var id = pdf.fileID;
if (id) {
var scroll = Settings.get(id + '.scroll', -1);
if (scroll != -1) {
setTimeout(function scrollWindow() {
window.scrollTo(0, scroll);
}, 0);
}
}
this.pagesRefMap = pagesRefMap;
this.destinations = pdf.catalog.destinations;
this.setScale(scale || kDefaultScale, true);
Expand Down Expand Up @@ -831,6 +895,10 @@ function updateViewarea() {

window.addEventListener('scroll', function webViewerScroll(evt) {
updateViewarea();
var fileID;
if((fileID = PDFView.pages[0].content.pdf.fileID)) {
Settings.set(fileID+'.scroll', window.pageYOffset);
}
}, true);


Expand Down Expand Up @@ -888,7 +956,6 @@ window.addEventListener('change', function webViewerChange(evt) {
// implemented in Firefox.
var file = files[0];
fileReader.readAsBinaryString(file);

document.title = file.name;

// URL does not reflect proper document location - hiding some icons.
Expand Down

0 comments on commit d44f9f2

Please sign in to comment.