mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-20 15:18:08 +02:00
Introduces LegacyPromise; polyfills DOM Promise
This commit is contained in:
parent
122cd150d4
commit
5bf3e44e30
20 changed files with 263 additions and 156 deletions
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/* globals Preferences, PDFJS */
|
||||
/* globals Preferences, PDFJS, Promise */
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -109,8 +109,9 @@ Preferences.prototype.writeToStorage = function(prefObj) {
|
|||
};
|
||||
|
||||
Preferences.prototype.readFromStorage = function() {
|
||||
var readFromStoragePromise = new PDFJS.Promise();
|
||||
var readPrefs = JSON.parse(FirefoxCom.requestSync('getPreferences'));
|
||||
readFromStoragePromise.resolve(readPrefs);
|
||||
var readFromStoragePromise = new Promise(function (resolve) {
|
||||
var readPrefs = JSON.parse(FirefoxCom.requestSync('getPreferences'));
|
||||
resolve(readPrefs);
|
||||
});
|
||||
return readFromStoragePromise;
|
||||
};
|
||||
|
|
|
@ -589,7 +589,7 @@ var PageView = function pageView(container, id, scale,
|
|||
};
|
||||
var renderTask = this.renderTask = this.pdfPage.render(renderContext);
|
||||
|
||||
this.renderTask.then(
|
||||
this.renderTask.promise.then(
|
||||
function pdfPageRenderCallback() {
|
||||
pageViewDrawCallback(null);
|
||||
},
|
||||
|
@ -649,7 +649,7 @@ var PageView = function pageView(container, id, scale,
|
|||
viewport: viewport
|
||||
};
|
||||
|
||||
pdfPage.render(renderContext).then(function() {
|
||||
pdfPage.render(renderContext).promise.then(function() {
|
||||
// Tell the printEngine that rendering this canvas/page has finished.
|
||||
obj.done();
|
||||
self.pdfPage.destroy();
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
/* globals PDFFindBar, PDFJS, FindStates, FirefoxCom */
|
||||
/* globals PDFFindBar, PDFJS, FindStates, FirefoxCom, Promise */
|
||||
|
||||
/**
|
||||
* Provides a "search" or "find" functionality for the PDF.
|
||||
|
@ -64,8 +64,6 @@ var PDFFindController = {
|
|||
|
||||
integratedFind: false,
|
||||
|
||||
firstPagePromise: new PDFJS.Promise(),
|
||||
|
||||
initialize: function(options) {
|
||||
if(typeof PDFFindBar === 'undefined' || PDFFindBar === null) {
|
||||
throw 'PDFFindController cannot be initialized ' +
|
||||
|
@ -82,6 +80,9 @@ var PDFFindController = {
|
|||
'findcasesensitivitychange'
|
||||
];
|
||||
|
||||
this.firstPagePromise = new Promise(function (resolve) {
|
||||
this.resolveFirstPage = resolve;
|
||||
}.bind(this));
|
||||
this.handleEvent = this.handleEvent.bind(this);
|
||||
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
|
@ -139,8 +140,11 @@ var PDFFindController = {
|
|||
this.startedTextExtraction = true;
|
||||
|
||||
this.pageContents = [];
|
||||
var extractTextPromisesResolves = [];
|
||||
for (var i = 0, ii = this.pdfPageSource.pdfDocument.numPages; i < ii; i++) {
|
||||
this.extractTextPromises.push(new PDFJS.Promise());
|
||||
this.extractTextPromises.push(new Promise(function (resolve) {
|
||||
extractTextPromisesResolves.push(resolve);
|
||||
}));
|
||||
}
|
||||
|
||||
var self = this;
|
||||
|
@ -158,7 +162,7 @@ var PDFFindController = {
|
|||
// Store the pageContent as a string.
|
||||
self.pageContents.push(str);
|
||||
|
||||
self.extractTextPromises[pageIndex].resolve(pageIndex);
|
||||
extractTextPromisesResolves[pageIndex](pageIndex);
|
||||
if ((pageIndex + 1) < self.pdfPageSource.pages.length)
|
||||
extractPageText(pageIndex + 1);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/* globals DEFAULT_PREFERENCES, PDFJS, isLocalStorageEnabled */
|
||||
/* globals DEFAULT_PREFERENCES, PDFJS, isLocalStorageEnabled, Promise */
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -23,7 +23,9 @@
|
|||
var Preferences = (function PreferencesClosure() {
|
||||
function Preferences() {
|
||||
this.prefs = {};
|
||||
this.isInitializedPromiseResolved = false;
|
||||
this.initializedPromise = this.readFromStorage().then(function(prefObj) {
|
||||
this.isInitializedPromiseResolved = true;
|
||||
if (prefObj) {
|
||||
this.prefs = prefObj;
|
||||
}
|
||||
|
@ -36,19 +38,19 @@ var Preferences = (function PreferencesClosure() {
|
|||
},
|
||||
|
||||
readFromStorage: function Preferences_readFromStorage() {
|
||||
var readFromStoragePromise = new PDFJS.Promise();
|
||||
var readFromStoragePromise = Promise.resolve();
|
||||
return readFromStoragePromise;
|
||||
},
|
||||
|
||||
reset: function Preferences_reset() {
|
||||
if (this.initializedPromise.isResolved) {
|
||||
if (this.isInitializedPromiseResolved) {
|
||||
this.prefs = {};
|
||||
this.writeToStorage(this.prefs);
|
||||
}
|
||||
},
|
||||
|
||||
set: function Preferences_set(name, value) {
|
||||
if (!this.initializedPromise.isResolved) {
|
||||
if (!this.isInitializedPromiseResolved) {
|
||||
return;
|
||||
} else if (DEFAULT_PREFERENCES[name] === undefined) {
|
||||
console.error('Preferences_set: \'' + name + '\' is undefined.');
|
||||
|
@ -79,7 +81,7 @@ var Preferences = (function PreferencesClosure() {
|
|||
if (defaultPref === undefined) {
|
||||
console.error('Preferences_get: \'' + name + '\' is undefined.');
|
||||
return;
|
||||
} else if (this.initializedPromise.isResolved) {
|
||||
} else if (this.isInitializedPromiseResolved) {
|
||||
var pref = this.prefs[name];
|
||||
|
||||
if (pref !== undefined) {
|
||||
|
@ -99,10 +101,11 @@ var Preferences = (function PreferencesClosure() {
|
|||
//};
|
||||
//
|
||||
//Preferences.prototype.readFromStorage = function() {
|
||||
// var readFromStoragePromise = new PDFJS.Promise();
|
||||
// asyncStorage.getItem('preferences', function(prefString) {
|
||||
// var readPrefs = JSON.parse(prefString);
|
||||
// readFromStoragePromise.resolve(readPrefs);
|
||||
// var readFromStoragePromise = new Promise(function (resolve) {
|
||||
// asyncStorage.getItem('preferences', function(prefString) {
|
||||
// var readPrefs = JSON.parse(prefString);
|
||||
// resolve(readPrefs);
|
||||
// });
|
||||
// });
|
||||
// return readFromStoragePromise;
|
||||
//};
|
||||
|
@ -116,11 +119,12 @@ Preferences.prototype.writeToStorage = function(prefObj) {
|
|||
};
|
||||
|
||||
Preferences.prototype.readFromStorage = function() {
|
||||
var readFromStoragePromise = new PDFJS.Promise();
|
||||
if (isLocalStorageEnabled) {
|
||||
var readPrefs = JSON.parse(localStorage.getItem('preferences'));
|
||||
readFromStoragePromise.resolve(readPrefs);
|
||||
}
|
||||
var readFromStoragePromise = new Promise(function (resolve) {
|
||||
if (isLocalStorageEnabled) {
|
||||
var readPrefs = JSON.parse(localStorage.getItem('preferences'));
|
||||
resolve(readPrefs);
|
||||
}
|
||||
});
|
||||
return readFromStoragePromise;
|
||||
};
|
||||
//#endif
|
||||
|
|
|
@ -161,7 +161,7 @@ var ThumbnailView = function thumbnailView(container, id, defaultViewport) {
|
|||
cont();
|
||||
}
|
||||
};
|
||||
this.pdfPage.render(renderContext).then(
|
||||
this.pdfPage.render(renderContext).promise.then(
|
||||
function pdfPageRenderCallback() {
|
||||
self.renderingState = RenderingStates.FINISHED;
|
||||
callback();
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/* globals PDFJS, VIEW_HISTORY_MEMORY, isLocalStorageEnabled */
|
||||
/* globals PDFJS, VIEW_HISTORY_MEMORY, isLocalStorageEnabled, Promise */
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -31,11 +31,16 @@
|
|||
var ViewHistory = (function ViewHistoryClosure() {
|
||||
function ViewHistory(fingerprint) {
|
||||
this.fingerprint = fingerprint;
|
||||
this.initializedPromise = new PDFJS.Promise();
|
||||
var initializedPromiseResolve;
|
||||
this.isInitializedPromiseResolved = false;
|
||||
this.initializedPromise = new Promise(function (resolve) {
|
||||
initializedPromiseResolve = resolve;
|
||||
});
|
||||
|
||||
var resolvePromise = (function ViewHistoryResolvePromise(db) {
|
||||
this.isInitializedPromiseResolved = true;
|
||||
this.initialize(db || '{}');
|
||||
this.initializedPromise.resolve();
|
||||
initializedPromiseResolve();
|
||||
}).bind(this);
|
||||
|
||||
//#if B2G
|
||||
|
@ -78,7 +83,7 @@ var ViewHistory = (function ViewHistoryClosure() {
|
|||
},
|
||||
|
||||
set: function ViewHistory_set(name, val) {
|
||||
if (!this.initializedPromise.isResolved) {
|
||||
if (!this.isInitializedPromiseResolved) {
|
||||
return;
|
||||
}
|
||||
var file = this.file;
|
||||
|
@ -101,7 +106,7 @@ var ViewHistory = (function ViewHistoryClosure() {
|
|||
},
|
||||
|
||||
get: function ViewHistory_get(name, defaultValue) {
|
||||
if (!this.initializedPromise.isResolved) {
|
||||
if (!this.isInitializedPromiseResolved) {
|
||||
return defaultValue;
|
||||
}
|
||||
return this.file[name] || defaultValue;
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
getFileName, scrollIntoView, getPDFFileNameFromURL, PDFHistory,
|
||||
Preferences, ViewHistory, PageView, ThumbnailView,
|
||||
noContextMenuHandler, SecondaryToolbar, PasswordPrompt,
|
||||
PresentationMode, HandTool */
|
||||
PresentationMode, HandTool, Promise */
|
||||
|
||||
'use strict';
|
||||
|
||||
|
@ -787,12 +787,17 @@ var PDFView = {
|
|||
|
||||
load: function pdfViewLoad(pdfDocument, scale) {
|
||||
var self = this;
|
||||
var onePageRendered = new PDFJS.Promise();
|
||||
var isOnePageRenderedResolved = false;
|
||||
var resolveOnePageRendered = null;
|
||||
var onePageRendered = new Promise(function (resolve) {
|
||||
resolveOnePageRendered = resolve;
|
||||
});
|
||||
function bindOnAfterDraw(pageView, thumbnailView) {
|
||||
// when page is painted, using the image as thumbnail base
|
||||
pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() {
|
||||
if (!onePageRendered.isResolved) {
|
||||
onePageRendered.resolve();
|
||||
if (!isOnePageRenderedResolved) {
|
||||
isOnePageRenderedResolved = true;
|
||||
resolveOnePageRendered();
|
||||
}
|
||||
thumbnailView.setImage(pageView.canvas);
|
||||
};
|
||||
|
@ -841,7 +846,11 @@ var PDFView = {
|
|||
var pagesRefMap = this.pagesRefMap = {};
|
||||
var thumbnails = this.thumbnails = [];
|
||||
|
||||
var pagesPromise = this.pagesPromise = new PDFJS.Promise();
|
||||
var resolvePagesPromise;
|
||||
var pagesPromise = new Promise(function (resolve) {
|
||||
resolvePagesPromise = resolve;
|
||||
});
|
||||
this.pagesPromise = pagesPromise;
|
||||
|
||||
var firstPagePromise = pdfDocument.getPage(1);
|
||||
|
||||
|
@ -877,13 +886,13 @@ var PDFView = {
|
|||
pagesRefMap[refStr] = pageNum;
|
||||
getPagesLeft--;
|
||||
if (!getPagesLeft) {
|
||||
pagesPromise.resolve();
|
||||
resolvePagesPromise();
|
||||
}
|
||||
}.bind(null, pageNum));
|
||||
}
|
||||
} else {
|
||||
// XXX: Printing is semi-broken with auto fetch disabled.
|
||||
pagesPromise.resolve();
|
||||
resolvePagesPromise();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -893,12 +902,12 @@ var PDFView = {
|
|||
|
||||
PDFView.loadingBar.setWidth(container);
|
||||
|
||||
PDFFindController.firstPagePromise.resolve();
|
||||
PDFFindController.resolveFirstPage();
|
||||
});
|
||||
|
||||
var prefsPromise = prefs.initializedPromise;
|
||||
var storePromise = store.initializedPromise;
|
||||
PDFJS.Promise.all([firstPagePromise, prefsPromise, storePromise]).
|
||||
Promise.all([firstPagePromise, prefsPromise, storePromise]).
|
||||
then(function() {
|
||||
var showPreviousViewOnLoad = prefs.get('showPreviousViewOnLoad');
|
||||
var defaultZoomValue = prefs.get('defaultZoomValue');
|
||||
|
@ -961,7 +970,7 @@ var PDFView = {
|
|||
// outline depends on destinations and pagesRefMap
|
||||
var promises = [pagesPromise, destinationsPromise,
|
||||
PDFView.animationStartedPromise];
|
||||
PDFJS.Promise.all(promises).then(function() {
|
||||
Promise.all(promises).then(function() {
|
||||
pdfDocument.getOutline().then(function(outline) {
|
||||
self.outline = new DocumentOutlineView(outline);
|
||||
document.getElementById('viewOutline').disabled = !outline;
|
||||
|
@ -2212,9 +2221,10 @@ window.addEventListener('afterprint', function afterPrint(evt) {
|
|||
window.oRequestAnimationFrame ||
|
||||
window.msRequestAnimationFrame ||
|
||||
function startAtOnce(callback) { callback(); };
|
||||
PDFView.animationStartedPromise = new PDFJS.Promise();
|
||||
requestAnimationFrame(function onAnimationFrame() {
|
||||
PDFView.animationStartedPromise.resolve();
|
||||
PDFView.animationStartedPromise = new Promise(function (resolve) {
|
||||
requestAnimationFrame(function onAnimationFrame() {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue