Countdown, Coming Soon – Countdown & Clock - Version 1.4.7

Version Description

  • New timer feature for the Clock1, Clock2, Clock3, Clock4, Clock5, Clock6, Clock7
  • Bug fixed
Download this release

Release Info

Developer adamskaat
Plugin Icon 128x128 Countdown, Coming Soon – Countdown & Clock
Version 1.4.7
Comparing to
See all releases

Code changes from version 1.4.6 to 1.4.7

assets/js/Admin.js CHANGED
@@ -23,12 +23,37 @@ YcdAdmin.prototype.init = function() {
23
  /*clock*/
24
  this.clockLivePreview();
25
  this.proOptions();
 
26
 
27
  if(ycd_admin_localized.pkgVersion == 1) {
28
  this.redirectToSupportPage();
29
  }
30
  };
31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  YcdAdmin.prototype.animateCountdown = function () {
33
  var circleWrapper = jQuery('.time_circles');
34
 
23
  /*clock*/
24
  this.clockLivePreview();
25
  this.proOptions();
26
+ this.changeTimer();
27
 
28
  if(ycd_admin_localized.pkgVersion == 1) {
29
  this.redirectToSupportPage();
30
  }
31
  };
32
 
33
+ YcdAdmin.prototype.changeTimer = function () {
34
+ var timers = jQuery('.ycd-timer-time-settings');
35
+
36
+ if (!timers.length) {
37
+ return false;
38
+ }
39
+ var modeChecker = jQuery('.ycd-countdown-hide-behavior');
40
+
41
+ modeChecker.bind('change', function () {
42
+ var args = {};
43
+ args.modeValue = jQuery(this).val();
44
+ args.allSeconds = parseInt(jQuery('#ycdTimeHours').val())*3600 + parseInt(jQuery('#ycdTimeMinutes').val())*60 + parseInt(jQuery('#ycdTimeSeconds').val());
45
+ jQuery(window).trigger('YcdClockChangeMode', args);
46
+ });
47
+
48
+ timers.bind('change', function () {
49
+ if(!jQuery('#ycdTimeHours').length) {
50
+ return false;
51
+ }
52
+ var allSeconds = parseInt(jQuery('#ycdTimeHours').val())*3600 + parseInt(jQuery('#ycdTimeMinutes').val())*60 + parseInt(jQuery('#ycdTimeSeconds').val());
53
+ jQuery(window).trigger('YcdClockTimerChange', allSeconds);
54
+ });
55
+ };
56
+
57
  YcdAdmin.prototype.animateCountdown = function () {
58
  var circleWrapper = jQuery('.time_circles');
59
 
assets/js/Js.php CHANGED
@@ -71,7 +71,7 @@ class Js {
71
  'ycdcountdown_page_ycdcountdown'
72
  );
73
 
74
- if(in_array($hook, $allowedPages) || get_post_type(@$_GET['post']) == YCD_COUNTDOWN_POST_TYPE || $_GET['post_type'] == YCD_COUNTDOWN_POST_TYPE) {
75
  wp_enqueue_script('jquery-ui-core');
76
  if(function_exists('wp_enqueue_code_editor')) {
77
  wp_enqueue_code_editor(array( 'type' => 'text/html'));
71
  'ycdcountdown_page_ycdcountdown'
72
  );
73
 
74
+ if(in_array($hook, $allowedPages) || get_post_type(@$_GET['post']) == YCD_COUNTDOWN_POST_TYPE || @$_GET['post_type'] == YCD_COUNTDOWN_POST_TYPE) {
75
  wp_enqueue_script('jquery-ui-core');
76
  if(function_exists('wp_enqueue_code_editor')) {
77
  wp_enqueue_code_editor(array( 'type' => 'text/html'));
assets/js/clock/Clock.js CHANGED
@@ -2,6 +2,30 @@ function YcdClock() {
2
 
3
  }
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  YcdClock.prototype.init = function() {
6
  this.clock1();
7
  this.clock2();
@@ -42,6 +66,9 @@ YcdClock.prototype.renderClock = function() {
42
  var settings = {};
43
 
44
  settings.timeZone = options['timeZone'];
 
 
 
45
  var clock = eval(that.callback);
46
  clock(width, context, args, settings);
47
  });
@@ -50,4 +77,5 @@ YcdClock.prototype.renderClock = function() {
50
  jQuery(document).ready(function() {
51
  var obj = new YcdClock();
52
  obj.init();
 
53
  });
2
 
3
  }
4
 
5
+ YcdClock.prototype.listeners = function() {
6
+ var that = this;
7
+ jQuery(window).bind('YcdClockTimerChange', function (e, allSeconds) {
8
+ var clock = jQuery("[class^='ycdClock']");
9
+ var options = clock.data('options');
10
+ options['allSeconds'] = allSeconds;
11
+
12
+ clock.data('options', options);
13
+ clearTimeout(window.YcdClockTimout);
14
+ that.init();
15
+ });
16
+
17
+ jQuery(window).bind('YcdClockChangeMode', function(e, args) {
18
+ var clock = jQuery("[class^='ycdClock']");
19
+ var options = clock.data('options');
20
+ options['mode'] = args.modeValue;
21
+ options['allSeconds'] = args.allSeconds;
22
+
23
+ clock.data('options', options);
24
+ clearTimeout(window.YcdClockTimout);
25
+ that.init();
26
+ })
27
+ };
28
+
29
  YcdClock.prototype.init = function() {
30
  this.clock1();
31
  this.clock2();
66
  var settings = {};
67
 
68
  settings.timeZone = options['timeZone'];
69
+ settings.mode = options['mode'];
70
+ settings.allSeconds = options['allSeconds'];
71
+
72
  var clock = eval(that.callback);
73
  clock(width, context, args, settings);
74
  });
77
  jQuery(document).ready(function() {
78
  var obj = new YcdClock();
79
  obj.init();
80
+ obj.listeners();
81
  });
assets/js/clock/canvas_clock.js CHANGED
@@ -35,9 +35,39 @@
35
  day_arr=["Sunday", "Monday", "Tuesday","Wednesday","Thursday","Friday","Saturday"];
36
  month_arr=["January","February","March","April","May","June","July","August","September","October","November","December"];
37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  function ycdClockConti(size, cns, clockd, extraOptions)
39
  {
40
  cns.clearRect(0,0,size,size);
 
 
 
 
 
41
 
42
  cns.beginPath();
43
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
@@ -69,7 +99,14 @@ function ycdClockConti(size, cns, clockd, extraOptions)
69
  var sec=now.getSeconds();
70
  var min=now.getMinutes();
71
  var hour=now.getHours()%12;
72
-
 
 
 
 
 
 
 
73
  cns.fillStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
74
  cns.strokeStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
75
  cns.lineCap="round";
@@ -120,11 +157,26 @@ function ycdClockConti(size, cns, clockd, extraOptions)
120
  cns.fill();
121
  cns.closePath();
122
 
123
- clockd.timer=setTimeout(function(){ycdClockConti(size, cns, clockd, extraOptions)},50);
 
 
 
 
 
 
 
 
 
124
  }
125
 
126
  function ycdDigitalClock(size, cns, clockd, extraOptions)
127
  {
 
 
 
 
 
 
128
  var now = ycdGetChangedDateFromTimeZone(extraOptions);
129
  var time_off=(clockd.hasOwnProperty("timeoffset"))?clockd["timeoffset"]:0;
130
  now.setTime(now.getTime()+time_off*1000);
@@ -133,6 +185,13 @@ function ycdDigitalClock(size, cns, clockd, extraOptions)
133
  var min=now.getMinutes();
134
  var hour=now.getHours();
135
 
 
 
 
 
 
 
 
136
  cns.clearRect(0,0,size,size);
137
 
138
  cns.beginPath();
@@ -155,8 +214,16 @@ function ycdDigitalClock(size, cns, clockd, extraOptions)
155
  {
156
  ycd_date_add((size/2),size/5*3+size/10,size,cns, clockd, extraOptions);
157
  }
158
-
159
- clockd.timer=setTimeout(function(){ycdDigitalClock(size, cns, clockd, extraOptions)},50);
 
 
 
 
 
 
 
 
160
  }
161
 
162
  function clock_reverse(size, cns, clockd)
@@ -341,6 +408,11 @@ var r4=[4,5,7];
341
  function ycdClockFollow(size, cns, clockd, extraOptions)
342
  {
343
  cns.clearRect(0,0,size,size);
 
 
 
 
 
344
 
345
  cns.beginPath();
346
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
@@ -362,6 +434,13 @@ function ycdClockFollow(size, cns, clockd, extraOptions)
362
  var min=now.getMinutes();
363
  var hour=now.getHours()%12;
364
 
 
 
 
 
 
 
 
365
  cns.fillStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
366
  cns.strokeStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
367
  cns.lineCap="round";
@@ -414,12 +493,25 @@ function ycdClockFollow(size, cns, clockd, extraOptions)
414
  ycd_date_add((size/2),size/5*3+size/15, size, cns, clockd, extraOptions);
415
  }
416
 
417
- clockd.timer=setTimeout(function(){ycdClockFollow(size, cns, clockd, extraOptions)},50);
 
 
 
 
 
 
 
 
 
418
  }
419
 
420
  function ycdClockCircles(size, cns, clockd, extraOptions)
421
  {
422
  cns.clearRect(0,0,size,size);
 
 
 
 
423
 
424
  cns.beginPath();
425
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
@@ -441,6 +533,13 @@ function ycdClockCircles(size, cns, clockd, extraOptions)
441
  var min=now.getMinutes();
442
  var hour=now.getHours()%12;
443
 
 
 
 
 
 
 
 
444
  cns.fillStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
445
  cns.strokeStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
446
  cns.lineCap="round";
@@ -481,7 +580,17 @@ function ycdClockCircles(size, cns, clockd, extraOptions)
481
  ycd_date_add((size/2),size/6*3+size/10, size, cns, clockd, extraOptions);
482
  }
483
 
484
- clockd.timer=setTimeout(function(){ycdClockCircles(size, cns, clockd, extraOptions)},50);
 
 
 
 
 
 
 
 
 
 
485
  }
486
 
487
  function clock_grow(size, cns, clockd)
@@ -558,6 +667,11 @@ function clock_grow(size, cns, clockd)
558
  function ycdClockDots(size, cns, clockd,extraOptions)
559
  {
560
  cns.clearRect(0,0,size,size);
 
 
 
 
 
561
 
562
  cns.beginPath();
563
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
@@ -588,6 +702,13 @@ function ycdClockDots(size, cns, clockd,extraOptions)
588
  var sec=now.getSeconds();
589
  var min=now.getMinutes();
590
  var hour=now.getHours()%12;
 
 
 
 
 
 
 
591
 
592
  cns.fillStyle=(clockd.hasOwnProperty("dial3_color"))?clockd["dial3_color"]:"#333333";
593
  cns.strokeStyle=(clockd.hasOwnProperty("dial3_color"))?clockd["dial3_color"]:"#333333";
@@ -636,7 +757,16 @@ function ycdClockDots(size, cns, clockd,extraOptions)
636
  cns.closePath();
637
  }
638
 
639
- clockd.timer=setTimeout(function(){ycdClockDots(size, cns, clockd, extraOptions)},50);
 
 
 
 
 
 
 
 
 
640
  }
