*/
// must be run within Dokuwiki
if (!defined('DOKU_INC')) die();
class syntax_plugin_lsb_button extends DokuWiki_Syntax_Plugin {
/**
* @return string Syntax mode type
*/
public function getType() {
return 'substition';
}
/**
* @return string Paragraph type
*/
public function getPType() {
return 'normal';
}
/**
* @return int Sort order - Low numbers go before high numbers
*/
public function getSort() {
return 999;
}
/**
* Connect lookup pattern to lexer.
*
* @param string $mode Parser mode
*/
public function connectTo($mode) {
$this->Lexer->addSpecialPattern('~~LSB\b.*?~~',$mode,'plugin_lsb_button');
// $this->Lexer->addEntryPattern('',$mode,'plugin_lsb_button');
}
// public function postConnect() {
// $this->Lexer->addExitPattern('','plugin_lsb_button');
// }
/**
* Handle matches of the lsb syntax
*
* @param string $match The match of the syntax
* @param int $state The state of the handler
* @param int $pos The position in the document
* @param Doku_Handler $handler The handler
* @return array Data for the renderer
*/
public function handle($match, $state, $pos, Doku_Handler &$handler){
$match = strtolower(trim(substr($match, 5, -2))); // strip markup
if (empty($match)) {
$match = strtolower(trim($this->getConf('networks')));
}
return explode(' ', $match);
}
/**
* Render xhtml output or metadata
*
* @param string $mode Renderer mode (supported modes: xhtml)
* @param Doku_Renderer $renderer The renderer
* @param array $data The data from the handler() function
* @return bool If rendering was successful.
*/
public function render($mode, Doku_Renderer &$renderer, $data) {
if($mode != 'xhtml') return false;
$renderer->doc .= '
';
// validation list of available social networks
$protected = array('twitter', 'facebook', 'google+', 'linkedin', 'pinterest', 'tumblr', 'reddit');
foreach ($data as $network) {
if (in_array($network, $protected)) {
$renderer->doc .= $this->lsb_button($network);
}
}
$renderer->doc .= '
';
return true;
}
/**
* Render xhtml output for facebook share button
*
* @param string $network The social network to render the button to
* @return string Xhtml code for button.
*/
protected function lsb_button ($network) {
global $ID;
global $INFO;
$url = rawurlencode(wl($ID,'',true));
$title = hsc(($INFO['meta']['title']) ? $INFO['meta']['title'] : $meta);
$abstract = hsc($INFO['meta']['description']['abstract']);
// see: https://github.com/cferdinandi/social-sharing
// Tweet
// Share on Facebook
// Plus on Google+
// Share on LinkedIn
// Pin on Pinterest
// Share on VK
// Share on Xing
// Share on Tumblr
// Share on Reddit
$xhtml = '';
switch ($network) {
case 'twitter':
$xhtml .= '';
break;
case 'facebook':
$xhtml .= '' . $this->getLang('facebook_name') . '';
break;
case 'google+':
$xhtml .= '' . $this->getLang('google+_name') . '';
break;
case 'linkedin':
$xhtml .= '' . $this->getLang('linkedin_name') . '';
break;
case 'pinterest':
$xhtml .= '' . $this->getLang('pinterest_name') . '';
break;
case 'tumblr':
$xhtml .= '' . $this->getLang('tumblr_name') . '';
break;
case 'reddit':
$xhtml .= '' . $this->getLang('reddit_name') . '';
break;
}
$xhtml .= '';
return $xhtml;
}
}