mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-26 17:51:13 +08:00
120 lines
No EOL
3 KiB
JavaScript
120 lines
No EOL
3 KiB
JavaScript
(function (win) {
|
|
|
|
function _getWrapperElement (id) {
|
|
var re = new RegExp(/^#.*/);
|
|
if (typeof id !== "string") {
|
|
return null;
|
|
}
|
|
// remove hash mark if present
|
|
return document.getElementById( (re.test(id)) ? id.substr(1) : id );
|
|
}
|
|
|
|
function _getPackage (wrapperElement) {
|
|
if (typeof wrapperElement.contentWindow.marvin != "undefined") {
|
|
return wrapperElement.contentWindow.marvin;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function _createPackage(elementId, resolve, reject) {
|
|
if(elementId == null){
|
|
reject("Element id can not be null.");
|
|
return;
|
|
}
|
|
|
|
var wrapperElement = _getWrapperElement(elementId);
|
|
|
|
if (wrapperElement == null) {
|
|
reject("Unable to get element with id: " + elementId);
|
|
return;
|
|
}
|
|
|
|
var marvinPackage = _getPackage(wrapperElement);
|
|
if (marvinPackage) {
|
|
marvinPackage.onReady(function() {
|
|
resolve(marvinPackage);
|
|
});
|
|
} else { // use listener
|
|
wrapperElement.addEventListener("load", function handleSketchLoad (e) {
|
|
var marvin = _getPackage(wrapperElement);
|
|
if (marvin) {
|
|
marvin.onReady(function() {
|
|
resolve(marvin);
|
|
});
|
|
} else {
|
|
reject("Unable to find marvin package");
|
|
}
|
|
|
|
});
|
|
}
|
|
}
|
|
|
|
function _createEditor(elementId, resolve, reject) {
|
|
if(elementId == null){
|
|
reject("Element id can not be null.");
|
|
return;
|
|
}
|
|
|
|
var wrapperElement = _getWrapperElement(elementId);
|
|
|
|
if (wrapperElement == null) {
|
|
reject("Unable to get element with id: " + elementId);
|
|
return;
|
|
}
|
|
|
|
var marvinPackage = _getPackage(wrapperElement);
|
|
if (marvinPackage) {
|
|
marvinPackage.onReady(function() {
|
|
if (typeof marvinPackage.sketcherInstance != "undefined") {
|
|
resolve(_getPackage(wrapperElement).sketcherInstance);
|
|
return;
|
|
} else {
|
|
reject("Unable to find sketcherInstance in element with id: " + elementId);
|
|
return;
|
|
}
|
|
});
|
|
} else { // use listener
|
|
wrapperElement.addEventListener("load", function handleSketchLoad (e) {
|
|
var marvin = _getPackage(wrapperElement);
|
|
if (marvin) {
|
|
marvin.onReady(function() {
|
|
if (typeof marvin.sketcherInstance != 'undefined') {
|
|
resolve(marvin.sketcherInstance);
|
|
} else {
|
|
reject("Unable to find sketcherInstance in iframe with id: " + elementId);
|
|
}
|
|
});
|
|
} else {
|
|
reject("Unable to find marvin package, cannot retrieve sketcher instance");
|
|
}
|
|
|
|
});
|
|
}
|
|
}
|
|
|
|
if (!("Promise" in win) && ("ES6Promise" in win) && ("polyfill" in win.ES6Promise)) {
|
|
win.ES6Promise.polyfill();
|
|
}
|
|
|
|
win.MarvinJSUtil = {
|
|
"getEditor": function getEditor (elementId) {
|
|
|
|
function createEditor (resolve, reject) {
|
|
_createEditor(elementId, resolve, reject);
|
|
};
|
|
|
|
return new Promise(createEditor);
|
|
}
|
|
,"getPackage": function getPackage (elementId) {
|
|
|
|
function createPackage (resolve, reject) {
|
|
_createPackage(elementId, resolve, reject);
|
|
};
|
|
|
|
return new Promise(createPackage);
|
|
}
|
|
};;
|
|
|
|
|
|
}(window));
|
|
|