641
 
642
  function clock_num(size, cns, clockd)
@@ -836,6 +966,10 @@ function clock_digitalran(size, cns, clockd)
836
  function ycdClockBars(size, cns, clockd, extraOptions)
837
  {
838
  cns.clearRect(0,0,size,size);
 
 
 
 
839
 
840
  cns.beginPath();
841
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
@@ -852,6 +986,13 @@ function ycdClockBars(size, cns, clockd, extraOptions)
852
  var sec=now.getSeconds();
853
  var min=now.getMinutes();
854
  var hour=now.getHours()%12;
 
 
 
 
 
 
 
855
 
856
  if((clockd.hasOwnProperty("indicate") && clockd.indicate==true) || !clockd.hasOwnProperty("indicate"))
857
  {
@@ -925,12 +1066,26 @@ function ycdClockBars(size, cns, clockd, extraOptions)
925
  cns.fill();
926
  cns.closePath();
927
 
928
- clockd.timer=setTimeout(function(){ycdClockBars(size, cns, clockd, extraOptions)},50);
 
 
 
 
 
 
 
 
 
 
929
  }
930
 
931
  function ycdClockPlanets(size, cns, clockd, extraOptions)
932
  {
933
  cns.clearRect(0,0,size,size);
 
 
 
 
934
 
935
  cns.beginPath();
936
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
@@ -962,6 +1117,13 @@ function ycdClockPlanets(size, cns, clockd, extraOptions)
962
  var min=now.getMinutes();
963
  var hour=now.getHours()%12;
964
 
 
 
 
 
 
 
 
965
  if(clockd.hasOwnProperty("track")){cns.fillStyle=clockd["track"];}else{cns.fillStyle="#DAA520";}
966
  cns.beginPath();
967
  cns.lineWidth=3;
@@ -1036,7 +1198,16 @@ function ycdClockPlanets(size, cns, clockd, extraOptions)
1036
  cns.fill();
1037
  cns.closePath();
1038
 
1039
- clockd.timer=setTimeout(function(){ycdClockPlanets(size, cns, clockd, extraOptions)},50);
 
 
 
 
 
 
 
 
 
1040
  }
1041
 
1042
  function clock_roulette(size, cns, clockd)
@@ -1146,7 +1317,7 @@ function clock_roulette(size, cns, clockd)
1146
  cns.closePath();
1147
  }
