editor.js/plugins/instagram/instagram.js
khaydarov 3cbe8faaa6 Remove tool type from switchBlock -> by default it will saved from previous (#166)
* 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
2017-02-26 13:22:21 +03:00

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