local_time 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d0bfe22e485d89d3b8b8ef64db29d82d4d4f518c
4
- data.tar.gz: 7d662d650e07542e16b13b98315ce589992bf397
3
+ metadata.gz: c2499d2a165c030164525b49b02920c90c4b4953
4
+ data.tar.gz: 41e33a6cbb60e66d98aba1a9089b82e324207314
5
5
  SHA512:
6
- metadata.gz: 840814649a2e4c03f7b8b9592ff696c7d5b7516a088a270fe2bdb4fb96e1a29221d455c31bbc31fdaa2a2dc0a38fe3718144c4c2dfe8ced9cbbc1d7ee76f425b
7
- data.tar.gz: 2ed6f4bd924c469c23fd1134a53e4818ac1f5de1fd9cf9060859726bb47429176a8e5421f07c48d18303502c288ea38ccf74fff70ce55134f2e6b8fc110d23a4
6
+ metadata.gz: a03eda21f6d818690cf468931e43f832afdf5fc27a5adaac2d6af551b48b5f2fff3b0990e98d5ef2d49edd3ff361a4776c2e10a691a8598f69940844108c984f
7
+ data.tar.gz: d9843bb2c0f6a8f892a99218a1e95c25ea88f55ddef92be471ceac46ce25d352974947219c08de3e0cfe96b28fb4081cde6b7ebe09432673628db4e6e963a53f
data/README.md CHANGED
@@ -4,13 +4,11 @@ Local Time is a Rails engine with helpers and JavaScript for displaying times an
4
4
 
5
5
  ####Example
6
6
 
7
- Assuming the time zone is EST and `Time.now` is `2013-11-27 18:43:22 -0500`:
8
-
9
7
  ```erb
10
- <%= local_time(Time.now) # index.html.erb %>
8
+ <%= local_time(comment.created_at) # comment.created_at => Wed, 27 Nov 2013 18:43:22 EST -0500 %>
11
9
  ```
12
10
 
13
- Renders in UTC time:
11
+ Renders:
14
12
 
15
13
  ```html
16
14
  <time data-format="%B %e, %Y %l:%M%P"
@@ -18,7 +16,7 @@ Renders in UTC time:
18
16
  datetime="2013-11-27T23:43:22Z">November 27, 2013 11:43pm</time>
19
17
  ```
20
18
 
21
- Then immediately converts to local time and strftime formats with JavaScript:
19
+ When the DOM loads, the content is immediately replaced with a local, formatted time:
22
20
 
