MEDIUM: Update plugin vshare to v2017-04-27

This commit is contained in:
Bertrand Jacquin 2017-10-15 04:52:26 +01:00
parent 2dc3353e32
commit 76176dc21c
No known key found for this signature in database
GPG Key ID: 5534871F2E2E93DA
22 changed files with 26 additions and 530 deletions

View File

@ -18,3 +18,7 @@ div.vshare__center {
display: block;
}
iframe.vshare__none,
div.vshare__none {
margin: 1px 3px 1px 3px;
}

View File

@ -7,4 +7,4 @@
$lang['js']['button'] = '동영상 공유 사이트에서 동영상 넣기';
$lang['js']['prompt'] = '여기에 동영상 페이지의 전체 URL을 붙여넣으세요:';
$lang['js']['notfound'] = "죄송하지만 이 URL을 인식할 수 없습니다.\n수동으로 올바른 문법을 넣는 방법에 대해서는 설명서를 참고하세요.";
$lang['js']['notfound'] = "죄송하지만 이 URL을 인식할 수 없습니다.\n수동으로 올바른 문법을 넣는 방법에 대해서는 설명문서를 참조하세요.";

View File

@ -1,7 +1,7 @@
base vshare
author Andreas Gohr
email andi@splitbrain.org
date 2014-11-25
date 2017-04-27
name Video Sharing Site Plugin
desc Easily embed videos from various Video Sharing sites. Example: {{youtube>XXXXXX}}
url https://www.dokuwiki.org/plugin:vshare

View File

@ -11,6 +11,8 @@ metacafe iframe http://www.metacafe.com/embed/@VIDEO@/
bliptv iframe //blip.tv/play/@VIDEO@.x?p=1
break iframe //www.break.com/embed/@VIDEO@?embed=1
msoffice iframe http://hub.video.msn.com/embed/@VIDEO@/
archiveorg iframe //archive.org/embed/@VIDEO@
niconico iframe http://embed.nicovideo.jp/watch/@VIDEO@
5min flash http://www.5min.com/Embeded/@VIDEO@/
clipfish flash //www.clipfish.de/cfng/flash/clipfish_player_3.swf?as=0&vid=@VIDEO@&r=1&angebot=extern&
@ -20,7 +22,6 @@ rcmovie flash http://www.rcmovie.de/embed/@VIDEO@
scivee flash //www.scivee.tv/flash/embedPlayer.swf?id=@VIDEO@&type=3
twitchtv flash http://www.twitch.tv/widgets/live_embed_player.swf?channel=@VIDEO@&auto_play=false&start_volume=25
veoh flash //www.veoh.com/videodetails2.swf?player=videodetailsembedded&type=v&permalinkId=@VIDEO@&id=anonymous
youku flash http://player.youku.com/player.php/sid/@VIDEO@/v.swf
tudou flash http://www.tudou.com/v/@VIDEO@/&resourceId=0_05_05_99&bid=05/v.swf
bilibili flash http://static.hdslb.com/miniloader.swf?aid=@VIDEO@&&page=1

View File