1148
 
1149
- clockd.timer=setTimeout(function(){clock_roulette(size, cns, clockd)},50);
1150
  }
1151
 
1152
  function clock_binary(size, cns, clockd)
@@ -1255,7 +1426,11 @@ function ycd_time_add(x, y, size, cns, clockd, extraOptions)
1255
  {
1256
  return;
1257
  }
1258
-
 
 
 
 
1259
  var now = ycdGetChangedDateFromTimeZone(extraOptions);
1260
 
1261
  now = new Date(now);
@@ -1265,7 +1440,18 @@ function ycd_time_add(x, y, size, cns, clockd, extraOptions)
1265
  var min=now.getMinutes();
1266
  var hour=(clockd.hasOwnProperty("time_24h") && clockd["time_24h"])?now.getHours():now.getHours()%12;
1267
 
1268
- if(hour==0){hour=12;}
 
 
 
 
 
 
 
 
 
 
 
1269
  if(hour<10){hour="0"+hour;}
1270
  if(min<10){min="0"+min;}
1271
  if(sec<10){sec="0"+sec;}
35
  day_arr=["Sunday", "Monday", "Tuesday","Wednesday","Thursday","Friday","Saturday"];
36
  month_arr=["January","February","March","April","May","June","July","August","September","October","November","December"];
37
 
38
+ function YcdParseAllSeconds(allSeconds) {
39
+ var hours = 0;
40
+ var minutes = 0;
41
+ var seconds = 0;
42
+ if (allSeconds > 3600) {
43
+ var remain = parseInt(allSeconds%3600);
44
+ hours = (allSeconds-remain)/3600;
45
+ allSeconds -= hours*3600;
46
+ }
47
+ if (allSeconds > 60) {
48
+ seconds = parseInt(allSeconds%60);
49
+ minutes = (allSeconds-seconds)/60
50
+ }
51
+ else {
52
+ seconds = allSeconds;
53
+ }
54
+ var obj = {
55
+ hours: hours,
56
+ minutes: minutes,
57
+ seconds: seconds
58
+ };
59
+
60
+ return obj;
61
+ };
62
+
63
  function ycdClockConti(size, cns, clockd, extraOptions)
64
  {
65
  cns.clearRect(0,0,size,size);
66
+ var isClock = true;
67
+
68
+ if(extraOptions.mode == 'timer') {
69
+ isClock = false;
70
+ }
71
 
72
  cns.beginPath();
73
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
99
  var sec=now.getSeconds();
100
  var min=now.getMinutes();
101
  var hour=now.getHours()%12;
102
+
103
+ if(!isClock) {
104
+ var parseObj = YcdParseAllSeconds(extraOptions.allSeconds);
105
+ var sec=parseObj.seconds;
106
+ var min=parseObj.minutes;
107
+ var hour=parseObj.hours;
108
+ }
109
+
110
  cns.fillStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
111
  cns.strokeStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
112
  cns.lineCap="round";
157
  cns.fill();
158
  cns.closePath();
159
 
160
+ var intervalSec = 50;
161
+ if(!isClock) {
162
+ extraOptions.allSeconds -= 1;
163
+ intervalSec = 1000;
164
+ }
165
+ if(!isClock && extraOptions.allSeconds == -1) {
166
+ return false;
167
+ }
168
+
169
+ window.YcdClockTimout = clockd.timer=setTimeout(function(){ycdClockConti(size, cns, clockd, extraOptions)}, intervalSec);
170
  }
171
 
172
  function ycdDigitalClock(size, cns, clockd, extraOptions)
