scinote-web/vendor/assets/javascripts/marvinjslauncher.js
2019-04-26 20:33:20 +02:00

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));