@ -25,7 +25,12 @@ var sites = {
'bliptv': '(?:blip\\.tv\\/play\\/([a-zA-Z0-9]+\\.(?:html|x))\\?p=1|(http?\\:\\/\\/blip\\.tv\\/(?!play)(?:[a-zA-Z0-9_\\-]+)\\/(?:[a-zA-Z0-9_\\-]+)))',
'break': 'break\\.com\\/video\\/(?:(?:[a-z]+)\\/)?(?:[a-z\\-]+)-([0-9]+)',
'viddler': 'viddler\\.com\\/(?:embed|v)\\/([a-z0-9]{8})',
'msoffice': '(?:office\\.com.*[&?]videoid=([a-z0-9\\-]+))',
'slideshare': '(?:(?:slideshare\\.net\\/slideshow\\/embed_code\\/|id=)([0-9]+)|(https?\\:\\/\\/www\\.slideshare\\.net\\/(?:[a-zA-Z0-9_\\-]+)\\/(?:[a-zA-Z0-9_\\-]+)))'
'msoffice': '(?:office\\.com.*[&?]videoid=([a-z0-9\\-]+))',
'slideshare': '(?:(?:slideshare\\.net\\/slideshow\\/embed_code\\/|id=)([0-9]+)|(https?\\:\\/\\/www\\.slideshare\\.net\\/(?:[a-zA-Z0-9_\\-]+)\\/(?:[a-zA-Z0-9_\\-]+)))',
'archiveorg': 'archive\\.org\\/embed\\/([a-zA-Z0-9_\\-]+)',
'niconico': 'nicovideo\\.jp/watch/(sm[0-9]+)',
'youku': 'v\\.youku\\.com/v_show/id_([[0-9A-Za-z]]+)\\.html',
'tudou': 'tudou\\.com/programs/view/([0-9A-Za-z]+)',
'bilibili': 'bilibili\\.com/video/av([0-9])+/'
};

View File

@ -1,25 +0,0 @@
vshare Plugin for DokuWiki
All documentation for this plugin can be found at
http://www.dokuwiki.org/plugin:vshare
If you install this plugin manually, make sure it is installed in
lib/plugins/vshare/ - if the folder is called different it
will not work!
Please refer to http://www.dokuwiki.org/plugins for additional info
on how to install plugins in DokuWiki.
----
Copyright (C) Andreas Gohr <andi@splitbrain.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
See the COPYING file in your DokuWiki folder for details

View File

@ -1,20 +0,0 @@
iframe.vshare__left,
div.vshare__left {
float: left;
margin-right: 1em;
}
iframe.vshare__right,
div.vshare__right {
float: right;
margin-left: 1em;
}
iframe.vshare__center,
div.vshare__center {
text-align: center;
margin-left: auto;
margin-right: auto;
display: block;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 710 B

View File

@ -1,6 +0,0 @@
<?php
$lang['js']['button'] = 'Insert video from video sharing sites';
$lang['js']['prompt'] = 'Please paste the full URL to the video page here:';
$lang['js']['notfound'] = "Sorry, this URL wasn't recognized.\nPlease refer to the documentation on how to insert the correct syntax manually.";

View File

@ -1,10 +0,0 @@
<?php
/**
* French language file for vshare plugin
*
* @author Fabrice DEJAIGHER <fabrice@chtiland.com>
*/
$lang['js']['button'] = 'Insère une vidéo depuis des sites de partage vidéo';
$lang['js']['prompt'] = 'Copiez/collez le lien complet de la page contenant la vidéo ici :';
$lang['js']['notfound'] = "Désolé, cette URL n'a pas été reconnue. Consultez la documentation sur la syntaxe pour insérer une vidéo manuellement.";

View File

@ -1,10 +0,0 @@
<?php
/**
* japanese language file
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*/
$lang['js']['button'] = '動画共有サイトの動画を挿入';
$lang['js']['prompt'] = 'ここに動画ページへの完全な URL を貼り付けて下さい:';
$lang['js']['notfound'] = "申し訳ないですが、この URL が認識されません。\n手動で正しい構文を挿入する方法をマニュアルで確認して下さい。";

View File

@ -1,10 +0,0 @@
<?php
/**
* Korean language file for vshare plugin
*
* @author Myeongjin <aranet100@gmail.com>
*/
$lang['js']['button'] = '동영상 공유 사이트에서 동영상 넣기';
$lang['js']['prompt'] = '여기에 동영상 페이지의 전체 URL을 붙여넣으세요:';
$lang['js']['notfound'] = "죄송하지만 이 URL을 인식할 수 없습니다.\n수동으로 올바른 문법을 넣는 방법에 대해서는 설명서를 참고하세요.";

View File

@ -1,10 +0,0 @@
<?php
/**
* Dutch language file for vshare plugin.
*
* @author Mark C. Prins <mprins@users.sf.net>
*/
$lang['js']['button'] = 'Voeg een video van een video-delen website in';
$lang['js']['prompt'] = 'Plak hier de volledige URL voor de video pagina:';
$lang['js']['notfound'] = "Sorry, deze URL werd niet herkend.\nRaadpleeg de documentatie over de juiste syntax om een URL handmatig in te voegen.";

View File

@ -1,16 +0,0 @@
div.vshare__left,
div.vshare__right,
div.vshare__center {
border: 1px solid #ccc;
text-align: center;
padding: 2em;
}
a.vshare {
color: #aaa;
font-size: 2em;
font-weight: bold;
text-decoration: none;
}

View File

@ -1,8 +0,0 @@
base vshare
author Andreas Gohr
email andi@splitbrain.org
date 2014-11-25
name Video Sharing Site Plugin
desc Easily embed videos from various Video Sharing sites. Example: {{youtube>XXXXXX}}
url https://www.dokuwiki.org/plugin:vshare

View File

@ -1,22 +0,0 @@
<?php
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <gohr@cosmocode.de>
*
* Simple redirector script to avoid security warnings when embedding HTTP in SSL secured sites
*
* To avoid open redirects, a secret hash has to be provided
*/
if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__) . '/../../../');
define('NOSESSION', true);
require_once(DOKU_INC . 'inc/init.php');
global $INPUT;
$url = $INPUT->str('url');
$hash = $INPUT->str('hash');
if(!$url) die('sorry. no url');
if(!$hash) die('sorry. no hash');
if($hash != md5(auth_cookiesalt() . 'vshare' . $url)) die('sorry. wrong hash');
send_redirect($url);

