aboutsummaryrefslogtreecommitdiff
path: root/juick-www/src/main/js
diff options
context:
space:
mode:
authorGravatar makc2017-05-19 02:13:22 +0200
committerGravatar makc2017-05-19 02:13:22 +0200
commit0a531e913ade331cffed8096cc39df94dcee4931 (patch)
treea7209585dcedc2b54aaf353ffd29c9b129db115e /juick-www/src/main/js
parent9e65b3027631500425b808eb98825b543273db1a (diff)
embed vimeo and youtube
Diffstat (limited to 'juick-www/src/main/js')
-rw-r--r--juick-www/src/main/js/killy/index.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/juick-www/src/main/js/killy/index.js b/juick-www/src/main/js/killy/index.js
index 391ce3b6..4d2331b6 100644
--- a/juick-www/src/main/js/killy/index.js
+++ b/juick-www/src/main/js/killy/index.js
@@ -41,6 +41,17 @@ function makeCts(makeNodeCallback, title) {
return ctsNode;
}
+function makeIframe(src, w, h, scrolling='no') {
+ let iframe = document.createElement('iframe');
+ iframe.width = w;
+ iframe.height = h;
+ iframe.frameBorder = 0;
+ iframe.scrolling = scrolling;
+ iframe.setAttribute('allowFullScreen', '');
+ iframe.src = src;
+ return iframe;
+}
+
function naiveEllipsis(str, len, ellStr='...') {
let ellLen = ellStr.length;
if (str.length <= len) { return str; }
@@ -110,6 +121,45 @@ function getEmbedableLinkTypes() {
audio.setAttribute('controls', '');
return wrapIntoTag(audio, 'div', 'audio');
}
+ },
+ {
+ name: 'YouTube videos (and playlists)',
+ id: 'embed_youtube_videos',
+ ctsDefault: false,
+ re: /^(?:https?:)?\/\/(?:www\.|m\.)?(?:youtu(?:(?:\.be\/|be\.com\/(?:v|embed)\/)([-\w]+)|be\.com\/watch)((?:(?:\?|&(?:amp;)?)(?:\w+=[-\.\w]*[-\w]))*)|youtube\.com\/playlist\?list=([-\w]*)(&(amp;)?[-\w\?=]*)?)/i,
+ makeNode: function(aNode, reResult) {
+ let [url, v, args, plist] = reResult;
+ let iframeUrl = url;
+ if (plist !== undefined) {
+ iframeUrl = '//www.youtube-nocookie.com/embed/videoseries?list=' + plist;
+ } else {
+ args = args.replace(/^\?/, '');
+ let arr = args.split('&').map(s => s.split('='));
+ let pp = {}; arr.forEach(z => pp[z[0]] = z[1]);
+ let embedArgs = { rel: '0' };
+ if (pp.t != undefined) {
+ const tre = /^(?:(\d+)|(?:(\d+)h)?(?:(\d+)m)?(\d+)s|(?:(\d+)h)?(\d+)m|(\d+)h)$/i;
+ let [, t, h, m, s, h1, m1, h2] = tre.exec(pp.t);
+ embedArgs['start'] = (+t) || ((+(h || h1 || h2 || 0))*60*60 + (+(m || m1 || 0))*60 + (+(s || 0)));
+ }
+ if (pp.list !== undefined) {
+ embedArgs['list'] = pp.list;
+ }
+ v = v || pp.v;
+ iframeUrl = '//www.youtube-nocookie.com/embed/' + v + '?' + Object.keys(embedArgs).map(k => `${k}=${embedArgs[k]}`).join('&');
+ }
+ return wrapIntoTag(makeIframe(iframeUrl, 640, 360), 'div', 'youtube');
+ }
+ },
+ {
+ name: 'Vimeo videos',
+ id: 'embed_vimeo_videos',
+ ctsDefault: false,
+ //re: /^(?:https?:)?\/\/(?:www\.)?(?:player\.)?vimeo\.com\/(?:(?:video\/|album\/[\d]+\/video\/)?([\d]+)|([\w-]+)\/(?!videos)([\w-]+))/i,
+ re: /^(?:https?:)?\/\/(?:www\.)?(?:player\.)?vimeo\.com\/(?:video\/|album\/[\d]+\/video\/)?([\d]+)/i,
+ makeNode: function(aNode, reResult) {
+ return wrapIntoTag(makeIframe('//player.vimeo.com/video/' + reResult[1], 640, 360), 'div', 'vimeo');
+ }
}
]
}