Stackedit/public/res/mediaImporter.js

85 lines
2.5 KiB
JavaScript
Raw Normal View History

2013-06-02 00:38:23 +00:00
define([
"jquery",
"underscore",
"constants",
"classes/Provider",
"core",
"eventMgr",
"providers/gplusProvider"
2013-11-05 23:03:38 +00:00
], function($, _, constants, Provider, core, eventMgr) {
2013-06-02 00:38:23 +00:00
var mediaImporter = {};
2013-06-02 00:38:23 +00:00
// Create a map with providerId: providerModule
var providerMap = _.chain(arguments).map(function(argument) {
return argument instanceof Provider && [
argument.providerId,
argument
];
}).compact().object().value();
2013-06-02 00:38:23 +00:00
eventMgr.addListener("onReady", function() {
_.each(providerMap, function(provider) {
// Import image action links (if any)
$(".action-import-image-" + provider.providerId).click(function() {
// Take the insertLinkCallback from core module
var insertLinkCallback = core.insertLinkCallback;
// Unset it to be sure core module will not call it
core.insertLinkCallback = undefined;
provider.importImage(function(error, imageLink) {
if(error) {
insertLinkCallback(null);
return;
}
insertLinkCallback(imageLink || null);
});
});
});
2013-07-16 23:54:56 +00:00
function handleImgImport(evt) {
var files = (evt.dataTransfer || evt.target).files;
var file = _.first(files);
if(file.name.match(/.(jpe?g|png|gif)$/i)) {
evt.stopPropagation();
evt.preventDefault();
var reader = new FileReader();
reader.onload = (function(importedFile) {
return function(e) {
var content = new Uint8Array(e.target.result);
providerMap.gplus.uploadImage(importedFile.name, content, function(error, imageLink) {
if(error) {
return;
}
// Generate an insertLinkCallback by clicking the
// pagedown button but without showing the dialog
core.catchModal = true;
$("#wmd-image-button").click();
core.catchModal = false;
// Take the insertLinkCallback from core module
var insertLinkCallback = core.insertLinkCallback;
// Unset it to be sure core module will not call it
core.insertLinkCallback = undefined;
insertLinkCallback(imageLink || null);
});
};
})(file);
var blob = file.slice(0, constants.IMPORT_IMG_MAX_CONTENT_SIZE);
reader.readAsArrayBuffer(blob);
}
}
2013-07-16 23:54:56 +00:00
function handleDragOver(evt) {
evt.stopPropagation();
evt.preventDefault();
evt.dataTransfer.dropEffect = 'copy';
}
2013-07-16 23:54:56 +00:00
!window.viewerMode && (function(dragAndDropElt) {
dragAndDropElt.addEventListener('dragover', handleDragOver, false);
dragAndDropElt.addEventListener('drop', handleImgImport, false);
})(document.querySelector('.layout-wrapper-l3'));
2013-07-16 23:54:56 +00:00
});
2013-06-02 00:38:23 +00:00
return mediaImporter;
2013-06-02 00:38:23 +00:00
});