summaryrefslogtreecommitdiff
path: root/themes/okadmin/public/js/parser.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2021-02-23 20:31:19 +0100
committerJules Laplace <julescarbon@gmail.com>2021-02-23 20:31:19 +0100
commit464991b62e4fa6141449ca0c5980fcf0af3097a6 (patch)
tree18e597dc951cbf4605995e3aa1b1f8761449549f /themes/okadmin/public/js/parser.js
parent19516de0a43ac5f2b0afc9891bbef09d229ce4e6 (diff)
upload files and write to diskv0.3.0
Diffstat (limited to 'themes/okadmin/public/js/parser.js')
-rw-r--r--themes/okadmin/public/js/parser.js608
1 files changed, 341 insertions, 267 deletions
diff --git a/themes/okadmin/public/js/parser.js b/themes/okadmin/public/js/parser.js
index 81bba2d..ad1fc58 100644
--- a/themes/okadmin/public/js/parser.js
+++ b/themes/okadmin/public/js/parser.js
@@ -1,313 +1,387 @@
var Parser = {
- integrations: [{
- type: 'image',
- regex: /\.(jpeg|jpg|gif|png|svg)(\?.*)?$/i,
- fetch: function(url, done) {
- var img = new Image ()
- img.onload = function(){
- if (!img) return
- var width = img.naturalWidth, height = img.naturalHeight
- img = null
- done({
- url: url,
- type: "image",
- token: "",
- thumbnail: "",
- title: "",
- width: width,
- height: height,
- })
- }
- img.src = url
- if (img.complete) {
- img.onload()
- }
- },
- tag: function (media) {
- return '<img src="' + media.url + '">';
- }
- }, {
- type: 'video',
- regex: /\.(mp4|webm)(\?.*)?$/i,
- fetch: function(url, done) {
- var video = document.createElement("video")
- var url_parts = url.replace(/\?.*$/, "").split("/")
- var filename = url_parts[ url_parts.length-1 ]
- video.addEventListener("loadedmetadata", function(){
- var width = video.videoWidth, height = video.videoHeight
- video = null
- done({
- url: url,
- type: "video",
- token: url,
- thumbnail: "http://okfocus.s3.amazonaws.com/misc/okcms/video.png",
- title: filename,
- width: width,
- height: height,
- })
- })
- video.src = url
- video.load()
- },
- tag: function (media) {
- return '<video src="' + media.url + '">';
- }
- }, {
- type: 'audio',
- regex: /\.(wav|mp3)(\?.*)?$/i,
- fetch: function(url, done) {
- var audio = document.createElement("audio")
- var url_parts = url.replace(/\?.*$/, "").split("/")
- var filename = url_parts[ url_parts.length-1 ]
- audio.addEventListener("loadedmetadata", function(){
- var duration = audio.duration
- audio = null
- done({
- url: url,
- type: "audio",
- token: url,
- thumbnail: "http://okfocus.s3.amazonaws.com/misc/okcms/audio.png",
- title: filename,
- duration: duration,
- })
- })
- audio.src = url
- audio.load()
- },
- tag: function (media) {
- return '<audio src="' + media.url + '">';
- }
- }, {
- type: 'youtube',
- regex: /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i,
- fetch: function(url, done) {
- var id = (url.match(/v=([-_a-zA-Z0-9]{11})/i) || url.match(/youtu.be\/([-_a-zA-Z0-9]{11})/i) || url.match(/embed\/([-_a-zA-Z0-9]{11})/i))[1].split('&')[0];
- var thumb = "http://i.ytimg.com/vi/" + id + "/hqdefault.jpg"
- $.ajax({
- type: 'GET',
- url: 'https://www.googleapis.com/youtube/v3/videos',
- dataType: "jsonp",
- data: {
- id: id,
- key: "AIzaSyDYPKGD0-_VRBWpUYRmX8Qg6BtWmcPU_cM",
- part: "id,contentDetails,snippet,status",
- },
- success: function(result){
- var res = result.items[0]
- done({
- url: url,
- type: "youtube",
- token: id,
- thumbnail: thumb,
- title: res.snippet.title,
- autoplay: false,
- loop: false,
- width: 640,
- height: 360,
- })
- }
- })
- },
- tag: function (media) {
- // return '<img class="video" type="youtube" vid="'+media.token+'" src="'+media.thumbnail+'"><span class="playvid">&#9654;</span>';
- return '<div class="video" style="width: ' + media.width + 'px; height: ' + media.height + 'px; overflow: hidden; position: relative;"><iframe frameborder="0" scrolling="no" seamless="seamless" webkitallowfullscreen="webkitAllowFullScreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen" id="okplayer" width="' + media.width + '" height="' + media.height + '" src="http://youtube.com/embed/' + media.token + '?showinfo=0" style="position: absolute; top: 0px; left: 0px; width: ' + media.width + 'px; height: ' + media.height + 'px;"></iframe></div>'
- }
- }, {
- type: 'vimeo',
- regex: /vimeo.com\/\d+$/i,
- fetch: function(url, done) {
- var id = url.match(/\d+$/i)[0];
- $.ajax({
- type: 'GET',
- url: 'http://vimeo.com/api/v2/video/' + id + '.json',
- success: function(result){
- if (result.length == 0) { return done(id, "", 640, 360) }
- var res = result[0]
- if (res.embed_privacy != "anywhere") {
- AlertModal.alert("Sorry, the author of this video has marked it private, preventing it from being embedded.", function(){})
- return
- }
- done({
- url: url,
- type: "vimeo",
- token: id,
- thumbnail: res.thumbnail_large,
- title: res.title,
- width: res.width,
- height: res.height,
- autoplay: false,
- loop: false,
- })
- }
- })
- },
- tag: function (media) {
- // return '<img class="video" type="vimeo" vid="'+media.token+'" src="'+media.thumbnail+'"><span class="playvid">&#9654;</span>';
- return '<div class="video" style="width: ' + media.width + 'px; height: ' + media.height + 'px; overflow: hidden; position: relative;"><iframe frameborder="0" scrolling="no" seamless="seamless" webkitallowfullscreen="webkitAllowFullScreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen" id="okplayer" src="http://player.vimeo.com/video/' + media.token + '?api=1&title=0&byline=0&portrait=0&playbar=0&player_id=okplayer&loop=0&autoplay=0" width="' + media.width + '" height="' + media.height + '" style="position: absolute; top: 0px; left: 0px; width: ' + media.width + 'px; height: ' + media.height + 'px;"></iframe></div>'
- }
- }, {
- type: 'soundcloud',
- regex: /soundcloud.com\/[-a-zA-Z0-9]+\/[-a-zA-Z0-9]+\/?$/i,
- fetch: function (url, done) {
- $.ajax({
- type: 'GET',
- url: 'http://api.soundcloud.com/resolve.json?url='
- + url
- + '&client_id='
- + '0673fbe6fc794a7750f680747e863b10',
- success: function(result) {
- console.log(result)
- done({
- url: url,
- type: "soundcloud",
- token: result.id,
- thumbnail: result.artwork_url || result.user.avatar_url,
- title: result.user.username + " - " + result.title,
- duration: result.duration,
- width: 166,
- height: 166,
- })
- }
- });
- },
- tag: function (media) {
- return '<iframe width="166" height="166" scrolling="no" frameborder="no"' +
- 'src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/' + media.token +
- '&amp;color=ff6600&amp;auto_play=false&amp;show_artwork=true"></iframe>'
- }
- },
- {
- type: 'link',
- regex: /^http.+/i,
- fetch: function(url, done) {
- done({
- url: url,
- type: "link",
- token: "",
- thumbnail: "",
- title: "",
- width: 100,
- height: 100,
- })
- },
- tag: function (media) {
- return '<a href="' + media.url + '" target="_blank">' + media.url + '</a>'
- }
- },
- ],
+ integrations: [
+ {
+ type: "image",
+ regex: /\.(jpeg|jpg|gif|png|svg)(\?.*)?$/i,
+ fetch: function (url, done) {
+ var img = new Image();
+ img.onload = function () {
+ if (!img) return;
+ var width = img.naturalWidth,
+ height = img.naturalHeight;
+ img = null;
+ done({
+ url: url,
+ type: "image",
+ token: "",
+ thumbnail: "",
+ title: "",
+ width: width,
+ height: height,
+ });
+ };
+ img.src = url;
+ if (img.complete) {
+ img.onload();
+ }
+ },
+ tag: function (media) {
+ return '<img src="' + media.url + '">';
+ },
+ },
+ {
+ type: "video",
+ regex: /\.(mp4|webm)(\?.*)?$/i,
+ fetch: function (url, done) {
+ var video = document.createElement("video");
+ var url_parts = url.replace(/\?.*$/, "").split("/");
+ var filename = url_parts[url_parts.length - 1];
+ video.addEventListener("loadedmetadata", function () {
+ var width = video.videoWidth,
+ height = video.videoHeight;
+ video = null;
+ done({
+ url: url,
+ type: "video",
+ token: url,
+ thumbnail: "http://okfocus.s3.amazonaws.com/misc/okcms/video.png",
+ title: filename,
+ width: width,
+ height: height,
+ });
+ });
+ video.src = url;
+ video.load();
+ },
+ tag: function (media) {
+ return '<video src="' + media.url + '">';
+ },
+ },
+ {
+ type: "audio",
+ regex: /\.(wav|mp3)(\?.*)?$/i,
+ fetch: function (url, done) {
+ var audio = document.createElement("audio");
+ var url_parts = url.replace(/\?.*$/, "").split("/");
+ var filename = url_parts[url_parts.length - 1];
+ audio.addEventListener("loadedmetadata", function () {
+ var duration = audio.duration;
+ audio = null;
+ done({
+ url: url,
+ type: "audio",
+ token: url,
+ thumbnail: "http://okfocus.s3.amazonaws.com/misc/okcms/audio.png",
+ title: filename,
+ duration: duration,
+ });
+ });
+ audio.src = url;
+ audio.load();
+ },
+ tag: function (media) {
+ return '<audio src="' + media.url + '">';
+ },
+ },
+ {
+ type: "youtube",
+ regex: /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i,
+ fetch: function (url, done) {
+ var id = (url.match(/v=([-_a-zA-Z0-9]{11})/i) ||
+ url.match(/youtu.be\/([-_a-zA-Z0-9]{11})/i) ||
+ url.match(/embed\/([-_a-zA-Z0-9]{11})/i))[1].split("&")[0];
+ var thumb = "http://i.ytimg.com/vi/" + id + "/hqdefault.jpg";
+ $.ajax({
+ type: "GET",
+ url: "https://www.googleapis.com/youtube/v3/videos",
+ dataType: "jsonp",
+ data: {
+ id: id,
+ key: "AIzaSyDYPKGD0-_VRBWpUYRmX8Qg6BtWmcPU_cM",
+ part: "id,contentDetails,snippet,status",
+ },
+ success: function (result) {
+ var res = result.items[0];
+ done({
+ url: url,
+ type: "youtube",
+ token: id,
+ thumbnail: thumb,
+ title: res.snippet.title,
+ autoplay: false,
+ loop: false,
+ width: 640,
+ height: 360,
+ });
+ },
+ });
+ },
+ tag: function (media) {
+ // return '<img class="video" type="youtube" vid="'+media.token+'" src="'+media.thumbnail+'"><span class="playvid">&#9654;</span>';
+ return (
+ '<div class="video" style="width: ' +
+ media.width +
+ "px; height: " +
+ media.height +
+ 'px; overflow: hidden; position: relative;"><iframe frameborder="0" scrolling="no" seamless="seamless" webkitallowfullscreen="webkitAllowFullScreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen" id="okplayer" width="' +
+ media.width +
+ '" height="' +
+ media.height +
+ '" src="http://youtube.com/embed/' +
+ media.token +
+ '?showinfo=0" style="position: absolute; top: 0px; left: 0px; width: ' +
+ media.width +
+ "px; height: " +
+ media.height +
+ 'px;"></iframe></div>'
+ );
+ },
+ },
+ {
+ type: "vimeo",
+ regex: /vimeo.com\/\d+$/i,
+ fetch: function (url, done) {
+ var id = url.match(/\d+$/i)[0];
+ $.ajax({
+ type: "GET",
+ url: "http://vimeo.com/api/v2/video/" + id + ".json",
+ success: function (result) {
+ if (result.length == 0) {
+ return done(id, "", 640, 360);
+ }
+ var res = result[0];
+ if (res.embed_privacy != "anywhere") {
+ AlertModal.alert(
+ "Sorry, the author of this video has marked it private, preventing it from being embedded.",
+ function () {}
+ );
+ return;
+ }
+ done({
+ url: url,
+ type: "vimeo",
+ token: id,
+ thumbnail: res.thumbnail_large,
+ title: res.title,
+ width: res.width,
+ height: res.height,
+ autoplay: false,
+ loop: false,
+ });
+ },
+ });
+ },
+ tag: function (media) {
+ // return '<img class="video" type="vimeo" vid="'+media.token+'" src="'+media.thumbnail+'"><span class="playvid">&#9654;</span>';
+ return (
+ '<div class="video" style="width: ' +
+ media.width +
+ "px; height: " +
+ media.height +
+ 'px; overflow: hidden; position: relative;"><iframe frameborder="0" scrolling="no" seamless="seamless" webkitallowfullscreen="webkitAllowFullScreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen" id="okplayer" src="http://player.vimeo.com/video/' +
+ media.token +
+ '?api=1&title=0&byline=0&portrait=0&playbar=0&player_id=okplayer&loop=0&autoplay=0" width="' +
+ media.width +
+ '" height="' +
+ media.height +
+ '" style="position: absolute; top: 0px; left: 0px; width: ' +
+ media.width +
+ "px; height: " +
+ media.height +
+ 'px;"></iframe></div>'
+ );
+ },
+ },
+ {
+ type: "soundcloud",
+ regex: /soundcloud.com\/[-a-zA-Z0-9]+\/[-a-zA-Z0-9]+\/?$/i,
+ fetch: function (url, done) {
+ $.ajax({
+ type: "GET",
+ url:
+ "http://api.soundcloud.com/resolve.json?url=" +
+ url +
+ "&client_id=" +
+ "0673fbe6fc794a7750f680747e863b10",
+ success: function (result) {
+ console.log(result);
+ done({
+ url: url,
+ type: "soundcloud",
+ token: result.id,
+ thumbnail: result.artwork_url || result.user.avatar_url,
+ title: result.user.username + " - " + result.title,
+ duration: result.duration,
+ width: 166,
+ height: 166,
+ });
+ },
+ });
+ },
+ tag: function (media) {
+ return (
+ '<iframe width="166" height="166" scrolling="no" frameborder="no"' +
+ 'src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/' +
+ media.token +
+ '&amp;color=ff6600&amp;auto_play=false&amp;show_artwork=true"></iframe>'
+ );
+ },
+ },
+ {
+ type: "pdf",
+ regex: /\.pdf$/i,
+ fetch: function (url, done) {
+ done({
+ url: url,
+ type: "link",
+ token: "",
+ thumbnail: "",
+ title: "",
+ width: 100,
+ height: 100,
+ });
+ },
+ tag: function (media) {
+ return (
+ '<a href="' + media.url + '" target="_blank">' + media.url + "</a>"
+ );
+ },
+ },
+ {
+ type: "link",
+ regex: /^http.+/i,
+ fetch: function (url, done) {
+ done({
+ url: url,
+ type: "link",
+ token: "",
+ thumbnail: "",
+ title: "",
+ width: 100,
+ height: 100,
+ });
+ },
+ tag: function (media) {
+ return (
+ '<a href="' + media.url + '" target="_blank">' + media.url + "</a>"
+ );
+ },
+ },
+ ],
- tumblr: function(url, cb){
- var domain = url.replace(/^https?:\/\//,"").split("/")[0]
+ tumblr: function (url, cb) {
+ var domain = url.replace(/^https?:\/\//, "").split("/")[0];
if (domain.indexOf(".") == -1) {
- domain += ".tumblr.com"
+ domain += ".tumblr.com";
}
$.ajax({
- type: 'GET',
+ type: "GET",
url: "http://" + domain + "/api/read",
dataType: "jsonp",
data: {
format: "json",
},
- success: function(data){
- var media_list = []
- var blog = data.tumblelog
-
- data.posts.forEach(parse)
- cb(media_list)
+ success: function (data) {
+ var media_list = [];
+ var blog = data.tumblelog;
- function parse(post){
- var media, caption, url
+ data.posts.forEach(parse);
+ cb(media_list);
+
+ function parse(post) {
+ var media, caption, url;
switch (post.type) {
- case 'photo':
- caption = stripHTML(post['photo-caption'])
+ case "photo":
+ caption = stripHTML(post["photo-caption"]);
if (post.photos.length) {
- post.photos.forEach(function(photo){
+ post.photos.forEach(function (photo) {
var media = {
- url: photo['photo-url-1280'],
+ url: photo["photo-url-1280"],
type: "image",
token: "",
- thumbnail: photo['photo-url-500'],
+ thumbnail: photo["photo-url-500"],
description: caption,
width: parseInt(photo.width),
height: parseInt(photo.height),
- }
- media_list.push(media)
- })
- }
- else {
+ };
+ media_list.push(media);
+ });
+ } else {
media = {
- url: post['photo-url-1280'],
+ url: post["photo-url-1280"],
type: "image",
token: "",
- thumbnail: post['photo-url-500'],
+ thumbnail: post["photo-url-500"],
description: caption,
width: parseInt(post.width),
height: parseInt(post.height),
- }
- media_list.push(media)
+ };
+ media_list.push(media);
+ }
+ break;
+ case "video":
+ url = post["video-source"];
+ if (url.indexOf("http") !== 0) {
+ break;
}
- break
- case 'video':
- url = post['video-source']
- if (url.indexOf("http") !== 0) { break }
if (Parser.lookup.youtube.regex.test(url)) {
- var id = (url.match(/v=([-_a-zA-Z0-9]{11})/i) || url.match(/youtu.be\/([-_a-zA-Z0-9]{11})/i) || url.match(/embed\/([-_a-zA-Z0-9]{11})/i))[1].split('&')[0];
- var thumb = "http://i.ytimg.com/vi/" + id + "/hqdefault.jpg"
+ var id = (url.match(/v=([-_a-zA-Z0-9]{11})/i) ||
+ url.match(/youtu.be\/([-_a-zA-Z0-9]{11})/i) ||
+ url.match(/embed\/([-_a-zA-Z0-9]{11})/i))[1].split("&")[0];
+ var thumb = "http://i.ytimg.com/vi/" + id + "/hqdefault.jpg";
media = {
- url: post['video-source'],
+ url: post["video-source"],
type: "youtube",
token: id,
thumbnail: thumb,
- title: stripHTML(post['video-caption']),
+ title: stripHTML(post["video-caption"]),
width: 640,
height: 360,
autoplay: false,
loop: false,
- }
- media_list.push(media)
+ };
+ media_list.push(media);
}
- break
+ break;
}
}
-// console.log(post)
+ // console.log(post)
+ },
+ });
+ },
+
+ parse: function (url, cb) {
+ var matched = Parser.integrations.some(function (integration) {
+ if (integration.regex.test(url)) {
+ integration.fetch(url, function (res) {
+ cb(res);
+ });
+ return true;
}
- })
+ return false;
+ });
+ if (!matched) {
+ cb(null);
+ }
},
- parse: function (url, cb) {
- var matched = Parser.integrations.some(function(integration){
- if (integration.regex.test(url)) {
- integration.fetch(url, function(res){
- cb(res)
- })
- return true
- }
- return false
- })
- if (! matched) {
- cb(null)
- }
- },
-
- tag: function (media){
- if (media.type in Parser.lookup) {
- return Parser.lookup[media.type].tag(media)
- }
- return ""
- },
+ tag: function (media) {
+ if (media.type in Parser.lookup) {
+ return Parser.lookup[media.type].tag(media);
+ }
+ return "";
+ },
+
+ loadImage: function (url, cb, error) {
+ if (Parser.lookup.image.regex.test(url)) {
+ Parser.lookup.image.fetch(url, function (media) {
+ cb(media);
+ });
+ } else error && error();
+ },
- loadImage: function(url, cb, error){
- if (Parser.lookup.image.regex.test(url)) {
- Parser.lookup.image.fetch(url, function(media){
- cb(media)
- })
- }
- else error && error()
- },
-
thumbnail: function (media) {
return '<img src="' + (media.thumbnail || media.url) + '" class="thumb">';
},
-
};
-Parser.lookup = _.indexBy(Parser.integrations, 'type');
+Parser.lookup = _.indexBy(Parser.integrations, "type");