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
Last revisionBoth sides next revision
plugin:class [2008-12-11 09:54] 217.128.78.18plugin:class [2010-12-13 05:35] – [Discussion] 218.102.130.175
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 simply 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>
plugin/class.txt · Last modified: 2014-08-11 15:19 by 217.8.62.177

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