mirror of
https://github.com/WhatCD/Gazelle.git
synced 2024-12-14 19:36:25 +00:00
199 lines
5.0 KiB
PHP
199 lines
5.0 KiB
PHP
<?php
|
|
/**
|
|
* This super class is used to manage the ammount of textareas there are and to
|
|
* generate the required JavaScript that enables the previews to work.
|
|
*/
|
|
class TEXTAREA_PREVIEW_SUPER
|
|
{
|
|
/**
|
|
* @static
|
|
* @var int $Textareas Total number of textareas created
|
|
*/
|
|
static protected $Textareas = 0;
|
|
|
|
/**
|
|
* @static
|
|
* @var array $_ID Array of textarea IDs
|
|
*/
|
|
static protected $_ID = array();
|
|
|
|
/**
|
|
* @static
|
|
* @var bool For use in JavaScript method
|
|
*/
|
|
static private $Exectuted = false;
|
|
|
|
/**
|
|
* This method should only run once with $all as true and should be placed
|
|
* in the header or footer.
|
|
*
|
|
* If $all is true, it includes TextareaPreview and jQuery with noConflict()
|
|
* for use with Sizzle.
|
|
*
|
|
* jQuery is required for this to work, include it in the headers.
|
|
*
|
|
* @static
|
|
* @param bool $all Output all required scripts, otherwise just do iterator()
|
|
* @example <pre><?php TEXT_PREVIEW::JavaScript(); ?></pre>
|
|
* @return void
|
|
*/
|
|
static public function JavaScript ($all = true)
|
|
{
|
|
if (self::$Textareas === 0) return;
|
|
if (self::$Exectuted === false && $all)
|
|
View::parse('generic/textarea/script.phtml');
|
|
|
|
self::$Exectuted = true;
|
|
self::iterator();
|
|
}
|
|
|
|
/**
|
|
* This iterator generates JavaScript to initialize each JavaScript
|
|
* TextareaPreview object.
|
|
*
|
|
* It will generate a numeric or custom ID related to the textarea.
|
|
* @static
|
|
* @return void
|
|
*/
|
|
static private function iterator ()
|
|
{
|
|
$script = array();
|
|
for($i = 0; $i < self::$Textareas; $i++) {
|
|
if (isset(self::$_ID[$i]) && is_string(self::$_ID[$i])) {
|
|
$a = sprintf('%d, "%s"', $i, self::$_ID[$i]);
|
|
} else {
|
|
$a = $i;
|
|
}
|
|
$script[] = sprintf('[%s]', $a);
|
|
}
|
|
if (!empty($script))
|
|
View::parse('generic/textarea/script_factory.phtml',
|
|
array('script' => join(', ', $script)));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Textarea Preview Class
|
|
*
|
|
* This class generates a textarea that works with the JS preview script.
|
|
*
|
|
* Templates found in design/views/generic/textarea
|
|
*
|
|
* @example <pre><?php
|
|
* // Create a textarea with a name of content.
|
|
* // Buttons and preview divs are generated automatically near the textarea.
|
|
* new TEXTAREA_PREVIEW('content');
|
|
*
|
|
* // Create a textarea with name and id body_text with default text and
|
|
* // no buttons or wrap preview divs.
|
|
* // Buttons and preview divs are generated manually
|
|
* $text = new TEXTAREA_PREVIEW('body_text', 'body_text', 'default text',
|
|
* 50, 20, false, false, array('disabled="disabled"', 'class="text"'));
|
|
*
|
|
* $text->buttons(); // output buttons
|
|
*
|
|
* $text->preview(); // output preview div
|
|
*
|
|
* // Create a textarea with custom preview wrapper around a table
|
|
* // the table will be (in)visible depending on the toggle
|
|
* $text = new TEXTAREA_PREVIEW('body', '', '', 30, 10, false, false);
|
|
* $id = $text->getID();
|
|
*
|
|
* // some template
|
|
* <div id="preview_wrap_<?=$id?>">
|
|
* <table>
|
|
* <tr>
|
|
* <td>
|
|
* <div id="preview_<?=$id?>"></div>
|
|
* </td>
|
|
* </tr>
|
|
* </table>
|
|
* </div>
|
|
* </pre>
|
|
*/
|
|
class TEXTAREA_PREVIEW extends TEXTAREA_PREVIEW_SUPER
|
|
{
|
|
/**
|
|
* @var int Unique ID
|
|
*/
|
|
private $id;
|
|
|
|
/**
|
|
* Flag for preview output
|
|
* @var bool $preview
|
|
*/
|
|
private $preview = false;
|
|
|
|
/**
|
|
* This method creates a textarea
|
|
*
|
|
* @param string $Name name attribute
|
|
* @param string $ID id attribute
|
|
* @param string $Value default text attribute
|
|
* @param string $Cols cols attribute
|
|
* @param string $Rows rows attribute
|
|
* @param bool $Preview add the preview divs near the textarea
|
|
* @param bool $Buttons add the edit/preview buttons near the textarea
|
|
*
|
|
* If false for either, use the appropriate methods to add the those
|
|
* elements elsewhere. Alternatively, use getID to create your own.
|
|
*
|
|
* @param array $ExtraAttributes array of attribute="value"
|
|
*/
|
|
public function __construct ($Name, $ID = '', $Value='', $Cols=50, $Rows=10,
|
|
$Preview = true, $Buttons = true, array $ExtraAttributes = array()
|
|
) {
|
|
$this->id = parent::$Textareas;
|
|
parent::$Textareas += 1;
|
|
array_push(parent::$_ID, $ID);
|
|
|
|
if (empty($ID)) $ID = 'quickpost_' . $this->id;
|
|
|
|
if (!empty($ExtraAttributes))
|
|
$Attributes = ' ' . implode(' ', $ExtraAttributes);
|
|
else
|
|
$Attributes = '';
|
|
|
|
if ($Preview === true) $this->preview();
|
|
|
|
View::parse('generic/textarea/textarea.phtml', array(
|
|
'ID' => $ID,
|
|
'NID' => $this->id,
|
|
'Name' => &$Name,
|
|
'Value' => &$Value,
|
|
'Cols' => &$Cols,
|
|
'Rows' => &$Rows,
|
|
'Attributes' => &$Attributes
|
|
));
|
|
|
|
if ($Buttons === true) $this->buttons();
|
|
}
|
|
|
|
/**
|
|
* Outputs the divs required for previewing the AJAX content
|
|
* Will only output once
|
|
*/
|
|
public function preview ()
|
|
{
|
|
if (!$this->preview)
|
|
View::parse('generic/textarea/preview.phtml', array('ID' => $this->id));
|
|
$this->preview = true;
|
|
}
|
|
|
|
/**
|
|
* Outputs the preview and edit buttons
|
|
* Can be called many times to place buttons in different areas
|
|
*/
|
|
public function buttons ()
|
|
{
|
|
View::parse('generic/textarea/buttons.phtml', array('ID' => $this->id));
|
|
}
|
|
|
|
/**
|
|
* Returns the textarea's numeric ID.
|
|
*/
|
|
public function getID ()
|
|
{
|
|
return $this->id;
|
|
}
|
|
} |