173
  {
174
+ var isClock = true;
175
+
176
+ if(extraOptions.mode == 'timer') {
177
+ isClock = false;
178
+ }
179
+
180
  var now = ycdGetChangedDateFromTimeZone(extraOptions);
181
  var time_off=(clockd.hasOwnProperty("timeoffset"))?clockd["timeoffset"]:0;
182
  now.setTime(now.getTime()+time_off*1000);
185
  var min=now.getMinutes();
186
  var hour=now.getHours();
187
 
188
+ if(!isClock) {
189
+ var parseObj = YcdParseAllSeconds(extraOptions.allSeconds);
190
+ var sec=parseObj.seconds;
191
+ var min=parseObj.minutes;
192
+ var hour=parseObj.hours;
193
+ }
194
+
195
  cns.clearRect(0,0,size,size);
196
 
197
  cns.beginPath();
214
  {
215
  ycd_date_add((size/2),size/5*3+size/10,size,cns, clockd, extraOptions);
216
  }
217
+ var intervalSec = 50;
218
+ if(!isClock) {
219
+ extraOptions.allSeconds -= 1;
220
+ intervalSec = 1000;
221
+ }
222
+ if(!isClock && extraOptions.allSeconds == -1) {
223
+ return false;
224
+ }
225
+
226
+ window.YcdClockTimout = clockd.timer=setTimeout(function(){ycdDigitalClock(size, cns, clockd, extraOptions)},intervalSec);
227
  }
228
 
229
  function clock_reverse(size, cns, clockd)
408
  function ycdClockFollow(size, cns, clockd, extraOptions)
409
  {
410
  cns.clearRect(0,0,size,size);
411
+ var isClock = true;
412
+
413
+ if(extraOptions.mode == 'timer') {
414
+ isClock = false;
415
+ }
416
 
417
  cns.beginPath();
418
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
434
  var min=now.getMinutes();
435
  var hour=now.getHours()%12;
436
 
437
+ if(!isClock) {
438
+ var parseObj = YcdParseAllSeconds(extraOptions.allSeconds);
439
+ var sec=parseObj.seconds;
440
+ var min=parseObj.minutes;
441
+ var hour=parseObj.hours;
442
+ }
443
+
444
  cns.fillStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
445
  cns.strokeStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
446
  cns.lineCap="round";
493
  ycd_date_add((size/2),size/5*3+size/15, size, cns, clockd, extraOptions);
494
  }
495
 
496
+ var intervalSec = 50;
497
+ if(!isClock) {
498
+ extraOptions.allSeconds -= 1;
499
+ intervalSec = 1000;
500
+ }
501
+ if(!isClock && extraOptions.allSeconds == -1) {
502
+ return false;
503
+ }
504
+
505
+ window.YcdClockTimout = clockd.timer=setTimeout(function(){ycdClockFollow(size, cns, clockd, extraOptions)},intervalSec);
506
  }
507
 
508
  function ycdClockCircles(size, cns, clockd, extraOptions)
509
  {
510
  cns.clearRect(0,0,size,size);
511
+ var isClock = true;
512
+ if(extraOptions.mode == 'timer') {
513
+ isClock = false;
514
+ }
515
 
516
  cns.beginPath();
517
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
533
  var min=now.getMinutes();
534
  var hour=now.getHours()%12;
535
 
536
+ if(!isClock) {
537
+ var parseObj = YcdParseAllSeconds(extraOptions.allSeconds);
538
+ var sec=parseObj.seconds;
539
+ var min=parseObj.minutes;
540
+ var hour=parseObj.hours;
541
+ }
542
+
543
  cns.fillStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
544
  cns.strokeStyle=(clockd.hasOwnProperty("dial1_color"))?clockd["dial1_color"]:"#333333";
545
  cns.lineCap="round";
580
  ycd_date_add((size/2),size/6*3+size/10, size, cns, clockd, extraOptions);
581
  }
582
 
583
+ var intervalSec = 50;
584
+
585
+ if(!isClock) {
586
+ extraOptions.allSeconds -= 1;
587
+ intervalSec = 1000;
588
+ }
589
+ if(!isClock && extraOptions.allSeconds == -1) {
590
+ return false;
591
+ }
592
+
593
+ window.YcdClockTimout = clockd.timer=setTimeout(function(){ycdClockCircles(size, cns, clockd, extraOptions)},intervalSec);
594
  }
595
 
596
  function clock_grow(size, cns, clockd)
667
  function ycdClockDots(size, cns, clockd,extraOptions)
668
  {
669
  cns.clearRect(0,0,size,size);
670
+ var isClock = true;
671
+
672
+ if(extraOptions.mode == 'timer') {
673
+ isClock = false;
674
+ }
675
 
676
  cns.beginPath();
677
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
702
  var sec=now.getSeconds();
703
  var min=now.getMinutes();
704
  var hour=now.getHours()%12;
705
+
706
+ if(!isClock) {
707
+ var parseObj = YcdParseAllSeconds(extraOptions.allSeconds);
708
+ var sec=parseObj.seconds;
709
+ var min=parseObj.minutes;
710
+ var hour=parseObj.hours;
711
+ }
712
 
713
  cns.fillStyle=(clockd.hasOwnProperty("dial3_color"))?clockd["dial3_color"]:"#333333";
714
  cns.strokeStyle=(clockd.hasOwnProperty("dial3_color"))?clockd["dial3_color"]:"#333333";
757
  cns.closePath();
758
  }
759
 
760
+ var intervalSec = 50;
761
+ if(!isClock) {
762
+ extraOptions.allSeconds -= 1;
763
+ intervalSec = 1000;
764
+ }
765
+ if(!isClock && extraOptions.allSeconds == -1) {
766
+ return false;
767
+ }
768
+
769
+ window.YcdClockTimout = clockd.timer=setTimeout(function(){ycdClockDots(size, cns, clockd, extraOptions)},50);
770
  }
771
 
772
  function clock_num(size, cns, clockd)
966
  function ycdClockBars(size, cns, clockd, extraOptions)
