editor.js/example/plugins/instagram/instagram.js
Murod Khaydarov 48ac2271f9 CodeX Editor 2.0
Co-authored-by: Murod Khaydarov <murod.haydarov@gmail.com>
Co-authored-by: Petr Savchenko <specc.dev@gmail.com>
Co-authored-by: George Berezhnoy <gohabereg@gmail.com>
Co-authored-by: Taly Guryn <vitalik7tv@yandex.ru>
2018-07-23 10:38:46 +03:00

144 lines
3.1 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;
})({});