123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- <?php
- /**
- *
- * PHP Pro Bid $Id$ YqSCCXZrduxkVzdajWCxBU1487As/vsV5r+y/0I4Suw=
- *
- * @link http://www.phpprobid.com
- * @copyright Copyright (c) 2014 Online Ventures Software LTD & CodeCube SRL
- * @license http://www.phpprobid.com/license Commercial License
- *
- * @version 7.0
- */
- /**
- * ajax text custom form element
- *
- * creates an element which initially is a simple text, which if clicked will be transformed in an
- * editable text box with attached save/cancel buttons
- */
- namespace Ppb\Form\Element;
- use Cube\Form\Element;
- class AjaxText extends Element
- {
- const ELEMENT_CLASS = 'ajax-text';
- const INPUT_NAME = 'textContent';
- /**
- *
- * type of element - override the variable from the parent class
- *
- * @var string
- */
- protected $_element = 'ajaxText';
- /**
- *
- * base url of the application
- *
- * @var string
- */
- protected $_baseUrl;
- /**
- *
- * ajax post url for the success button
- *
- * @var string
- */
- protected $_postUrl;
- /**
- *
- * class constructor
- *
- * @param string $name
- */
- public function __construct($name)
- {
- parent::__construct($this->_element, $name);
- $this->setBodyCode(
- "<script type=\"text/javascript\">" . "\n"
- . " $(document).ready(function() { " . "\n"
- . " $('." . self::ELEMENT_CLASS . " .ajax-text-span').on('click', function() { " . "\n"
- . " var el = $(this).closest('label'); " . "\n"
- . " var v = el.find('.ajax-text-span').html(); " . "\n"
- . " el.find('[name=\"" . self::INPUT_NAME . "\"]').val(v); " . "\n"
- . " el.find('.ajax-text-span').hide(); " . "\n"
- . " el.find('.input-group').show(); " . "\n"
- . " }); " . "\n"
- . " $('." . self::ELEMENT_CLASS . " .btn-success').on('click', function() {
- var el = $(this).closest('label');
- var v = el.find('[name=\"" . self::INPUT_NAME . "\"]').val();
- var postUrl = el.attr('data-post-url');
- $.post(
- postUrl,
- {
- comments: v
- },
- function (data) {
- el.find('.ajax-text-span').html(v).show();
- el.find('.input-group').hide();
- },
- 'json'
- );
- }); " . "\n"
- . " $('." . self::ELEMENT_CLASS . " .btn-danger').on('click', function() { " . "\n"
- . " var el = $(this).closest('label'); " . "\n"
- . " el.find('.ajax-text-span').show(); " . "\n"
- . " el.find('.input-group').hide(); " . "\n"
- . " }); " . "\n"
- . " }); " . "\n"
- . "</script>");
- $this->setHeaderCode(
- "<style type=\"text/css\">" . "\n"
- . "." . self::ELEMENT_CLASS . " { " . "\n"
- . " display: block; " . "\n"
- . "} " . "\n"
- . "." . self::ELEMENT_CLASS . " .input-group { " . "\n"
- . " display: none; " . "\n"
- . "} " . "\n"
- . "." . self::ELEMENT_CLASS . " span.ajax-text-span { " . "\n"
- . " cursor: text; " . "\n"
- . " padding-bottom: 2px; " . "\n"
- . " border-bottom: 1px dotted #999; " . "\n"
- . "} " . "\n"
- . "</style>");
- }
- /**
- *
- * set ajax post url
- *
- * @param string $postUrl
- * @return $this
- */
- public function setPostUrl($postUrl)
- {
- $this->_postUrl = $postUrl;
- return $this;
- }
- /**
- *
- * get ajax post url
- *
- * @throws \RuntimeException
- * @return string
- */
- public function getPostUrl()
- {
- if (!$this->_postUrl) {
- throw new \RuntimeException("The post url for the AjaxText form element must be set.");
- }
- return $this->_postUrl;
- }
- /**
- *
- * render element
- *
- * @return string
- */
- public function render()
- {
- $translate = $this->getTranslate();
- $value = $this->getValue();
- return '<label class="' . self::ELEMENT_CLASS . '" data-post-url="' . $this->getPostUrl() . '">'
- . '<span class="ajax-text-span" title="' . $translate->_('Edit Text') . '">'
- . $value
- . '</span>'
- . '<div class="input-group">'
- . ' <input type="text" name="' . self::INPUT_NAME . '" '
- . $this->renderAttributes()
- . 'value="' . $value . '" '
- . $this->_endTag . ' '
- . ' <span class="input-group-btn"> '
- . ' <button class="btn btn-success" type="button"><i class="fa fa-check"></i></button> '
- . ' <button class="btn btn-danger" type="button"><i class="fa fa-times"></i></button> '
- . ' </span>'
- . '</div>'
- . '</label>';
- }
- }
|