967
  {
968
  cns.clearRect(0,0,size,size);
969
+ var isClock = true;
970
+ if(extraOptions.mode == 'timer') {
971
+ isClock = false;
972
+ }
973
 
974
  cns.beginPath();
975
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
986
  var sec=now.getSeconds();
987
  var min=now.getMinutes();
988
  var hour=now.getHours()%12;
989
+
990
+ if(!isClock) {
991
+ var parseObj = YcdParseAllSeconds(extraOptions.allSeconds);
992
+ var sec=parseObj.seconds;
993
+ var min=parseObj.minutes;
994
+ var hour=parseObj.hours;
995
+ }
996
 
997
  if((clockd.hasOwnProperty("indicate") && clockd.indicate==true) || !clockd.hasOwnProperty("indicate"))
998
  {
1066
  cns.fill();
1067
  cns.closePath();
1068
 
1069
+ var intervalSec = 50;
1070
+
1071
+ if(!isClock) {
1072
+ extraOptions.allSeconds -= 1;
1073
+ intervalSec = 1000;
1074
+ }
1075
+ if(!isClock && extraOptions.allSeconds == -1) {
1076
+ return false;
1077
+ }
1078
+
1079
+ window.YcdClockTimout = clockd.timer=setTimeout(function(){ycdClockBars(size, cns, clockd, extraOptions)},intervalSec);
1080
  }
1081
 
1082
  function ycdClockPlanets(size, cns, clockd, extraOptions)
1083
  {
1084
  cns.clearRect(0,0,size,size);
1085
+ var isClock = true;
1086
+ if(extraOptions.mode == 'timer') {
1087
+ isClock = false;
1088
+ }
1089
 
1090
  cns.beginPath();
1091
  if(clockd.hasOwnProperty("bg_color")){cns.fillStyle=clockd["bg_color"];}else{cns.fillStyle="#ffffff";}
1117
  var min=now.getMinutes();
1118
  var hour=now.getHours()%12;
1119
 
1120
+ if(!isClock) {
1121
+ var parseObj = YcdParseAllSeconds(extraOptions.allSeconds);
1122
+ var sec=parseObj.seconds;
1123
+ var min=parseObj.minutes;
1124
+ var hour=parseObj.hours;
1125
+ }
1126
+
1127
  if(clockd.hasOwnProperty("track")){cns.fillStyle=clockd["track"];}else{cns.fillStyle="#DAA520";}
1128
  cns.beginPath();
1129
  cns.lineWidth=3;
1198
  cns.fill();
1199
  cns.closePath();
1200
 
1201
+ var intervalSec = 50;
1202
+
1203
+ if(!isClock) {
1204
+ extraOptions.allSeconds -= 1;
1205
+ intervalSec = 1000;
1206
+ }
1207
+ if(!isClock && extraOptions.allSeconds == -1) {
1208
+ return false;
1209
+ }
1210
+ window.YcdClockTimout = clockd.timer=setTimeout(function(){ycdClockPlanets(size, cns, clockd, extraOptions)},intervalSec);
1211
  }
1212
 
1213
  function clock_roulette(size, cns, clockd)
1317
  cns.closePath();
1318
  }
1319
 
1320
+ clockd.timer=setTimeout(function(){clock_roulette(size, cns, clockd)},50);
1321
  }
1322
 
1323
  function clock_binary(size, cns, clockd)
1426
  {
1427
  return;
1428
  }
1429
+ var isClock = true;
1430
+ if(extraOptions.mode == 'timer') {
1431
+ isClock = false;
1432
+ }
1433
+
1434
  var now = ycdGetChangedDateFromTimeZone(extraOptions);
1435
 
1436
  now = new Date(now);
1440
  var min=now.getMinutes();
1441
  var hour=(clockd.hasOwnProperty("time_24h") && clockd["time_24h"])?now.getHours():now.getHours()%12;
1442
 
1443
+ if(!isClock) {
1444
+ var parseObj = YcdParseAllSeconds(extraOptions.allSeconds);
1445
+ var sec=parseObj.seconds;
1446
+ var min=parseObj.minutes;
1447
+ var hour=parseObj.hours;
1448
+ }
1449
+
1450
+ if(isClock) {
1451
+ if (hour == 0) {
1452
+ hour = 12;
1453
+ }
1454
+ }
1455
  if(hour<10){hour="0"+hour;}
1456
  if(min<10){min="0"+min;}
1457
  if(sec<10){sec="0"+sec;}
assets/views/main/clock1View.php CHANGED
@@ -10,14 +10,7 @@ if(YCD_PKG_VERSION == YCD_FREE_VERSION) {
10
  }
11
  ?>
12
  <div class="ycd-bootstrap-wrapper">
13
- <div class="row form-group">
14
- <div class="col-md-6">
15
- <label class="ycd-label-of-input"><?php _e('Time zone', YCD_TEXT_DOMAIN); ?></label>
16
- </div>
17
- <div class="col-md-5">
18
- <?php echo AdminHelper::selectBox($defaultData['clock-time-zone'], esc_attr($this->getOptionValue('ycd-clock1-time-zone')), array('name' => 'ycd-clock1-time-zone','data-target-index' => '1','class' => 'js-ycd-select js-circle-time-zone')); ?>
19
- </div>
20
- </div>
21
  <div class="row form-group">
22
  <div class="col-md-6">
23
  <label for="ycd-clock1-width" class="ycd-label-of-input"><?php _e('Dimension', YCD_TEXT_DOMAIN); ?></label>
10
  }
11
  ?>
12
  <div class="ycd-bootstrap-wrapper">
13
+ <?php require_once(dirname(__FILE__).'/clockTimerSettings.php'); ?>
 
 
 
 
 
 
 
14
  <div class="row form-group">
15
  <div class="col-md-6">
16
  <label for="ycd-clock1-width" class="ycd-label-of-input"><?php _e('Dimension', YCD_TEXT_DOMAIN); ?></label>
assets/views/main/clock2View.php CHANGED
@@ -11,14 +11,7 @@ if(YCD_PKG_VERSION == YCD_FREE_VERSION) {
11
  }
12
  ?>
13
  <div class="ycd-bootstrap-wrapper">
14
- <div class="row form-group">
15
- <div class="col-md-6">
16
- <label class="ycd-label-of-input"><?php _e('Time zone', YCD_TEXT_DOMAIN); ?></label>
17
- </div>
18
- <div class="col-md-5">
19
- <?php echo AdminHelper::selectBox($defaultData['clock-time-zone'], esc_attr($this->getOptionValue('ycd-clock2-time-zone')), array('name' => 'ycd-clock2-time-zone','data-target-index' => '2', 'class' => 'js-ycd-select js-circle-time-zone')); ?>
20
- </div>
21
- </div>
22
  <div class="row form-group">