View File

@ -1,116 +0,0 @@
/**
* Append a toolbar button
*/
if(window.toolbar != undefined){
toolbar[toolbar.length] = {"type": "pluginvshare",
"title": LANG['plugins']['vshare']['button'],
"icon": "../../plugins/vshare/button.png",
"key": ""};
}
/**
* Try to determine the video service, extract the ID and insert
* the correct syntax
*/
function tb_pluginvshare(btn, props, edid) {
PluginVShare.edid = edid;
PluginVShare.buildSyntax();
}
var PluginVShare = {
edid: null,
buildSyntax: function () {
var text = prompt(LANG['plugins']['vshare']['prompt']);
if (!text) return;
// This includes the site patterns:
/* DOKUWIKI:include sites.js */
for (var key in sites) {
if(sites.hasOwnProperty(key)) {
var RE = new RegExp(sites[key], 'i');
var match = text.match(RE);
if (match) {
var urlparam = '';
var videoid = match[1];
switch (key) {
case 'slideshare':
//provided video url?
if(match[2]) {
jQuery.ajax({
url: '//www.slideshare.net/api/oembed/2',
dataType: 'jsonp',
data: {
url: match[2],
format: 'jsonp'
}
}).done(function (response, status, error) {
var videoid = response.slideshow_id;
PluginVShare.insert(key, videoid, urlparam);
}).fail(function (data, status, error) {
/* http://www.slideshare.net/developers/oembed
* If not found, an status 200 with response {error:true} is returned,
* but "Content-Type:application/javascript; charset=utf-8" is then
* wrongly changed to "Content-Type:application/json; charset=utf-8"
* so it throws a parseerror
*/
alert(LANG['plugins']['vshare']['notfound']);
});
return;
}
break;
case 'bliptv':
//provided video url?
if(match[2]) {
jQuery.ajax({
url: '//blip.tv/oembed/',
dataType: 'jsonp',
data: {
url: match[2],
format: 'json'
},
timeout: 2000
}).done(function (response, status, error) {
var videoidmatch = response.html.match(RE);
PluginVShare.insert(key, videoidmatch[1], urlparam);
}).fail(function (data, status, error) {
/*
* If url is not found(=wrong numerical number on end), blip.tv returns a 404
* because jsonp is not a xmlhttprequest, there is no 404 catched
* errors are detected by waiting at the timeout
*/
alert(LANG['plugins']['vshare']['notfound']);
});
return;
}
break;
case 'twitchtv':
if (match[2]) {
urlparam = '&chapter_id=' + match[2];
}
break;
}
PluginVShare.insert(key, videoid, urlparam);
return;
}
}
}
alert(LANG['plugins']['vshare']['notfound']);
},
insert: function(key, videoid, urlparam, edid) {
var code = '{{' + key + '>' + videoid + '?medium' + urlparam + '}}';
insertAtCarret(PluginVShare.edid, code);
}
};

