Skip to content

Commit e7f1050

Browse files
committed
Add Html5 Drad and drop
1 parent 238ca71 commit e7f1050

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed

Ajax/common/html/BaseHtml.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Ajax\JsUtils;
88
use Ajax\common\html\traits\BaseHtmlEventsTrait;
99
use Ajax\common\html\traits\BaseHtmlPropertiesTrait;
10+
use Ajax\service\Javascript;
1011

1112
/**
1213
* BaseHtml for HTML components
@@ -234,6 +235,39 @@ public function compile(JsUtils $js=NULL, &$view=NULL) {
234235
}
235236
return $result;
236237
}
238+
239+
/**
240+
* Sets the element draggable, and eventualy defines the dropzone (HTML5 drag and drop)
241+
* @param string $attr default: "id"
242+
* @param BaseHtml $dropZone the dropzone element
243+
* @param array $parameters default: ["jsCallback"=>"","jqueryDone"=>"append"]
244+
* @return \Ajax\common\html\BaseHtml
245+
*/
246+
public function setDraggable($attr="id",$dropZone=null,$parameters=[]){
247+
$this->setProperty("draggable", "true");
248+
$this->addEvent("dragstart",Javascript::draggable($attr));
249+
if(isset($dropZone)&& $dropZone instanceof BaseHtml){
250+
$jqueryDone="append";$jsCallback="";
251+
extract($parameters);
252+
$dropZone->asDropZone($jsCallback,$jqueryDone,$parameters);
253+
}
254+
return $this;
255+
}
256+
257+
/**
258+
* Declares the element as a drop zone (HTML5 drag and drop)
259+
* @param string $jsCallback
260+
* @param string $jqueryDone
261+
* @param array $parameters
262+
* @return \Ajax\common\html\BaseHtml
263+
*/
264+
public function asDropZone($jsCallback="",$jqueryDone="append",$parameters=[]){
265+
$stopPropagation=false;
266+
$script=$this->addEvent("dragover", '', $stopPropagation,true);
267+
extract($parameters);
268+
$this->addEvent("drop",Javascript::dropZone($jqueryDone,$jsCallback),$stopPropagation,true);
269+
return $this;
270+
}
237271

238272
public function __toString() {
239273
return $this->compile();

Ajax/common/traits/JsUtilsActionsTrait.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,4 +529,36 @@ public function execOn($event, $element, $js, $parameters=array()) {
529529
$script=$this->_add_event($element, $this->exec($js), $event, $preventDefault, $stopPropagation,$immediatly);
530530
return $script;
531531
}
532+
533+
/**
534+
* Sets an element draggable (HTML5 drag and drop)
535+
* @param string $element The element selector
536+
* @param array $parameters default : array("attr"=>"id","preventDefault"=>false,"stopPropagation"=>false,"immediatly"=>true)
537+
*/
538+
public function setDraggable($element,$parameters=[]){
539+
$stopPropagation=false;
540+
$preventDefault=false;
541+
$immediatly=true;
542+
$attr="id";
543+
extract($parameters);
544+
$script=$this->_add_event($element, Javascript::draggable($attr), "dragstart",$parameters);
545+
return $script;
546+
}
547+
548+
/**
549+
* Declares an element as a drop zone (HTML5 drag and drop)
550+
* @param string $element The element selector
551+
* @param array $parameters default : array("attr"=>"id","stopPropagation"=>false,"immediatly"=>true,"jqueryDone"=>"append")
552+
* @param string $jsCallback the js script to call when element is dropped
553+
*/
554+
public function asDropZone($element,$jsCallback="",$parameters=[]){
555+
$stopPropagation=false;
556+
$preventDefault=true;
557+
$immediatly=true;
558+
$jqueryDone="append";
559+
$script=$this->_add_event($element, '', "dragover",true,$stopPropagation,$immediatly);
560+
extract($parameters);
561+
$script.=$this->_add_event($element, Javascript::dropZone($jqueryDone,$jsCallback), "drop",true,$stopPropagation,$immediatly);
562+
return $script;
563+
}
532564
}

Ajax/service/Javascript.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ class Javascript {
66
public static $preventDefault="\nif(event && event.preventDefault) event.preventDefault();\n";
77
public static $stopPropagation="\nif(event && event.stopPropagation) event.stopPropagation();\n";
88

9+
public static function draggable($attr="id"){
10+
return 'var dt=event.dataTransfer || event.originalEvent.dataTransfer;dt.setData("Text",$(event.target).attr("'.$attr.'"));';
11+
}
12+
13+
public static function dropZone($jqueryDone,$jsCallback=""){
14+
return 'var dt=event.dataTransfer || event.originalEvent.dataTransfer;var data=dt.getData("Text");$(event.target).'.$jqueryDone.'($("#"+data));'.$jsCallback;
15+
}
16+
917
public static function containsCode($expression){
1018
return strrpos($expression, 'this')!==false||strrpos($expression, 'event')!==false||strrpos($expression, 'self')!==false;
1119
}

0 commit comments

Comments
 (0)