23
  <div class="col-md-6">
24
  <label for="ycd-clock2-width" class="ycd-label-of-input"><?php _e('Dimension', YCD_TEXT_DOMAIN); ?></label>
11
  }
12
  ?>
13
  <div class="ycd-bootstrap-wrapper">
14
+ <?php require_once(dirname(__FILE__).'/clockTimerSettings.php'); ?>
 
 
 
 
 
 
 
15
  <div class="row form-group">
16
  <div class="col-md-6">
17
  <label for="ycd-clock2-width" class="ycd-label-of-input"><?php _e('Dimension', YCD_TEXT_DOMAIN); ?></label>
assets/views/main/clock3View.php CHANGED
@@ -12,14 +12,7 @@ if(YCD_PKG_VERSION == YCD_FREE_VERSION) {
12
 
13
  ?>
14
  <div class="ycd-bootstrap-wrapper">
15
- <div class="row form-group">
16
- <div class="col-md-6">
17
- <label class="ycd-label-of-input"><?php _e('Time zone', YCD_TEXT_DOMAIN); ?></label>
18
- </div>
19
- <div class="col-md-5">
20
- <?php echo AdminHelper::selectBox($defaultData['clock-time-zone'], esc_attr($this->getOptionValue('ycd-clock3-time-zone')), array('name' => 'ycd-clock3-time-zone','data-target-index' => '3', 'class' => 'js-ycd-select js-circle-time-zone')); ?>
21
- </div>
22
- </div>
23
  <div class="row form-group">
24
  <div class="col-md-6">
25
  <label for="ycd-clock3-width" class="ycd-label-of-input"><?php _e('Dimension', YCD_TEXT_DOMAIN); ?></label>
12
 
13
  ?>
14
  <div class="ycd-bootstrap-wrapper">
15
+ <?php require_once(dirname(__FILE__).'/clockTimerSettings.php'); ?>
 
 
 
 
 
 
 
16
  <div class="row form-group">
17
  <div class="col-md-6">
18
  <label for="ycd-clock3-width" class="ycd-label-of-input"><?php _e('Dimension', YCD_TEXT_DOMAIN); ?></label>
assets/views/main/clockTimerSettings.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ use ycd\AdminHelper;
3
+ use ycd\MultipleChoiceButton;
4
+ ?>
5
+ <div class="ycd-multichoice-wrapper">
6
+ <?php
7
+ $multipleChoiceButton = new MultipleChoiceButton($defaultData['clockMode'], esc_attr($this->getOptionValue('ycd-countdown-clock-mode')));
8
+ echo $multipleChoiceButton;
9
+ ?>
10
+ </div>
11
+ <div id="ycd-countdown-clock-mode-clock" class="ycd-countdown-show-text ycd-hide">
12
+ <div class="row form-group">
13
+ <div class="col-md-6">
14
+ <label class="ycd-label-of-input"><?php _e('Time zone', YCD_TEXT_DOMAIN); ?></label>
15
+ </div>
16
+ <div class="col-md-5">
17
+ <?php echo AdminHelper::selectBox($defaultData['clock-time-zone'], esc_attr($this->getOptionValue('ycd-clock-time-zone')), array('name' => 'ycd-clock-time-zone','data-target-index' => '4', 'class' => 'js-ycd-select js-circle-time-zone')); ?>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ <div id="ycd-countdown-clock-mode-countdown" class="ycd-countdown-show-text ycd-hide">
22
+ <div class="row form-group">
23
+ <div class="col-md-6">
24
+ <label class="ycd-label-of-input"><?php _e('Time Settings', YCD_TEXT_DOMAIN); ?></label>
25
+ </div>
26
+ <div class="col-md-2">
27
+ <label for="ycdTimeHours"><?php _e('Hrs', YCD_TEXT_DOMAIN); ?></label>
28
+ <input type="number" name="ycd-clock-timer-hours" id="ycdTimeHours" min="0" max="60" class="form-control ycd-timer-time-settings" data-type="hours" value="<?php echo esc_attr($this->getOptionValue('ycd-clock-timer-hours'))?>">
29
+ </div>
30
+ <div class="col-md-2">
31
+ <label for="ycdTimeMinutes"><?php _e('Mins', YCD_TEXT_DOMAIN); ?></label>
32
+ <input type="number" name="ycd-clock-timer-minutes" id="ycdTimeMinutes" min="0" max="60" class="form-control ycd-timer-time-settings" data-type="minutes" value="<?php echo esc_attr($this->getOptionValue('ycd-clock-timer-minutes'))?>">
33
+ </div>
34
+ <div class="col-md-2">
35
+ <label for="ycdTimeSeconds"><?php _e('Secs', YCD_TEXT_DOMAIN); ?></label>
36
+ <input type="number" name="ycd-clock-timer-seconds" id="ycdTimeSeconds" min="0" max="60" class="form-control ycd-timer-time-settings" data-type="seconds" value="<?php echo esc_attr($this->getOptionValue('ycd-clock-timer-seconds'))?>">
37
+ </div>
38
+ </div>
39
+ </div>
classes/countdown/Clock1Countdown.php CHANGED
@@ -83,10 +83,16 @@ class Clock1Countdown extends Countdown {
83
  private function getCanvasOptions() {
84
  $options = array();
85
  $width = (int)$this->getOptionValue('ycd-clock1-width');
86
- $timeZone = $this->getOptionValue('ycd-clock1-time-zone');
 
87
 
 
88
  $options['width'] = $width;
89
  $options['timeZone'] = $timeZone;
 
 
 
 
90
 
91
  return $options;
92
  }
83
  private function getCanvasOptions() {
84
  $options = array();
85
  $width = (int)$this->getOptionValue('ycd-clock1-width');
86
+ $timeZone = $this->getOptionValue('ycd-clock-time-zone');
87
+ $mode = $this->getOptionValue('ycd-countdown-clock-mode');
88
 
89
+ $options['mode'] = $mode;
90
  $options['width'] = $width;
91
  $options['timeZone'] = $timeZone;
92
+
93
+ if($mode == 'timer') {
94
+ $options['allSeconds'] = (int)$this->getOptionValue('ycd-clock-timer-hours')*3600 + (int)$this->getOptionValue('ycd-clock-timer-minutes')*60 + (int)$this->getOptionValue('ycd-clock-timer-seconds');
95
+ }
96
 
97
  return $options;
98
  }
classes/countdown/Clock2Countdown.php CHANGED
@@ -82,11 +82,17 @@ class Clock2Countdown extends Countdown {
82
  private function getCanvasOptions() {
83
  $options = array();
84
  $width = (int)$this->getOptionValue('ycd-clock2-width');
85
- $timeZone = $this->getOptionValue('ycd-clock2-time-zone');
86
-
 
 
87
  $options['width'] = $width;
88
  $options['timeZone'] = $timeZone;
89
-
 
 
 
 
90
  return $options;
91
  }
92
 
82
  private function getCanvasOptions() {
83
  $options = array();
84
  $width = (int)$this->getOptionValue('ycd-clock2-width');
85
+ $timeZone = $this->getOptionValue('ycd-clock-time-zone');
86
+ $mode = $this->getOptionValue('ycd-countdown-clock-mode');
87
+
88
+ $options['mode'] = $mode;
89
  $options['width'] = $width;
90
  $options['timeZone'] = $timeZone;
91
+
92
+ if($mode == 'timer') {
93
+ $options['allSeconds'] = (int)$this->getOptionValue('ycd-clock-timer-hours')*3600 + (int)$this->getOptionValue('ycd-clock-timer-minutes')*60 + (int)$this->getOptionValue('ycd-clock-timer-seconds');
94
+ }
95
+
96
  return $options;
97
  }
98
 
classes/countdown/Clock3Countdown.php CHANGED
@@ -83,11 +83,17 @@ class Clock3Countdown extends Countdown {
83
  private function getCanvasOptions() {
84
  $options = array();
85
  $width = (int)$this->getOptionValue('ycd-clock3-width');
86
- $timeZone = $this->getOptionValue('ycd-clock3-time-zone');
87
-
 
 
88
  $options['width'] = $width;
89
  $options['timeZone'] = $timeZone;
90
-
 
 
 
 
91
  return $options;
92
  }
93
 
83
  private function getCanvasOptions() {
84
  $options = array();
85
  $width = (int)$this->getOptionValue('ycd-clock3-width');
86
+ $timeZone = $this->getOptionValue('ycd-clock-time-zone');
87
+ $mode = $this->getOptionValue('ycd-countdown-clock-mode');
88
+
89
+ $options['mode'] = $mode;
90
  $options['width'] = $width;
91
  $options['timeZone'] = $timeZone;
92
+
93
+ if($mode == 'timer') {
94
+ $options['allSeconds'] = (int)$this->getOptionValue('ycd-clock-timer-hours')*3600 + (int)$this->getOptionValue('ycd-clock-timer-minutes')*60 + (int)$this->getOptionValue('ycd-clock-timer-seconds');
95
+ }
96
+
97
  return $options;
98
  }
99
 
config/config.php CHANGED
@@ -55,8 +55,8 @@ class YcdCountdownConfig {
55
  self::addDefine('YCD_CRON_REPEAT_INTERVAL', 1);
56
  self::addDefine('YCD_AJAX_SUCCESS', 1);
57
  self::addDefine('YCD_TABLE_LIMIT', 15);
58
- self::addDefine('YCD_VERSION', 1.46);
59
- self::addDefine('YCD_VERSION_PRO', 1.3);
60
  self::addDefine('YCD_FREE_VERSION', 1);
61
  self::addDefine('YCD_SILVER_VERSION', 2);
62
  self::addDefine('YCD_GOLD_VERSION', 3);
55
  self::addDefine('YCD_CRON_REPEAT_INTERVAL', 1);
56
  self::addDefine('YCD_AJAX_SUCCESS', 1);
57
  self::addDefine('YCD_TABLE_LIMIT', 15);
58
+ self::addDefine('YCD_VERSION', 1.47);
59
+ self::addDefine('YCD_VERSION_PRO', 1.31);
60
  self::addDefine('YCD_FREE_VERSION', 1);
61
  self::addDefine('YCD_SILVER_VERSION', 2);
62
  self::addDefine('YCD_GOLD_VERSION', 3);
config/optionsConfig.php CHANGED
@@ -135,6 +135,10 @@ class YcdCountdownOptionsConfig {
135
  $options[] = array('name' => 'ycd-countdown-duration-hours', 'type' => 'number', 'defaultValue' => 0);
136
  $options[] = array('name' => 'ycd-countdown-duration-minutes', 'type' => 'number', 'defaultValue' => 0);
137
  $options[] = array('name' => 'ycd-countdown-duration-seconds', 'type' => 'number', 'defaultValue' => 30);
 
 
 
 
138
  $options[] = array('name' => 'ycd-circle-countdown-before-countdown', 'type' => 'html', 'defaultValue' => '');
139
  $options[] = array('name' => 'ycd-circle-countdown-after-countdown', 'type' => 'html', 'defaultValue' => '');
140
 
@@ -205,6 +209,7 @@ class YcdCountdownOptionsConfig {
205
  $options[] = array('name' => 'ycd-display-settings', 'type' => 'ycd', 'defaultValue' => array(array('key1' => 'select_settings')));
206
  $options[] = array('name' => 'ycd-countdown-display-on', 'type' => 'checkbox', 'defaultValue' => '');
207
  $options[] = array('name' => 'ycd-position-countdown', 'type' => 'text', 'defaultValue' => 'top_center');
 
208
 
209
  $YCD_OPTIONS = apply_filters('ycdCountdownDefaultOptions', $options);
210
  }
135
  $options[] = array('name' => 'ycd-countdown-duration-hours', 'type' => 'number', 'defaultValue' => 0);
136
  $options[] = array('name' => 'ycd-countdown-duration-minutes', 'type' => 'number', 'defaultValue' => 0);
137
  $options[] = array('name' => 'ycd-countdown-duration-seconds', 'type' => 'number', 'defaultValue' => 30);
138
+
139
+ $options[] = array('name' => 'ycd-clock-timer-hours', 'type' => 'number', 'defaultValue' => 0);
140
+ $options[] = array('name' => 'ycd-clock-timer-minutes', 'type' => 'number', 'defaultValue' => 0);
141
+ $options[] = array('name' => 'ycd-clock-timer-seconds', 'type' => 'number', 'defaultValue' => 30);
142
  $options[] = array('name' => 'ycd-circle-countdown-before-countdown', 'type' => 'html', 'defaultValue' => '');
143
  $options[] = array('name' => 'ycd-circle-countdown-after-countdown', 'type' => 'html', 'defaultValue' => '');
144
 
209
  $options[] = array('name' => 'ycd-display-settings', 'type' => 'ycd', 'defaultValue' => array(array('key1' => 'select_settings')));
210
  $options[] = array('name' => 'ycd-countdown-display-on', 'type' => 'checkbox', 'defaultValue' => '');
211
  $options[] = array('name' => 'ycd-position-countdown', 'type' => 'text', 'defaultValue' => 'top_center');
212
+ $options[] = array('name' => 'ycd-countdown-clock-mode', 'type' => 'text', 'defaultValue' => 'clock');
213
 
214
  $YCD_OPTIONS = apply_filters('ycdCountdownDefaultOptions', $options);
215
  }
countdown-builder.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Plugin Name: Countdown builder
4
  * Description: The best countdown plugin
5
- * Version: 1.4.6
6
  * Author: Adam Skaat
7
  * Author URI: https://edmonsoft.com/countdown
8
  * License: GPLv2
2
  /**
3
  * Plugin Name: Countdown builder
4
  * Description: The best countdown plugin
5
+ * Version: 1.4.7
6
  * Author: Adam Skaat
7
  * Author URI: https://edmonsoft.com/countdown
8
  * License: GPLv2
helpers/AdminHelper.php CHANGED
@@ -305,6 +305,48 @@ class AdminHelper {
305
  'fields' => $countdownDateTypeFields
306
  );
307
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
308
  $data['countdownExpireTime'] = array(
309
  'template' => array(
310
  'fieldWrapperAttr' => array(
305
  'fields' => $countdownDateTypeFields
306
  );
307
 
308
+ $data['clockMode'] = array(
309
+ 'template' => array(
310
+ 'fieldWrapperAttr' => array(
311
+ 'class' => 'col-md-6 ycd-choice-option-wrapper'
312
+ ),
313
+ 'labelAttr' => array(
314
+ 'class' => 'col-md-6 ycd-choice-option-wrapper'
315
+ ),
316
+ 'groupWrapperAttr' => array(
317
+ 'class' => 'row form-group ycd-choice-wrapper'
318
+ )
319
+ ),
320
+ 'buttonPosition' => 'right',
321
+ 'nextNewLine' => true,
322
+ 'fields' => array(
323
+ array(
324
+ 'attr' => array(
325
+ 'type' => 'radio',
326
+ 'name' => 'ycd-countdown-clock-mode',
327
+ 'class' => 'ycd-countdown-hide-behavior ycd-form-radio',
328
+ 'data-attr-href' => 'ycd-countdown-clock-mode-clock',
329
+ 'value' => 'clock'
330
+ ),
331
+ 'label' => array(
332
+ 'name' => __('Clock', YCD_TEXT_DOMAIN)
333
+ )
334
+ ),
335
+ array(
336
+ 'attr' => array(
337
+ 'type' => 'radio',
338
+ 'name' => 'ycd-countdown-clock-mode',
339
+ 'class' => 'ycd-countdown-hide-behavior ycd-form-radio',
340
+ 'data-attr-href' => 'ycd-countdown-clock-mode-countdown',
341
+ 'value' => 'timer'
342
+ ),
343
+ 'label' => array(
344
+ 'name' => __('Timer', YCD_TEXT_DOMAIN)
345
+ )
346
+ )
347
+ )
348
+ );
349
+
350
  $data['countdownExpireTime'] = array(
351
  'template' => array(
352
  'fieldWrapperAttr' => array(
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: adamskaat
3
  Tags: countdown, timer, countdown timer
4
  Requires at least: 3.8
5
  Tested up to: 5.2
6
- Stable tag: 1.4.6
7
  Requires PHP: 5.3
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -64,8 +64,12 @@ You need to select the .zip file, there is no need to extract the zip file, just
64
 
65
 
66
  == Changelog ==
 
 
 
 
67
  = 1.4.6 =
68
- * Display Countdown to Everyver automatically (new feature)
69
  * Circle Countdown responsiveness improvement
70
 
71
  = 1.4.5 =
@@ -81,7 +85,7 @@ You need to select the .zip file, there is no need to extract the zip file, just
81
  * Bug fixed
82
 
83
  = 1.4.2 =
84
- * New custom Css code posibility
85
  * Features improvements
86
  * Code improvements
87
 
3
  Tags: countdown, timer, countdown timer
4
  Requires at least: 3.8
5
  Tested up to: 5.2
6
+ Stable tag: 1.4.7
7
  Requires PHP: 5.3
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
64
 
65
 
66
  == Changelog ==
67
+ = 1.4.7 =
68
+ * New timer feature for the Clock1, Clock2, Clock3, Clock4, Clock5, Clock6, Clock7
69
+ * Bug fixed
70
+
71
  = 1.4.6 =
72
+ * Display Countdown to Everywhere automatically (new feature)
73
  * Circle Countdown responsiveness improvement
74
 
75
  = 1.4.5 =
85
  * Bug fixed
86
 
87
  = 1.4.2 =
88
+ * New custom Css code possibility
89
  * Features improvements
90
  * Code improvements
91