@@ -602,4 +602,58 @@ public function interval($jsCode,$time,$globalName=null,$immediatly=true){
602
602
public function clearInterval ($ globalName ,$ immediatly =true ){
603
603
return $ this ->exec ("if(window. {$ globalName }){clearInterval(window. {$ globalName });} " ,$ immediatly );
604
604
}
605
+
606
+ /**
607
+ * Associates a counter to the element designated by $counterSelector
608
+ * @param string $counterSelector Selector of the existing element wich display the counter
609
+ * @param integer $value The initial value of the counter
610
+ * @param integer $limit The limit of the counter (minimum if countDown is true, maximum if not)
611
+ * @param string $globalName The global name of the counter, to use with the clearInterval method
612
+ * @param boolean $countDown count down if true or elapse if false
613
+ * @param boolean $immediatly delayed if false
614
+ * @return string
615
+ */
616
+ public function counter ($ counterSelector ,$ value =0 ,$ limit =0 ,$ globalName =null ,$ countDown =true ,$ immediatly =true ){
617
+ $ stop ="" ;
618
+ if ($ countDown ){
619
+ $ stop ="if (--timer < " .$ limit .") {clearInterval(interval);display.trigger('counter-end',timer);} " ;
620
+ }else {
621
+ if ($ limit !=0 ){
622
+ $ stop ="if (++timer > " .$ limit .") {clearInterval(interval);display.trigger('counter-end',timer);} " ;
623
+ }
624
+ }
625
+ $ global ="" ;
626
+ if (isset ($ globalName )){
627
+ $ global ="\nwindow. {$ globalName }=interval; " ;
628
+ }
629
+ $ timer ="var startTimer=function(duration, display) {var timer = duration, minutes, seconds;
630
+ display.trigger('counter-start',timer);
631
+ display.show();
632
+ var interval=setInterval(function () {
633
+ minutes = parseInt(timer / 60, 10);seconds = parseInt(timer % 60, 10);
634
+ minutes = minutes < 10 ? '0' + minutes : minutes;
635
+ seconds = seconds < 10 ? '0' + seconds : seconds;
636
+ if(display.is('[value]')){display.val(minutes + ':' + seconds);} else {display.html(minutes + ':' + seconds);};
637
+ " .$ stop ."
638
+ }, 1000);
639
+ " .$ global ."
640
+ } " ;
641
+ $ element ='$(" ' .$ counterSelector .'") ' ;
642
+ return $ this ->exec ($ timer ."\nstartTimer( " .$ value .", " .$ element ."); " ,$ immediatly );
643
+ }
644
+
645
+ /**
646
+ * Associates a counter to the element designated by $counterSelector when $event is triggered on $element
647
+ * @param string $element The triggering element
648
+ * @param string $event The triggering event
649
+ * @param string $counterSelector Selector of the existing element wich display the counter
650
+ * @param integer $value The initial value of the counter
651
+ * @param integer $limit The limit of the counter (minimum if countDown is true, maximum if not)
652
+ * @param string $globalName The global name of the counter, to use with the clearInterval method
653
+ * @param boolean $countDown count down if true or elapse if false
654
+ * @return string
655
+ */
656
+ public function counterOn ($ element ,$ event ,$ counterSelector ,$ value =0 ,$ limit =0 ,$ globalName =null ,$ countDown =true ){
657
+ return $ this ->execOn ($ event , $ element , $ this ->counter ($ counterSelector ,$ value ,$ limit ,$ globalName ,$ countDown ,false ));
658
+ }
605
659
}
0 commit comments