View File

@ -1,26 +0,0 @@
# configure video site flash or iframe URLs here, @VIDEO@ is the ID placeholder
vimeo iframe //player.vimeo.com/video/@VIDEO@
ustream iframe http://www.ustream.tv/embed/recorded/@VIDEO@
youtube iframe //www.youtube.com/embed/@VIDEO@
viddler iframe //www.viddler.com/embed/@VIDEO@/?f=1&autoplay=0&player=mini&hideablecontrolbar=1&smooth=0&disablebranding=0&loop=0&nologo=0&hd=0
slideshare iframe //www.slideshare.net/slideshow/embed_code/@VIDEO@
dailymotion iframe //www.dailymotion.com/embed/video/@VIDEO@
bambuser iframe http://embed.bambuser.com/broadcast/@VIDEO@
metacafe iframe http://www.metacafe.com/embed/@VIDEO@/
bliptv iframe //blip.tv/play/@VIDEO@.x?p=1
break iframe //www.break.com/embed/@VIDEO@?embed=1
msoffice iframe http://hub.video.msn.com/embed/@VIDEO@/
5min flash http://www.5min.com/Embeded/@VIDEO@/
clipfish flash //www.clipfish.de/cfng/flash/clipfish_player_3.swf?as=0&vid=@VIDEO@&r=1&angebot=extern&
gtrailers flash http://www.gametrailers.com/remote_wrap.php?mid=@VIDEO@
myspacetv flash http://lads.myspace.com/videos/vplayer.swf?m=@VIDEO@&v=2&type=video
rcmovie flash http://www.rcmovie.de/embed/@VIDEO@
scivee flash //www.scivee.tv/flash/embedPlayer.swf?id=@VIDEO@&type=3
twitchtv flash http://www.twitch.tv/widgets/live_embed_player.swf?channel=@VIDEO@&auto_play=false&start_volume=25
veoh flash //www.veoh.com/videodetails2.swf?player=videodetailsembedded&type=v&permalinkId=@VIDEO@&id=anonymous

View File

@ -1,31 +0,0 @@
/**
* video URL recognition patterns
*
* The first match group is used as video ID
*
* You need to touch conf/local.php to refresh the cache after changing
* this file
*/
var sites = {
'youtube': 'youtube\\.com/.*[&?]v=([a-z0-9_\\-]+)',
'vimeo': 'vimeo\\.com\\/(\\d+)',
'ustream': 'ustream\\.tv\\/recorded\\/(\\d+)\\/',
'5min': '5min\\.com\\/Video/.*-([0-9]+)([&?]|$)',
'clipfish': 'clipfishi\\.de\\/.*\\/video\\/([0-9])+\\/',
'dailymotion': 'dailymotion\\.com\\/video\\/([a-z0-9]+)_',
'gtrailers': 'gametrailers\\.com\\/.*\\/(\\d+)',
'metacafe': 'metacafe\\.com\\/watch\\/(\\d+)\\/',
'myspacetv': 'vids\\.myspace\\.com\\/.*videoid=(\\d+)',
'rcmovie': 'rcmovie\\.de\\/video\\/([a-f0-9]+)\\/',
'scivee': 'scivee\\.tv\\/node\\/(\\d+)',
'twitchtv': 'twitch\\.tv\\/([a-z0-9_\\-]+)(?:\\/c\\/(\\d+))?',
'veoh': 'veoh\\.com\\/.*watch[^v]*(v[a-z0-9]+)',
'bambuser': 'bambuser\\.com\\/v\\/(\\d+)',
'bliptv': '(?:blip\\.tv\\/play\\/([a-zA-Z0-9]+\\.(?:html|x))\\?p=1|(http?\\:\\/\\/blip\\.tv\\/(?!play)(?:[a-zA-Z0-9_\\-]+)\\/(?:[a-zA-Z0-9_\\-]+)))',
'break': 'break\\.com\\/video\\/(?:(?:[a-z]+)\\/)?(?:[a-z\\-]+)-([0-9]+)',
'viddler': 'viddler\\.com\\/(?:embed|v)\\/([a-z0-9]{8})',
'msoffice': '(?:office\\.com.*[&?]videoid=([a-z0-9\\-]+))',
'slideshare': '(?:(?:slideshare\\.net\\/slideshow\\/embed_code\\/|id=)([0-9]+)|(https?\\:\\/\\/www\\.slideshare\\.net\\/(?:[a-zA-Z0-9_\\-]+)\\/(?:[a-zA-Z0-9_\\-]+)))'
};

