PageRenderTime 27ms CodeModel.GetById 18ms app.highlight 7ms RepoModel.GetById 0ms app.codeStats 0ms

/library/Zend/Dojo/Form/Element/Editor.php

https://bitbucket.org/hamidrezas/melobit
PHP | 599 lines | 294 code | 45 blank | 260 comment | 26 complexity | 72133f4a0ed81aac69083b29e2585347 MD5 | raw file
Possible License(s): AGPL-1.0
  1<?php
  2/**
  3 * Zend Framework
  4 *
  5 * LICENSE
  6 *
  7 * This source file is subject to the new BSD license that is bundled
  8 * with this package in the file LICENSE.txt.
  9 * It is also available through the world-wide-web at this URL:
 10 * http://framework.zend.com/license/new-bsd
 11 * If you did not receive a copy of the license and are unable to
 12 * obtain it through the world-wide-web, please send an email
 13 * to license@zend.com so we can send you a copy immediately.
 14 *
 15 * @category   Zend
 16 * @package    Zend_Dojo
 17 * @subpackage Form_Element
 18 * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 19 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 20 * @version    $Id: Editor.php 24594 2012-01-05 21:27:01Z matthew $
 21 */
 22
 23/** Zend_Dojo_Form_Element_Dijit */
 24require_once 'Zend/Dojo/Form/Element/Dijit.php';
 25
 26/**
 27 * Editor dijit
 28 *
 29 * @uses       Zend_Dojo_Form_Element_Dijit
 30 * @category   Zend
 31 * @package    Zend_Dojo
 32 * @subpackage Form_Element
 33 * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 34 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 35 */
 36class Zend_Dojo_Form_Element_Editor extends Zend_Dojo_Form_Element_Dijit
 37{
 38    /**
 39     * @var string View helper
 40     */
 41    public $helper = 'Editor';
 42
 43    /**
 44     * Add a single event to connect to the editing area
 45     *
 46     * @param  string $event
 47     * @return Zend_Dojo_Form_Element_Editor
 48     */
 49    public function addCaptureEvent($event)
 50    {
 51        $event = (string) $event;
 52        $captureEvents = $this->getCaptureEvents();
 53        if (in_array($event, $captureEvents)) {
 54            return $this;
 55        }
 56
 57        $captureEvents[] = (string) $event;
 58        $this->setDijitParam('captureEvents', $captureEvents);
 59        return $this;
 60    }
 61
 62    /**
 63     * Add multiple capture events
 64     *
 65     * @param  array $events
 66     * @return Zend_Dojo_Form_Element_Editor
 67     */
 68    public function addCaptureEvents(array $events)
 69    {
 70        foreach ($events as $event) {
 71            $this->addCaptureEvent($event);
 72        }
 73        return $this;
 74    }
 75
 76    /**
 77     * Overwrite many capture events at once
 78     *
 79     * @param  array $events
 80     * @return Zend_Dojo_Form_Element_Editor
 81     */
 82    public function setCaptureEvents(array $events)
 83    {
 84        $this->clearCaptureEvents();
 85        $this->addCaptureEvents($events);
 86        return $this;
 87    }
 88
 89    /**
 90     * Get all capture events
 91     *
 92     * @return array
 93     */
 94    public function getCaptureEvents()
 95    {
 96        if (!$this->hasDijitParam('captureEvents')) {
 97            return array();
 98        }
 99        return $this->getDijitParam('captureEvents');
100    }
101
102    /**
103     * Is a given capture event registered?
104     *
105     * @param  string $event
106     * @return bool
107     */
108    public function hasCaptureEvent($event)
109    {
110        $captureEvents = $this->getCaptureEvents();
111        return in_array((string) $event, $captureEvents);
112    }
113
114    /**
115     * Remove a given capture event
116     *
117     * @param  string $event
118     * @return Zend_Dojo_Form_Element_Editor
119     */
120    public function removeCaptureEvent($event)
121    {
122        $event = (string) $event;
123        $captureEvents = $this->getCaptureEvents();
124        if (false === ($index = array_search($event, $captureEvents))) {
125            return $this;
126        }
127        unset($captureEvents[$index]);
128        $this->setDijitParam('captureEvents', $captureEvents);
129        return $this;
130    }
131
132    /**
133     * Clear all capture events
134     *
135     * @return Zend_Dojo_Form_Element_Editor
136     */
137    public function clearCaptureEvents()
138    {
139        return $this->removeDijitParam('captureEvents');
140    }
141
142    /**
143     * Add a single event to the dijit
144     *
145     * @param  string $event
146     * @return Zend_Dojo_Form_Element_Editor
147     */
148    public function addEvent($event)
149    {
150        $event = (string) $event;
151        $events = $this->getEvents();
152        if (in_array($event, $events)) {
153            return $this;
154        }
155
156        $events[] = (string) $event;
157        $this->setDijitParam('events', $events);
158        return $this;
159    }
160
161    /**
162     * Add multiple events
163     *
164     * @param  array $events
165     * @return Zend_Dojo_Form_Element_Editor
166     */
167    public function addEvents(array $events)
168    {
169        foreach ($events as $event) {
170            $this->addEvent($event);
171        }
172        return $this;
173    }
174
175    /**
176     * Overwrite many events at once
177     *
178     * @param  array $events
179     * @return Zend_Dojo_Form_Element_Editor
180     */
181    public function setEvents(array $events)
182    {
183        $this->clearEvents();
184        $this->addEvents($events);
185        return $this;
186    }
187
188    /**
189     * Get all events
190     *
191     * @return array
192     */
193    public function getEvents()
194    {
195        if (!$this->hasDijitParam('events')) {
196            return array();
197        }
198        return $this->getDijitParam('events');
199    }
200
201    /**
202     * Is a given event registered?
203     *
204     * @param  string $event
205     * @return bool
206     */
207    public function hasEvent($event)
208    {
209        $events = $this->getEvents();
210        return in_array((string) $event, $events);
211    }
212
213    /**
214     * Remove a given event
215     *
216     * @param  string $event
217     * @return Zend_Dojo_Form_Element_Editor
218     */
219    public function removeEvent($event)
220    {
221        $events = $this->getEvents();
222        if (false === ($index = array_search($event, $events))) {
223            return $this;
224        }
225        unset($events[$index]);
226        $this->setDijitParam('events', $events);
227        return $this;
228    }
229
230    /**
231     * Clear all events
232     *
233     * @return Zend_Dojo_Form_Element_Editor
234     */
235    public function clearEvents()
236    {
237        return $this->removeDijitParam('events');
238    }
239
240    /**
241     * Add a single editor plugin
242     *
243     * @param  string $plugin
244     * @return Zend_Dojo_Form_Element_Editor
245     */
246    public function addPlugin($plugin)
247    {
248        $plugin = (string) $plugin;
249        $plugins = $this->getPlugins();
250        if (in_array($plugin, $plugins) && $plugin !== '|') {
251            return $this;
252        }
253
254        $plugins[] = (string) $plugin;
255        $this->setDijitParam('plugins', $plugins);
256        return $this;
257    }
258
259    /**
260     * Add multiple plugins
261     *
262     * @param  array $plugins
263     * @return Zend_Dojo_Form_Element_Editor
264     */
265    public function addPlugins(array $plugins)
266    {
267        foreach ($plugins as $plugin) {
268            $this->addPlugin($plugin);
269        }
270        return $this;
271    }
272
273    /**
274     * Overwrite many plugins at once
275     *
276     * @param  array $plugins
277     * @return Zend_Dojo_Form_Element_Editor
278     */
279    public function setPlugins(array $plugins)
280    {
281        $this->clearPlugins();
282        $this->addPlugins($plugins);
283        return $this;
284    }
285
286    /**
287     * Get all plugins
288     *
289     * @return array
290     */
291    public function getPlugins()
292    {
293        if (!$this->hasDijitParam('plugins')) {
294            return array();
295        }
296        return $this->getDijitParam('plugins');
297    }
298
299    /**
300     * Is a given plugin registered?
301     *
302     * @param  string $plugin
303     * @return bool
304     */
305    public function hasPlugin($plugin)
306    {
307        $plugins = $this->getPlugins();
308        return in_array((string) $plugin, $plugins);
309    }
310
311    /**
312     * Remove a given plugin
313     *
314     * @param  string $plugin
315     * @return Zend_Dojo_Form_Element_Editor
316     */
317    public function removePlugin($plugin)
318    {
319        $plugins = $this->getPlugins();
320        if (false === ($index = array_search($plugin, $plugins))) {
321            return $this;
322        }
323        unset($plugins[$index]);
324        $this->setDijitParam('plugins', $plugins);
325        return $this;
326    }
327
328    /**
329     * Clear all plugins
330     *
331     * @return Zend_Dojo_Form_Element_Editor
332     */
333    public function clearPlugins()
334    {
335        return $this->removeDijitParam('plugins');
336    }
337
338    /**
339     * Set edit action interval
340     *
341     * @param  int $interval
342     * @return Zend_Dojo_Form_Element_Editor
343     */
344    public function setEditActionInterval($interval)
345    {
346        return $this->setDijitParam('editActionInterval', (int) $interval);
347    }
348
349    /**
350     * Get edit action interval; defaults to 3
351     *
352     * @return int
353     */
354    public function getEditActionInterval()
355    {
356        if (!$this->hasDijitParam('editActionInterval')) {
357            $this->setEditActionInterval(3);
358        }
359        return $this->getDijitParam('editActionInterval');
360    }
361
362    /**
363     * Set focus on load flag
364     *
365     * @param  bool $flag
366     * @return Zend_Dojo_Form_Element_Editor
367     */
368    public function setFocusOnLoad($flag)
369    {
370        return $this->setDijitParam('focusOnLoad', (bool) $flag);
371    }
372
373    /**
374     * Retrieve focus on load flag
375     *
376     * @return bool
377     */
378    public function getFocusOnLoad()
379    {
380        if (!$this->hasDijitParam('focusOnLoad')) {
381             return false;
382        }
383        return $this->getDijitParam('focusOnLoad');
384    }
385
386    /**
387     * Set editor height
388     *
389     * @param  string|int $height
390     * @return Zend_Dojo_Form_Element_Editor
391     */
392    public function setHeight($height)
393    {
394        if (!preg_match('/^\d+(em|px|%)?$/i', $height)) {
395            require_once 'Zend/Form/Element/Exception.php';
396            throw new Zend_Form_Element_Exception('Invalid height provided; must be integer or CSS measurement');
397        }
398        if (!preg_match('/(em|px|%)$/', $height)) {
399            $height .= 'px';
400        }
401        return $this->setDijitParam('height', $height);
402    }
403
404    /**
405     * Retrieve height
406     *
407     * @return string
408     */
409    public function getHeight()
410    {
411        if (!$this->hasDijitParam('height')) {
412            return '300px';
413        }
414        return $this->getDijitParam('height');
415    }
416
417    /**
418     * Set whether or not to inherit parent's width
419     *
420     * @param  bool $flag
421     * @return Zend_Dojo_Form_Element_Editor
422     */
423    public function setInheritWidth($flag)
424    {
425        return $this->setDijitParam('inheritWidth', (bool) $flag);
426    }
427
428    /**
429     * Whether or not to inherit the parent's width
430     *
431     * @return bool
432     */
433    public function getInheritWidth()
434    {
435        if (!$this->hasDijitParam('inheritWidth')) {
436            return false;
437        }
438        return $this->getDijitParam('inheritWidth');
439    }
440
441    /**
442     * Set minimum height of editor
443     *
444     * @param  string|int $minHeight
445     * @return Zend_Dojo_Form_Element_Editor
446     */
447    public function setMinHeight($minHeight)
448    {
449        if (!preg_match('/^\d+(em|px|%)?$/i', $minHeight)) {
450            require_once 'Zend/Form/Element/Exception.php';
451            throw new Zend_Form_Element_Exception('Invalid minHeight provided; must be integer or CSS measurement');
452        }
453        if (!preg_match('/(em|px|%)$/', $minHeight)) {
454            $minHeight .= 'em';
455        }
456        return $this->setDijitParam('minHeight', $minHeight);
457    }
458
459    /**
460     * Get minimum height of editor
461     *
462     * @return string
463     */
464    public function getMinHeight()
465    {
466        if (!$this->hasDijitParam('minHeight')) {
467            return '1em';
468        }
469        return $this->getDijitParam('minHeight');
470    }
471
472    /**
473     * Add a custom stylesheet
474     *
475     * @param  string $styleSheet
476     * @return Zend_Dojo_Form_Element_Editor
477     */
478    public function addStyleSheet($styleSheet)
479    {
480        $stylesheets = $this->getStyleSheets();
481        if (strstr($stylesheets, ';')) {
482            $stylesheets = explode(';', $stylesheets);
483        } elseif (!empty($stylesheets)) {
484            $stylesheets = (array) $stylesheets;
485        } else {
486            $stylesheets = array();
487        }
488        if (!in_array($styleSheet, $stylesheets)) {
489            $stylesheets[] = (string) $styleSheet;
490        }
491        return $this->setDijitParam('styleSheets', implode(';', $stylesheets));
492    }
493
494    /**
495     * Add multiple custom stylesheets
496     *
497     * @param  array $styleSheets
498     * @return Zend_Dojo_Form_Element_Editor
499     */
500    public function addStyleSheets(array $styleSheets)
501    {
502        foreach ($styleSheets as $styleSheet) {
503            $this->addStyleSheet($styleSheet);
504        }
505        return $this;
506    }
507
508    /**
509     * Overwrite all stylesheets
510     *
511     * @param  array $styleSheets
512     * @return Zend_Dojo_Form_Element_Editor
513     */
514    public function setStyleSheets(array $styleSheets)
515    {
516        $this->clearStyleSheets();
517        return $this->addStyleSheets($styleSheets);
518    }
519
520    /**
521     * Get all stylesheets
522     *
523     * @return string
524     */
525    public function getStyleSheets()
526    {
527        if (!$this->hasDijitParam('styleSheets')) {
528            return '';
529        }
530        return $this->getDijitParam('styleSheets');
531    }
532
533    /**
534     * Is a given stylesheet registered?
535     *
536     * @param  string $styleSheet
537     * @return bool
538     */
539    public function hasStyleSheet($styleSheet)
540    {
541        $styleSheets = $this->getStyleSheets();
542        $styleSheets = explode(';', $styleSheets);
543        return in_array($styleSheet, $styleSheets);
544    }
545
546    /**
547     * Remove a single stylesheet
548     *
549     * @param  string $styleSheet
550     * @return Zend_Dojo_Form_Element_Editor
551     */
552    public function removeStyleSheet($styleSheet)
553    {
554        $styleSheets = $this->getStyleSheets();
555        $styleSheets = explode(';', $styleSheets);
556        if (false !== ($index = array_search($styleSheet, $styleSheets))) {
557            unset($styleSheets[$index]);
558            $this->setDijitParam('styleSheets', implode(';', $styleSheets));
559        }
560        return $this;
561    }
562
563    /**
564     * Clear all stylesheets
565     *
566     * @return Zend_Dojo_Form_Element_Editor
567     */
568    public function clearStyleSheets()
569    {
570        if ($this->hasDijitParam('styleSheets')) {
571            $this->removeDijitParam('styleSheets');
572        }
573        return $this;
574    }
575
576    /**
577     * Set update interval
578     *
579     * @param  int $interval
580     * @return Zend_Dojo_Form_Element_Editor
581     */
582    public function setUpdateInterval($interval)
583    {
584        return $this->setDijitParam('updateInterval', (int) $interval);
585    }
586
587    /**
588     * Get update interval
589     *
590     * @return int
591     */
592    public function getUpdateInterval()
593    {
594        if (!$this->hasDijitParam('updateInterval')) {
595             return 200;
596        }
597        return $this->getDijitParam('updateInterval');
598    }
599}