* * Based on the html5video plugin Jason van Gumster, which had * Parts borrowed from the videogg plugin written by Ludovic Kiefer, * which is based on Christophe Benz' Dailymotion plugin, which, in turn, * is based on Ikuo Obataya's Youtube plugin. Whew... * * Supports mp4 and ogv videos (with flash fallback) */ // must be run within Dokuwiki if (!defined('DOKU_INC')) die(); if (!defined('DOKU_LF')) define('DOKU_LF', "\n"); if (!defined('DOKU_TAB')) define('DOKU_TAB', "\t"); if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once DOKU_PLUGIN.'syntax.php'; class syntax_plugin_htvid_video extends DokuWiki_Syntax_Plugin { public function getType() { return 'substition'; } public function getPType() { return 'block'; } public function getSort() { return 159; } public function connectTo($mode) { // recognizes the {{htvid> tag. Does not do any checking for parameters $this->Lexer->addSpecialPattern('{{htvid>.*?}}',$mode,'plugin_htvid_video'); } public function handle($match, $state, $pos, &$handler){ $params = substr($match, strlen('{{htvid>'), - strlen('}}')); //Strip markup if(strpos($params, ' ') === 0) { // Space as first character after 'htvid>' if(substr_compare($params, ' ', -1, 1) === 0) { // Space at front and back = centered $params = trim($params); $params = 'center|' . $params; } else { // Only space at front = right-aligned $params = trim($params); $params = 'right|' . $params; } } elseif(substr_compare($params, ' ', -1, 1) === 0) { // Space only as last character = left-aligned $params = trim($params); $params = 'left|' . $params; } else { // No space padding = inline $params = 'inline|' . $params; } return array(state, explode('|', $params)); } public function render($mode, &$renderer, $data) { if($mode != 'xhtml') return false; list($state, $params) = $data; list($video_align, $video_url1, $video_url2, $video_size, $video_attr) = $params; if($video_align == "center") { $align = "margin: 0 auto;"; } elseif($video_align == "left") { $align = "float: left;"; } elseif($video_align == "right") { $align = "float: right;"; } else { // Inline $align = ""; } if(substr($video_url1, -3) != 'ogv' && substr($video_url1, -3) != 'mp4') { $renderer->doc .= "Error: The video must be in ogv, or mp4 format. Bad file is:
" . $video_url1; return false; } if(substr($video_url2, -3) != 'ogv' && substr($video_url2, -3) != 'mp4') { $renderer->doc .= "Error: The video must be in ogv, or mp4 format. Bad file is:
" . $video_url2; return false; } // jw player doesn't seem to like the 'fetch.php=' links that the ml() function returns // so can't use them, but plugin breaks without these calls... if(!substr_count($video_url1, '/')) { $video_url1 = ml($video_url1,true,true); } if(!substr_count($video_url2, '/')) { $video_url2 = ml($video_url2,$abs=true); } //set default video size if none given if(is_null($video_size) or !substr_count($video_size, 'x')) { $width = 640; $height = 360; } else { $obj_dimensions = explode('x', $video_size); $width = $obj_dimensions[0]; $height = $obj_dimensions[1]; } //see if any attributes were given, set them if they exist... if(is_null($video_attr)) { $attr = ""; } else { $arr_attr = explode(',', $video_attr); if(count($arr_attr) == 1) { if($arr_attr[0] == "loop") { $attr = 'loop="loop"'; } elseif($arr_attr[0] == "autoplay") { $attr = 'autoplay="autoplay"'; } } elseif(count($arr_attr) == 2) { if($arr_attr[0] != $arr_attr[1]) { $attr = 'loop="loop" autoplay="autoplay"'; } else { $renderer->doc .= "Error: Duplicate parameters.
"; return false; } } else { $renderer->doc .= "Error: Wrong number of parameters.
"; return false; } } //now finally the code to render... $obj.= ''; if($align != "") { $obj = '
' . $obj . '
'; } $renderer->doc .= $obj; return true; } private function _getAlts($filename) { return false; } }