DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:class

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
plugin:class [2008-12-15 17:02] 217.128.78.18plugin:class [2014-08-11 15:19] (current) – [Description] 217.8.62.177
Line 1: Line 1:
 +====== class plugin ======
  
 +---- plugin ----
 +description: Simple plugin to add a class to a content
 +author     : Janusz
 +email      : janusz@ledruide.net
 +type       : syntax
 +lastupdate : 2009-09-16
 +compatible : 
 +depends    : 
 +conflicts 
 +similar    : box
 +tags       : boxes, style
 +----
 +
 +===== Description =====
 +
 +This is a simple plugin to add a class to a content. It prevents to use
 +<code html>
 +<html></p><div class="myStyleClass"><p></html>
 +
 +This is my content.
 +
 +<html></p></div><p></html>
 +</code>
 +
 +===== Usage =====
 +
 +Just use this syntax and change "myStyleClass" by your class.
 +
 +<code html>
 +<class myStyleClass>This is my content.</class>
 +</code>
 +
 +
 +===== Source code and installation =====
 +
 +Put the following PHP file in /lib/plugins/class/syntax.php
 +
 +<code php syntax.php>
 +<?php
 +/**
 + * Plugin class : add a class to a content
 + *
 + * Syntax: <class myStyleClass>content</class>
 + 
 + * @author     Janusz <janusz@ledruide.net>
 + * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 + */
 + 
 +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
 +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
 +require_once(DOKU_PLUGIN.'syntax.php');
 + 
 +class syntax_plugin_class extends DokuWiki_Syntax_Plugin {
 + 
 +   /**
 +    * Get an associative array with plugin info.
 +    */
 +    function getInfo(){
 +        return array(
 +            'author' => 'Janusz',
 +            'email'  => 'janusz@ledruide.net',
 +            'date'   => '2008-12-15',
 +            'name'   => 'class Plugin',
 +            'desc'   => 'Simple plugin to add a class to a content',
 +            'url'    => 'http://www.dokuwiki.org/plugin:class',
 +        );
 +    }
 + 
 +    function getType(){ return 'container'; }
 +    function getPType(){ return 'normal'; }
 +    function getAllowedTypes() { 
 +        return array('container','substition','protected','disabled','formatting','paragraphs');
 +    }
 + 
 +    // must return a number lower than returned by native 'code' mode (200)
 +    function getSort(){ return 158; }
 +
 + 
 +    /**
 +     * Connect pattern to lexer
 +     */
 +    function connectTo($mode) {       
 +        $this->Lexer->addEntryPattern('<class.*?>(?=.*?</class>)',$mode,'plugin_class');
 +    }
 +    function postConnect() {
 +        $this->Lexer->addExitPattern('</class>','plugin_class');
 +    }
 + 
 +
 +    /**
 +     * Handle the match
 +     */
 +    function handle($match, $state, $pos, &$handler){
 +        switch ($state) {
 +            case DOKU_LEXER_ENTER:
 +                $data = strtolower(trim(substr($match,6,-1)));
 +                return array($state, $data);
 +            
 +            case DOKU_LEXER_UNMATCHED : 
 +                return array($state, $match);
 +            
 +            case DOKU_LEXER_EXIT :
 +                return array($state, '');
 +            
 +        }       
 +        return false;
 +    }
 +
 +
 +   /**
 +     * output
 +     */
 +    function render($mode, &$renderer, $indata) {
 +        if($mode == 'xhtml'){
 +            list($state, $match) = $indata;
 +            switch ($state) {
 +            
 +            case DOKU_LEXER_ENTER :      
 +                $renderer->doc .= '</p><div class="'.htmlspecialchars($match).'"><p>';
 +                break;
 +            
 +              case DOKU_LEXER_UNMATCHED : 
 +                $renderer->doc .= $renderer->_xmlEntities($match);
 +                break;
 +            
 +              case DOKU_LEXER_EXIT :
 +                $renderer->doc .= "</p></div><p>";
 +                break;
 +            }
 +            return true;
 +        }
 +        return false;
 +    }
 +}
 + 
 +//Setup VIM: ex: et ts=4 enc=utf-8 :
 +?>
 +</code>
 +
 +
 +===== Versions =====
 +
 +  * **2009-09-16** : Change ''$match'' to ''htmlspecialchars($match)'' to prevent some malicious code.
 +  * **2008-12-15** : Change the getType() to convert the inside text in HTML code.
 +  * **2008-12-08** : First version.
 +
 +
 +===== Discussion =====
 +
 +How can I define font and other attributes of my class? Can it work in another pages?
 +
 +It is not boxes? I cannot use <class class1><class class2>Something</class>Something</class>

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki