<?php
/**
 * Virtual Keyboard plugin
 *
 * $Id: action.php 22 2007-01-04 02:08:26Z wingedfox $
 * $HeadURL: https://svn.debugger.ru/repos/common/DokuWiki/VirtualKeyboard/tags/VirtualKeyboard.v0.2.1/action.php $
 * 
 * @license    LGPL 2 (http://www.gnu.org/licenses/lgpl.html)
 * @author     Ilya Lebedev <ilya@lebedev.net>
 * @copyright  2007 Ilya Lebedev
 */
 
if(!defined('DOKU_INC')) die();
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'action.php');
 
class action_plugin_virtualkeyboard extends DokuWiki_Action_Plugin {
 
  /**
   *  Flags to embed loader, if keyboard has been embedded somewhere, except the edit page
   *
   *  @type Boolean
   *  @access private
   */
  var $injectKeyboard = false;
  /**
   * return some info
   */
  function getInfo(){
    return array(
                 'author' => 'Ilya Lebedev',
                 'email'  => 'ilya@lebedev.net',
                 'date'   => '$Date: 2007-01-04 05:08:26 +0300 (Чтв, 04 Янв 2007) $',
                 'name'   => 'Virtual Keyboard',
                 'desc'   => 'Adds the VirtualKeyboard control to the edit form.',
                 'url'    => 'http://wiki.splitbrain.org/plugin:virtualkeyboard',
                 );
  }
    
  /*
   * plugin should use this method to register its handlers with the dokuwiki's event controller
   */
  function register(&$controller) {
    $controller->register_hook('HTML_EDITFORM_INJECTION','AFTER', $this, '_inject_keyboard');
    $controller->register_hook('TPL_METAHEADER_OUTPUT','BEFORE', $this, '_inject_loader');
  }

  /**
   *  Inject the virtual keyboard loaders
   *
   *  @author Ilya Lebedev <ilya@lebedev.net>
   *  @param $event object target event
   *  @param $param mixed event parameters passed from register_hook
   */
  function _inject_loader (&$event, $param) {
      global $INFO;
      global $ACT;

      // inject loader and styles
      $js_edit  = ($ACT=='edit' || $ACT=='preview' || $ACT=='recover' || $ACT=='wordblock' ) ? 1 : 0;
      $js_write = ($INFO['writable']) ? 1 : 0;

      if ($js_edit && $js_write){
          $this->injectKeyboard = true;
          $event->data['script'][] = array( 'type'=>'text/javascript', 'charset'=>'utf-8', 'src' => DOKU_BASE.'lib/plugins/virtualkeyboard/vk/vk_loader.js'
                                           ,'_data'=>'');
          $event->data['link'][] = array( 'rel'=>'stylesheet', 'type'=>'text/css', 'title'=>'VirtualKeyboard'
                                         ,'href'=>DOKU_BASE.'lib/plugins/virtualkeyboard/vk/keyboard/keyboard.css'
                                         ,'_data'=>'');
      }
  }

  /**
   *  Inject the virtual keyboard itself
   *
   *  @author Ilya Lebedev <ilya@lebedev.net>
   *  @param $event object target event
   *  @param $param mixed event parameters passed from register_hook
   */
  function _inject_keyboard (&$event, $param) {
    global $INFO;
 
    if (!$event->data['writable'] || !$this->injectKeyboard) return;

//            <div style="width: 100%; border: 1px solid green;">
//              <fieldset class="virtualKeyboard">
//                  <legend>VirtualKeyboard</legend>
//              </fieldset>
//            </div> 
    echo <<< EOQ
                <div style="width: 100%;">
                  VirtualKeyboard: <select accesskey="v" id="showVKeyboard" onChange="this.value=='0'?VirtualKeyboard.close():(VirtualKeyboard.show(this.form.elements['wikitext'],'virtualKeyboardHolder'),VirtualKeyboard.switchLayout.apply(this,this.value.split('\u00a0-\u00a0')));" ><option value="0">Closed</option></select>
                  <script type="text/javascript"><!--//--><![CDATA[//><!--
                      if (window.addEventListener) window.addEventListener ('load', function() {(new Selectbox('showVKeyboard')).addOptionsList(VirtualKeyboard.getLayouts())}, false);
                      else if (window.attachEvent) window.attachEvent ('onload', function() {(new Selectbox('showVKeyboard')).addOptionsList(VirtualKeyboard.getLayouts())});
                  //--><!]]></script>
                  <div id="virtualKeyboardHolder" style="width: 100%"></div>
                </div>
EOQ;
  }
}