23
21
  ```html
24
22
  <time data-format="%B %e, %Y %l:%M%P"
@@ -67,6 +65,11 @@ The included JavaScript does not depend on any frameworks or libraries, and list
67
65
 
68
66
  #### Version History
69
67
 
68
+ **0.2.0** (December 10, 2013)
69
+
70
+ * Prefer `textContent` over `innerText` for Firefox compatibility
71
+ * Added `options` argument to `local_time_ago` helper
72
+
70
73
  **0.1.0** (November 29, 2013)
71
74
 
72
75
  * Initial release.
@@ -171,6 +171,7 @@ process = (selector, callback) ->
171
171
 
172
172
  document.addEventListener "DOMContentLoaded", ->
173
173
  domLoaded = true
174
+ textProperty = if "textContent" of document.body then "textContent" else "innerText"
174
175
 
175
176
  process "time[data-local]:not([data-localized])", (element) ->
176
177
  datetime = element.getAttribute "datetime"
@@ -180,7 +181,7 @@ document.addEventListener "DOMContentLoaded", ->
180
181
  time = new Date Date.parse datetime
181
182
  return if isNaN time
182
183
 
183
- element.innerText =
184
+ element[textProperty] =
184
185
  switch local
185
186
  when "time"
186
187
  element.setAttribute "data-localized", true
@@ -14,9 +14,13 @@ module LocalTimeHelper
14
14
  local_time time, options
15
15
  end
16
16
 
17
- def local_time_ago(time)
17
+ def local_time_ago(time, options = {})
18
18
  time = utc_time(time)
19
- time_tag time, time.strftime('%B %e, %Y %l:%M%P'), data: { local: 'time-ago' }
19
+
20
+ options[:data] ||= {}
21
+ options[:data].merge! local: 'time-ago'
22
+
23
+ time_tag time, time.strftime('%B %e, %Y %l:%M%P'), options
20
24
  end
21
25
 
22
26
  def utc_time(time_or_date)
@@ -4,7 +4,7 @@ require 'action_view'
4
4
  require 'minitest/autorun'
5
5
 
6
6
 
7
- class LocalTimeHelperTest < Minitest::Test
7
+ class LocalTimeHelperTest < MiniTest::Unit::TestCase
8
8
  include ActionView::Helpers::DateHelper, ActionView::Helpers::TagHelper
9
9
  include LocalTimeHelper
10
10
 
@@ -65,4 +65,9 @@ class LocalTimeHelperTest < Minitest::Test
65
65
  expected = %Q(<time data-local="time-ago" datetime="#{@time_js}">November 21, 2013 6:00am</time>)
66
66
  assert_equal expected, local_time_ago(@time)
67
67
  end
68
+
69
+ def test_local_time_ago_with_options
70
+ expected = %Q(<time class="date-time" data-local="time-ago" datetime="#{@time_js}">November 21, 2013 6:00am</time>)
71
+ assert_equal expected, local_time_ago(@time, class: "date-time")
72
+ end
68
73
  end
@@ -12,6 +12,15 @@
12
12
  document.body.appendChild el
13
13
  el
14
14
 
15
+ @setText = (el, text) ->
16
+ textProperty = if "textContent" of el then "textContent" else "innerText"
17
+ el[textProperty] = text
18
+
19
+ @getText = (el) ->
20
+ # innerHTML works in all browsers so using it ensures we're
21
+ # reading the text content, not a potentially arbitrary property.
22
+ el.innerHTML
23
+
15
24
  @triggerEvent = (name, el = document) ->
16
25
  event = document.createEvent "Events"
17
26
  event.initEvent name, true, true
@@ -9,9 +9,9 @@ test "date", ->
9
9
 
10
10
  test "unparseable time", ->
11
11
  el = addTimeEl "%Y", ":("
12
- el.innerText = "2013"
12
+ setText el, "2013"
13
13
  run()
14
- equal el.innerText, "2013"
14
+ equal getText(el), "2013"
15
15
 
16
16
 
17
17
  assertLocalized = (id, type = "time") ->
@@ -26,7 +26,7 @@ assertLocalized = (id, type = "time") ->
26
26
  el = document.getElementById id
27
27
 
28
28
  ok datetime = el.getAttribute "datetime"
29
- ok local = el.innerText
29
+ ok local = getText el
30
30
 
31
31
  datetimeParsed = moment datetime
32
32
  localParsed = moment local, momentFormat
@@ -3,28 +3,28 @@ module "page events"
3
3
  test "document DOMContentLoaded", ->
4
4
  el = addTimeEl()
5
5
  triggerEvent "DOMContentLoaded"
6
- ok el.innerText
6
+ ok getText el
7
7
 
8
8
  test "document time:elapse", ->
9
9
  el = addTimeEl()
10
10
  triggerEvent "time:elapse"
11
- ok el.innerText
11
+ ok getText el
12
12
 
13
13
  test "window popstate", ->
14
14
  el = addTimeEl()
15
15
  triggerEvent "popstate", window
16
- ok el.innerText
16
+ ok getText el
17
17
 
18
18
  test "document page:update with Turbolinks on", ->
19
19
  el = addTimeEl()
20
20
  triggerEvent "page:update"
21
- ok not el.innerText
21
+ ok not getText el
22
22
 
23
23
  original = window.Turbolinks
24
24
  window.Turbolinks = { supported: true }
25
25
 
26
26
  triggerEvent "DOMContentLoaded"
27
27
  triggerEvent "page:update"
28
- ok el.innerText
28
+ ok getText el
29
29
 
30
30
  window.Turbolinks = original
@@ -32,7 +32,7 @@ for day in [0..30] by 6
32
32
  el = addTimeEl format, now.toISOString()
33
33
  run()
34
34
 
35
- equal el.innerText,
35
+ equal getText(el),
36
36
  if func = momentFormat.match(/(\w+)\(\)/)?[1]
37
37
  now.toDate()[func]()
38
38
  else
@@ -46,4 +46,4 @@ assertTimeAgo = (string, unit, amount) ->
46
46
  el.setAttribute "data-local", "time-ago"
47
47
  el.setAttribute "datetime", moment().subtract(unit, amount).utc().toISOString()
48
48
  run()
49
- equal el.innerText, string
49
+ equal getText(el), string
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: local_time
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javan Makhmali
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-29 00:00:00.000000000 Z
12
+ date: 2013-12-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: coffee-rails
@@ -25,6 +25,20 @@ dependencies:
25
25
  - - '>='
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rails
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
28
42
  description:
29
43
  email: javan@37signals.com
30
44
  executables: []
@@ -67,7 +81,7 @@ rubyforge_project:
67
81
  rubygems_version: 2.1.11
68
82
  signing_key:
69
83
  specification_version: 4
70
- summary: Rails engine for displaying local times using JavaScript
84
+ summary: Rails engine for client-side local time
71
85
  test_files:
72
86
  - test/helpers/local_time_helper_test.rb
73
87
  - test/javascripts/config.ru