timepiece 0.1.15 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/timepiece.js +88 -0
- data/app/assets/stylesheets/timepiece.css.scss +88 -1
- data/app/helpers/timepiece_helper.rb +14 -0
- data/lib/timepiece/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dbd55596f758b5e9d673b9ffa962428812d609f
|
4
|
+
data.tar.gz: c09ffeb76ebdb0b1ebdc937297b9bae3392dde7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56793193eb90f17b3242bd56f3f60425ae523016bf79fbcd500c4a43aa8fd9d168d67f2ce010ce878e3bea8c4f287c716b4efda8c71e969f1835f4804ecc464a
|
7
|
+
data.tar.gz: c744cf7a3de20788d3604cd76a3151895b1bc393fa99a7d48b0796932e1bc84f47bad5d34bae0faff8038580f184b385328325c0720ce3ceda753064ee5469b2
|
@@ -1,3 +1,71 @@
|
|
1
|
+
get_analog_hours = []
|
2
|
+
get_analog_minutes = []
|
3
|
+
get_analog_seconds = []
|
4
|
+
|
5
|
+
function get_analog(){
|
6
|
+
var zones = []
|
7
|
+
$(".timepiece-analog").each(function(){ zones.push($(this).attr('data-timezone')) })
|
8
|
+
var timezones = { 'timezones' : zones }
|
9
|
+
$.ajax({ type: "POST", url: "/timepiece/clock.json", data: timezones, dataType: "json", cache: false }).success(function(time){
|
10
|
+
for(var i = 0; i < time.length; i++){
|
11
|
+
get_analog_hours.push(parseInt(time[i].hours,10))
|
12
|
+
get_analog_minutes.push(parseInt(time[i].minutes,10))
|
13
|
+
get_analog_seconds.push(parseInt(time[i].seconds,10))
|
14
|
+
}
|
15
|
+
analog_hours = get_analog_hours
|
16
|
+
analog_minutes = get_analog_minutes
|
17
|
+
analog_seconds = get_analog_seconds
|
18
|
+
});
|
19
|
+
}
|
20
|
+
|
21
|
+
function show_analog(){
|
22
|
+
analog = setInterval(function(){
|
23
|
+
analog_running = true;
|
24
|
+
for(i = 0; i < analog_hours.length; i++){
|
25
|
+
if (analog_seconds[i] < 59){
|
26
|
+
analog_seconds[i] += 1
|
27
|
+
} else {
|
28
|
+
analog_seconds[i] = 0
|
29
|
+
if (analog_minutes[i] < 59){
|
30
|
+
analog_minutes[i] += 1
|
31
|
+
} else {
|
32
|
+
analog_minutes[i] = 0
|
33
|
+
if (analog_hours[i] < 23){
|
34
|
+
analog_hours[i] += 1
|
35
|
+
} else {
|
36
|
+
analog_hours[i] = 0
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
$(".timepiece-analog").each(function(i, e){
|
42
|
+
$(e).html(function(){
|
43
|
+
if(analog_hours[i] > 12){
|
44
|
+
$(e).data('analog_hours', analog_hours[i] - 12)
|
45
|
+
}else if(analog_hours[i] == 0){
|
46
|
+
$(e).data('analog_hours', 12)
|
47
|
+
}else if(analog_hours[i] == 12){
|
48
|
+
$(e).data('analog_hours', 12)
|
49
|
+
}else if(analog_hours[i] < 12){
|
50
|
+
$(e).data('analog_hours', analog_hours[i])
|
51
|
+
}
|
52
|
+
$(e).data('hours_angle', ($(e).data('analog_hours') * 30) + (analog_minutes[i] / 2));
|
53
|
+
$(e).data('minutes_angle', analog_minutes[i] * 6);
|
54
|
+
$(e).data('seconds_angle', analog_seconds[i] * 6);
|
55
|
+
$('.timepiece-hours-container', $(e)).css('-ms-transform','rotateZ(' + $(e).data('hours_angle') + 'deg)'); // angle set on each
|
56
|
+
$('.timepiece-hours-container', $(e)).css('-webkit-transform','rotateZ(' + $(e).data('hours_angle') + 'deg)');
|
57
|
+
$('.timepiece-hours-container', $(e)).css('transform','rotateZ(' + $(e).data('hours_angle') + 'deg)');
|
58
|
+
$('.timepiece-minutes-container', $(e)).css('-ms-transform','rotateZ(' + $(e).data('minutes_angle') + 'deg)');
|
59
|
+
$('.timepiece-minutes-container', $(e)).css('-webkit-transform','rotateZ(' + $(e).data('minutes_angle') + 'deg)');
|
60
|
+
$('.timepiece-minutes-container', $(e)).css('transform','rotateZ(' + $(e).data('minutes_angle') + 'deg)');
|
61
|
+
$('.timepiece-seconds-container', $(e)).css('-ms-transform','rotateZ(' + $(e).data('seconds_angle') + 'deg)');
|
62
|
+
$('.timepiece-seconds-container', $(e)).css('-webkit-transform','rotateZ(' + $(e).data('seconds_angle') + 'deg)');
|
63
|
+
$('.timepiece-seconds-container', $(e)).css('transform','rotateZ(' + $(e).data('seconds_angle') + 'deg)');
|
64
|
+
})
|
65
|
+
})
|
66
|
+
}, 1000)
|
67
|
+
}
|
68
|
+
|
1
69
|
get_hours = []
|
2
70
|
get_minutes = []
|
3
71
|
get_seconds = []
|
@@ -231,6 +299,13 @@ function show_countdown(){
|
|
231
299
|
}, 1000)
|
232
300
|
}
|
233
301
|
|
302
|
+
function reset_analog(){
|
303
|
+
get_analog_hours = []
|
304
|
+
get_analog_minutes = []
|
305
|
+
get_analog_seconds = []
|
306
|
+
get_analog()
|
307
|
+
}
|
308
|
+
|
234
309
|
function reset_time(){
|
235
310
|
get_hours = []
|
236
311
|
get_minutes = []
|
@@ -258,6 +333,10 @@ function reset_countdown(){
|
|
258
333
|
|
259
334
|
$(document).ready(function(){
|
260
335
|
// Might want to reformat to move if-statement : should also be performed before 'reset_time' so as not to make a blank AJAX request.
|
336
|
+
if ($(".timepiece-analog").length > 0){
|
337
|
+
get_analog()
|
338
|
+
show_analog()
|
339
|
+
}
|
261
340
|
if ($(".timepiece").length > 0){
|
262
341
|
get_time()
|
263
342
|
show_time()
|
@@ -272,6 +351,12 @@ $(document).ready(function(){
|
|
272
351
|
}
|
273
352
|
})
|
274
353
|
$(document).on('page:load', function(){
|
354
|
+
if ($(".timepiece-analog").length > 0){
|
355
|
+
if (analog_running){
|
356
|
+
clearInterval(analog);
|
357
|
+
}
|
358
|
+
reset_analog();
|
359
|
+
}
|
275
360
|
if ($(".timepiece").length > 0){
|
276
361
|
if (clock_running){
|
277
362
|
clearInterval(clock);
|
@@ -294,6 +379,9 @@ $(document).on('page:load', function(){
|
|
294
379
|
})
|
295
380
|
|
296
381
|
$(window).focus(function(){
|
382
|
+
if ($(".timepiece-analog").length > 0){
|
383
|
+
reset_analog()
|
384
|
+
}
|
297
385
|
if ($(".timepiece").length > 0){
|
298
386
|
reset_time()
|
299
387
|
}
|
@@ -1 +1,88 @@
|
|
1
|
-
// CSS for the analogue clock version of timepiece, and maybe some optional styles for the digital.
|
1
|
+
// CSS for the analogue clock version of timepiece, and maybe some optional styles for the digital.
|
2
|
+
|
3
|
+
.timepiece-analog {
|
4
|
+
//border:solid 1em;
|
5
|
+
//border-color:#222;
|
6
|
+
border-radius: 50%;
|
7
|
+
background-color: #eee;
|
8
|
+
background-size: 88%;
|
9
|
+
position: relative;
|
10
|
+
}
|
11
|
+
|
12
|
+
.timepiece-analog:after {
|
13
|
+
background: #d00;
|
14
|
+
border-radius: 50%;
|
15
|
+
content: "";
|
16
|
+
position: absolute;
|
17
|
+
left: 50%;
|
18
|
+
top: 50%;
|
19
|
+
-ms-transform: translate(-50%, -50%);
|
20
|
+
-webkit-transform: translate(-50%, -50%);
|
21
|
+
transform: translate(-50%, -50%);
|
22
|
+
width: 5%;
|
23
|
+
height: 5%;
|
24
|
+
z-index: 10;
|
25
|
+
}
|
26
|
+
|
27
|
+
.timepiece-minutes-container, .timepiece-hours-container, .timepiece-seconds-container {
|
28
|
+
position: absolute;
|
29
|
+
top: 0;
|
30
|
+
right: 0;
|
31
|
+
bottom: 0;
|
32
|
+
left: 0;
|
33
|
+
}
|
34
|
+
|
35
|
+
.timepiece-analog-hours {
|
36
|
+
background: #333;
|
37
|
+
height: 25%; //
|
38
|
+
left: 48.75%;
|
39
|
+
position: absolute;
|
40
|
+
top: 25%; //
|
41
|
+
-ms-transform-origin: 50% 100%;
|
42
|
+
-webkit-transform-origin: 50% 100%;
|
43
|
+
transform-origin: 50% 100%;
|
44
|
+
width: 2.5%;
|
45
|
+
}
|
46
|
+
|
47
|
+
.timepiece-analog-minutes {
|
48
|
+
background: #333;
|
49
|
+
height: 40%; //
|
50
|
+
left: 49%;
|
51
|
+
position: absolute;
|
52
|
+
top: 10%; //
|
53
|
+
-ms-transform-origin: 50% 100%;
|
54
|
+
-webkit-transform-origin: 50% 100%;
|
55
|
+
transform-origin: 50% 100%;
|
56
|
+
width: 2%;
|
57
|
+
}
|
58
|
+
|
59
|
+
.timepiece-analog-seconds {
|
60
|
+
background: #d00;
|
61
|
+
height: 45%; //
|
62
|
+
left: 49.5%;
|
63
|
+
position: absolute;
|
64
|
+
top: 14%; //
|
65
|
+
-ms-transform-origin: 50% 80%;
|
66
|
+
-webkit-transform-origin: 50% 80%;
|
67
|
+
transform-origin: 50% 80%;
|
68
|
+
width: 1%;
|
69
|
+
z-index: 8;
|
70
|
+
}
|
71
|
+
|
72
|
+
// Animation code - unused but kept for reference:
|
73
|
+
// We should animate the clocks into correct positions when the clock refreshes on page reentry.
|
74
|
+
/*
|
75
|
+
@-webkit-keyframes rotate {
|
76
|
+
100% {-webkit-transform: rotateZ(360deg);}
|
77
|
+
}
|
78
|
+
|
79
|
+
.timepiece-hours-container {
|
80
|
+
-webkit-animation: rotate 43200s infinite linear;
|
81
|
+
}
|
82
|
+
.timepiece-minutes-container {
|
83
|
+
-webkit-animation: rotate 3600s infinite steps(60);
|
84
|
+
}
|
85
|
+
.timepiece-seconds-container {
|
86
|
+
-webkit-animation: rotate 60s infinite steps(60);
|
87
|
+
}
|
88
|
+
*/
|
@@ -40,6 +40,20 @@ module TimepieceHelper
|
|
40
40
|
content_tag(:span, time.html_safe, class: 'timepiece', 'data-timezone' => location, 'data-tptype' => type, 'data-lead' => lead, 'data-abbr_separator' => abbr_sep, 'id' => (id unless id.blank?))
|
41
41
|
end
|
42
42
|
|
43
|
+
def analog(location = 'UTC', id: '', size: '10em')
|
44
|
+
Time.zone = location
|
45
|
+
hours = Time.now.in_time_zone.strftime('%I')
|
46
|
+
minutes = Time.now.in_time_zone.strftime('%M')
|
47
|
+
seconds = Time.now.in_time_zone.strftime('%S')
|
48
|
+
hours_angle = (hours.to_i * 30) + (minutes.to_i / 2)
|
49
|
+
minutes_angle = minutes.to_i * 6
|
50
|
+
seconds_angle = seconds.to_i * 6
|
51
|
+
time = "<div class='timepiece-hours-container' style='-ms-transform:rotateZ(#{hours_angle}deg);-webkit-transform:rotateZ(#{hours_angle}deg);transform:rotateZ(#{hours_angle}deg);'><div class='timepiece-analog-hours'></div></div>"\
|
52
|
+
"<div class='timepiece-minutes-container' style='-ms-transform:rotateZ(#{minutes_angle}deg);-webkit-transform:rotateZ(#{minutes_angle}deg);transform:rotateZ(#{minutes_angle}deg);'><div class='timepiece-analog-minutes'></div></div>"\
|
53
|
+
"<div class='timepiece-seconds-container' style='-ms-transform:rotateZ(#{seconds_angle}deg);-webkit-transform:rotateZ(#{seconds_angle}deg);transform:rotateZ(#{seconds_angle}deg);'><div class='timepiece-analog-seconds'></div></div>"
|
54
|
+
content_tag(:article, time.html_safe, class: 'timepiece-analog', 'data-timezone' => location, 'id' => (id unless id.blank?), 'style' => 'width:' + size + ';padding-bottom:' + size + ';')
|
55
|
+
end
|
56
|
+
|
43
57
|
def timer(time_since = Time.now, id: '')
|
44
58
|
seconds_diff = (Time.now - time_since).to_i
|
45
59
|
|
data/lib/timepiece/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timepiece
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thom Bruce
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jquery-rails
|