mirror of
https://github.com/codex-team/editor.js
synced 2024-05-09 18:06:59 +02:00
3cbe8faaa6
* small fixes regex match must not be similar to pasted string. Ex: ```https://www.instagram.com/p/BQ3wxmlA5GN/?taken-by=thenotoriousmma`` and match is ```https://www.instagram.com/p/BQ3wxmlA5GN/```. ```SwitchBlock``` have 3 parameter that is not important * new instagram embed regex
163 lines
3.5 KiB
JavaScript
163 lines
3.5 KiB
JavaScript
/**
|
|
* Instagram plugin
|
|
* @version 1.0.0
|
|
*/
|
|
var instagram = (function(instagram_plugin) {
|
|
|
|
var methods = {
|
|
|
|
render : function(content) {
|
|
|
|
codex.editor.content.switchBlock(codex.editor.content.currentNode, content);
|
|
|
|
setTimeout(function() {
|
|
window.instgrm.Embeds.process();
|
|
}, 200);
|
|
|
|
},
|
|
|
|
/**
|
|
* Drawing html content.
|
|
*
|
|
* @param url
|
|
* @returns {Element} blockquote - HTML template for Instagram Embed JS
|
|
*/
|
|
instagramBlock : function(url) {
|
|
|
|
var blockquote = codex.editor.draw.node('BLOCKQUOTE', 'instagram-media instagram', {}),
|
|
div = codex.editor.draw.node('DIV', '', {}),
|
|
paragraph = codex.editor.draw.node('P', 'ce-paste__instagram--p', {}),
|
|
anchor = codex.editor.draw.node('A', '', { href : url });
|
|
|
|
blockquote.dataset.instgrmVersion = 4;
|
|
|
|
paragraph.appendChild(anchor);
|
|
div.appendChild(paragraph);
|
|
blockquote.appendChild(div);
|
|
|
|
return blockquote;
|
|
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Prepare before usage
|
|
* Load important scripts to render embed
|
|
*/
|
|
instagram_plugin.prepare = function() {
|
|
|
|
return new Promise(function(resolve, reject){
|
|
|
|
codex.editor.core.importScript("https://platform.instagram.com/en_US/embeds.js", 'instagram-api').then(function(){
|
|
resolve();
|
|
}).catch(function(){
|
|
reject(Error('Instagram API was not loaded'));
|
|
});
|
|
|
|
});
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*
|
|
* Make instagram embed via Widgets method
|
|
*/
|
|
var make_ = function(data, isInternal) {
|
|
|
|
if (!data.instagram_url)
|
|
return;
|
|
|
|
var block = methods.instagramBlock(data.instagram_url);
|
|
|
|
if (isInternal) {
|
|
|
|
setTimeout(function() {
|
|
|
|
/** Render block */
|
|
methods.render(block);
|
|
|
|
}, 200);
|
|
}
|
|
|
|
if (!isInternal) {
|
|
methods.render(block);
|
|
}
|
|
|
|
return block;
|
|
};
|
|
|
|
instagram_plugin.validate = function(data) {
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* Saving JSON output.
|
|
* Upload data via ajax
|
|
*/
|
|
instagram_plugin.save = function(blockContent) {
|
|
|
|
var data;
|
|
|
|
if (!blockContent)
|
|
return;
|
|
|
|
/** Example */
|
|
data = {
|
|
instagram_url: blockContent.src
|
|
};
|
|
|
|
return data;
|
|
|
|
};
|
|
|
|
instagram_plugin.validate = function(data) {
|
|
|
|
var checkUrl = new RegExp("http?.+instagram.com\/p?.");
|
|
|
|
if (!data.instagram_url || checkUrl.exec(data.instagram_url).length == 0)
|
|
return;
|
|
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* Render data
|
|
*/
|
|
instagram_plugin.render = function(data) {
|
|
return make_(data);
|
|
};
|
|
|
|
/**
|
|
* callback for instagram url's coming from pasteTool
|
|
* Using instagram Embed Widgete to render
|
|
* @param url
|
|
*/
|
|
instagram_plugin.urlPastedCallback = function(url) {
|
|
var data = {
|
|
instagram_url: url
|
|
};
|
|
|
|
make_(data, true);
|
|
|
|
};
|
|
|
|
instagram_plugin.pastePatterns = [
|
|
{
|
|
type: 'instagram',
|
|
regex: /http?.+instagram.com\/p\/([a-zA-Z0-9]*)\S*/,
|
|
callback: instagram_plugin.urlPastedCallback
|
|
}
|
|
];
|
|
|
|
instagram_plugin.destroy = function () {
|
|
|
|
instagram = null;
|
|
delete window.instgrm
|
|
|
|
};
|
|
|
|
return instagram_plugin;
|
|
|
|
})({});
|
|
|