View File

@ -1,209 +0,0 @@
<?php
/**
* Easily embed videos from various Video Sharing sites
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
*/
if(!defined('DOKU_INC')) die();
require_once(DOKU_PLUGIN.'syntax.php');
class syntax_plugin_vshare extends DokuWiki_Syntax_Plugin {
var $sites;
/**
* Constructor.
* Intitalizes the supported video sites
*/
function syntax_plugin_vshare(){
$this->sites = confToHash(dirname(__FILE__).'/sites.conf');
}
function getType(){
return 'substition';
}
function getPType(){
return 'block';
}
function getSort(){
return 159;
}
/**
* Connect to the parser
*/
function connectTo($mode) {
$pattern = join('|',array_keys($this->sites));
$this->Lexer->addSpecialPattern('\{\{\s?(?:'.$pattern.')>[^}]*\}\}',$mode,'plugin_vshare');
}
/**
* Parse the parameters
*/
function handle($match, $state, $pos, &$handler){
$command = substr($match,2,-2);
// title
list($command,$title) = explode('|',$command);
$title = trim($title);
// alignment
$align = 0;
if(substr($command,0,1) == ' ') $align += 1;
if(substr($command,-1) == ' ') $align += 2;
$command = trim($command);
// get site and video
list($site,$vid) = explode('>',$command);
if(!$this->sites[$site]) return null; // unknown site
if(!$vid) return null; // no video!?
// what size?
list($vid,$param) = explode('?',$vid,2);
if(preg_match('/(\d+)x(\d+)/i',$param,$m)){ // custom
$width = $m[1];
$height = $m[2];
}elseif(strpos($param,'small') !== false){ // small
$width = 255;
$height = 210;
}elseif(strpos($param,'large') !== false){ // large
$width = 520;
$height = 406;
}else{ // medium
$width = 425;
$height = 350;
}
$paramm = array();
parse_str($param, $paramm);
$urlparam = array();
foreach($paramm as $key => $value) {
switch($key) {
case 'rel':
case 'autoplay':
case 'ap':
if($paramm[$key] === '1' || $paramm[$key] === '0') {
$urlparam[] = $key . '=' . $paramm[$key];
}
break;
case 'start':
case 'end':
case 'chapter_id': //for twitch.tv
case 'initial_time':
case 'offsetTime':
case 'startSlide':
$number = (int) $paramm[$key];
if($number > 0) {
$urlparam[] = $key . '=' . $number;
}
break;
case 'auto_start':
if($paramm[$key] === 'true' || $paramm[$key] === 'false') {
$urlparam[] = $key . '=' . $paramm[$key];
}
break;
}
}
list($type, $url) = explode(' ', $this->sites[$site], 2);
$url = trim($url);
$type = trim($type);
$url = str_replace('@VIDEO@',rawurlencode($vid),$url);
$url = str_replace('@WIDTH@',$width,$url);
$url = str_replace('@HEIGHT@',$height,$url);
if(count($urlparam)) {
if(strpos($url, '?') !== false) {
$sepchar = '&';
} else {
$sepchar = '?';
}
$url .= $sepchar . implode('&', $urlparam);
}
list(,$vars) = explode('?',$url,2);
$varr = array();
parse_str($vars,$varr);
return array(
'site' => $site,
'video' => $vid,
'url' => $url,
'vars' => $varr,
'align' => $align,
'width' => $width,
'height' => $height,
'title' => $title,
'type' => $type
);
}
/**
* Render the flash player
*/
function render($mode, &$R, $data){
if($mode != 'xhtml') return false;
if(is_null($data)) return false;
if($data['align'] == 0) $align = 'none';
if($data['align'] == 1) $align = 'right';
if($data['align'] == 2) $align = 'left';
if($data['align'] == 3) $align = 'center';
if($data['title']) $title = ' title="'.hsc($data['title']).'"';
if(is_a($R,'renderer_plugin_dw2pdf')){
// Output for PDF renderer
$R->doc .= '<div class="vshare__'.$align.'"
width="'.$data['width'].'"
height="'.$data['height'].'">';
$R->doc .= '<a href="'.$data['url'].'" class="vshare">';
$R->doc .= '<img src="'.DOKU_BASE.'lib/plugins/vshare/video.png" />';
$R->doc .= '</a>';
$R->doc .= '<br />';
$R->doc .= '<a href="'.$data['url'].'" class="vshare">';
$R->doc .= ($data['title'] ? hsc($data['title']) : 'Video');
$R->doc .= '</a>';
$R->doc .= '</div>';
}else{
// use redirector for HTTP embeds on SSL sites
if(is_ssl() && substr($data['url'], 0, 7) == 'http://') {
$data['url'] = DOKU_BASE.'lib/plugins/vshare/redir.php'.
'?url='.rawurlencode($data['url']).
'&hash='.md5(auth_cookiesalt().'vshare'.$data['url']);
}
// Normal output
if($data['type'] == 'flash') {
// embed flash
$R->doc .= '<div class="vshare__'.$align.'"'.$title.'>';
$R->doc .= html_flashobject(
$data['url'],
$data['width'],
$data['height'],
$data['vars'],
$data['vars']);
$R->doc .= '</div>';
}else{
// embed iframe
$R->doc .= '<iframe ';
$R->doc .= buildAttributes(array(
'src' => $data['url'],
'height' => $data['height'],
'width' => $data['width'],
'class' => 'vshare__'.$align,
'allowfullscreen' => '',
'frameborder' => 0,
'scrolling' => 'no'
));
$R->doc .= '>'.hsc($data['title']).'</iframe>';
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -16,7 +16,7 @@ class syntax_plugin_vshare extends DokuWiki_Syntax_Plugin {
* Constructor.
* Intitalizes the supported video sites
*/
function syntax_plugin_vshare(){
function __construct(){
$this->sites = confToHash(dirname(__FILE__).'/sites.conf');
}
@ -44,7 +44,7 @@ class syntax_plugin_vshare extends DokuWiki_Syntax_Plugin {
/**
* Parse the parameters
*/
function handle($match, $state, $pos, &$handler){
function handle($match, $state, $pos, Doku_Handler $handler){
$command = substr($match,2,-2);
// title
@ -83,6 +83,11 @@ class syntax_plugin_vshare extends DokuWiki_Syntax_Plugin {
$urlparam = array();
foreach($paramm as $key => $value) {
switch($key) {
case 'list':
if(preg_match('/^[-\w]+$/',$value)) {
$urlparam[] = $key . '=' . $value;
}
break;
case 'rel':
case 'autoplay':
case 'ap':
@ -144,7 +149,7 @@ class syntax_plugin_vshare extends DokuWiki_Syntax_Plugin {
/**
* Render the flash player
*/
function render($mode, &$R, $data){
function render($mode, Doku_Renderer $R, $data){
if($mode != 'xhtml') return false;
if(is_null($data)) return false;