phpMv  -UI toolkit 2.4.12
jQuery, jQuery UI, Twitter Bootstrap and Semantic-UI library for php & php MVC Frameworks
HtmlDoubleElement.php
Go to the documentation of this file.
1 <?php
2 namespace Ajax\common\html;
3 
4 use Ajax\JsUtils;
7 
9 
14  protected $content;
15 
16  protected $wrapContentBefore = "";
17 
18  protected $wrapContentAfter = "";
19 
20  protected $_editableContent;
21 
22  public function __construct($identifier, $tagName = "p") {
23  parent::__construct($identifier, $tagName);
24  $this->_template = '<%tagName% id="%identifier%" %properties%>%wrapContentBefore%%content%%wrapContentAfter%</%tagName%>';
25  }
26 
27  public function setContent($content) {
28  $this->content = $content;
29  return $this;
30  }
31 
32  public function getContent() {
33  return $this->content;
34  }
35 
36  public function addContent($content, $before = false) {
37  if (! \is_array($this->content)) {
38  if (isset($this->content))
39  $this->content = array(
40  $this->content
41  );
42  else
43  $this->content = array();
44  }
45  if ($before)
46  \array_unshift($this->content, $content);
47  else
48  $this->content[] = $content;
49  return $this;
50  }
51 
52  /*
53  * (non-PHPdoc)
54  * @see \Ajax\bootstrap\html\HtmlSingleElement::run()
55  */
56  public function run(JsUtils $js) {
57  parent::run($js);
58  if ($this->content instanceof HtmlDoubleElement) {
59  $this->content->run($js);
60  } else if (\is_array($this->content)) {
61  foreach ($this->content as $itemContent) {
62  if ($itemContent instanceof HtmlDoubleElement) {
63  $itemContent->run($js);
64  }
65  }
66  }
67  }
68 
69  public function setValue($value) {}
70 
71  public function wrapContent($before, $after = "") {
72  $this->wrapContentBefore .= $before;
73  $this->wrapContentAfter = $after . $this->wrapContentAfter;
74  return $this;
75  }
76 
83  public function wrapWith(HtmlDoubleElement $container) {
84  return $container->setContent($this);
85  }
86 
87  public function getContentInstances($class) {
88  return $this->_getContentInstances($class, $this->content);
89  }
90 
91  protected function _getContentInstances($class, $content) {
92  $instances = [];
93  if ($content instanceof $class) {
94  $instances[] = $content;
95  } elseif ($content instanceof HtmlDoubleElement) {
96  $instances = \array_merge($instances, $content->getContentInstances($class));
97  } elseif (\is_array($content)) {
98  foreach ($content as $element) {
99  $instances = \array_merge($instances, $this->_getContentInstances($class, $element));
100  }
101  }
102  return $instances;
103  }
104 
110  public function asLink($href = NULL, $target = NULL) {
111  if (isset($href))
112  $this->setProperty("href", $href);
113  if (isset($target))
114  $this->setProperty("target", $target);
115  return $this->setTagName("a");
116  }
117 
118  public function getTextContent() {
119  if (\is_array($this->content)) {
120  return \strip_tags(implode("", $this->content));
121  }
122  return \strip_tags($this->content);
123  }
124 
125  public function asEditable(HtmlFormField $field, $asForm = false, $setValueProperty = "val()") {
126  $idF = $field->getIdentifier();
127  $idE = $idF;
128  if ($asForm) {
129  $frm = new HtmlForm("frm-" . $field->getIdentifier());
130  $frm->setProperty("onsubmit", "return false;");
131  $fields = $frm->addFields();
132  $idE = $frm->getIdentifier();
133  $fields->addItem($field);
134  $fields->addButtonIcon("bt-okay", "check", "green mini", "\$('#" . $idE . "').trigger('validate',{value: $('#'+idF+' input').val()});");
135  $fields->addButtonIcon("bt-cancel", "close", "mini", "\$('#" . $idE . "').trigger('endEdit');");
136  $this->_editableContent = $frm;
137  $keypress = "";
138  $focusOut = "";
139  } else {
140  $focusOut = "if(e.relatedTarget==null)elm.trigger('endEdit');";
141  $this->_editableContent = $field;
142  $keypress = "$('#" . $idF . "').keyup(function(e){if(e.which == 13) {\$('#" . $idE . "').trigger('validate',{value: $('#'+idF+' input').val()});}if(e.keyCode===27) {\$('#" . $idE . "').trigger('endEdit');}});";
143  }
144  $this->_editableContent->setProperty("style", "display:none;");
145  $this->onCreate("let idF='" . $idF . "';let idE='" . $idE . "';let elm=$('#'+idE);let self=$('#" . $this->getIdentifier() . "');" . $keypress . "elm.on('validate',function(){self.html($('#'+idE+' input')." . $setValueProperty . ");elm.trigger('endEdit');});elm.on('endEdit',function(){self.show();$(this).hide();});elm.focusout(function(e){" . $focusOut . "});");
146  $this->onClick("let self=$(this);self.hide();" . $field->setJsContent("self.html()") . ";$('#" . $idF . " input').trigger('change');elm.show();$('#'+idE+' input').focus();");
147  }
148 
154  protected function compile_once(\Ajax\JsUtils $js = NULL, &$view = NULL) {
155  if (! $this->_compiled && isset($this->_editableContent)) {
156  $this->wrap("", $this->_editableContent);
157  }
158  parent::compile_once($js, $view);
159  }
160 }
asLink($href=NULL, $target=NULL)
Transforms the element into a link.
compile_once(\Ajax\JsUtils $js=NULL, &$view=NULL)
{}
addContent($content, $before=false)
asEditable(HtmlFormField $field, $asForm=false, $setValueProperty="val()")
wrap($before, $after="")
Definition: BaseHtml.php:171
onClick($jsCode, $stopPropagation=false, $preventDefault=true)
__construct($identifier, $tagName="p")
wrapWith(HtmlDoubleElement $container)
Wraps the element with a container.
JQuery PHP library.
Definition: JsUtils.php:23
addFields($fields=NULL, $label=NULL)
Adds a group of fields.
Definition: HtmlForm.php:81