digital_opera 0.0.8 → 0.0.9
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.
- data/app/assets/javascripts/digital_opera/digital_opera.js +7 -0
- data/app/assets/javascripts/digital_opera/digital_opera_namespace.js.coffee +1 -0
- data/app/assets/javascripts/digital_opera/ellipsis.js.coffee +28 -0
- data/app/assets/javascripts/digital_opera/events.js.coffee +16 -0
- data/app/assets/javascripts/digital_opera/forms.js.coffee +45 -0
- data/app/assets/javascripts/digital_opera/preload_images.js.coffee +25 -0
- data/app/assets/javascripts/digital_opera/strings.js.coffee +40 -0
- data/app/assets/javascripts/digital_opera/tables.js.coffee +28 -0
- data/lib/digital_opera/version.rb +1 -1
- data/spec/javascripts/SpecRunner.html +62 -0
- data/spec/javascripts/lib/jasmine-1.3.1/MIT.LICENSE +20 -0
- data/spec/javascripts/lib/jasmine-1.3.1/jasmine-html.js +681 -0
- data/spec/javascripts/lib/jasmine-1.3.1/jasmine.css +82 -0
- data/spec/javascripts/lib/jasmine-1.3.1/jasmine.js +2600 -0
- data/spec/javascripts/spec/SpecHelper.js +9 -0
- data/spec/javascripts/spec/digital_opera_namespace_spec.js +7 -0
- data/spec/javascripts/spec/ellipsis_spec.js +55 -0
- data/spec/javascripts/spec/events_spec.js +84 -0
- data/spec/javascripts/spec/forms_spec.js +24 -0
- data/spec/javascripts/spec/preload_images_spec.js +76 -0
- data/spec/javascripts/spec/strings_spec.js +51 -0
- data/spec/javascripts/spec/tables_spec.js +48 -0
- data/spec/javascripts/src/digital_opera.js +149 -0
- metadata +41 -5
@@ -0,0 +1 @@
|
|
1
|
+
window.digitalOpera = window.digitalOpera || {}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#= require jquery
|
2
|
+
#
|
3
|
+
# Animate an ellipsis witin elements with the attribute 'data-does="animate-ellipsis"'
|
4
|
+
# Frame 1 .
|
5
|
+
# Frame 2 ..
|
6
|
+
# Frame 3 ...
|
7
|
+
# Frame 4 .
|
8
|
+
# Etc..
|
9
|
+
((d) ->
|
10
|
+
d.ellipsis = (el) ->
|
11
|
+
ele = $(el)
|
12
|
+
counter = 0
|
13
|
+
timer = setInterval () ->
|
14
|
+
counter++
|
15
|
+
counter = 0 if counter > 3
|
16
|
+
num = 0
|
17
|
+
arr = []
|
18
|
+
while num < counter
|
19
|
+
num++
|
20
|
+
arr.push '.'
|
21
|
+
|
22
|
+
ele.text arr.join('')
|
23
|
+
, 750
|
24
|
+
|
25
|
+
)(window.digitalOpera)
|
26
|
+
|
27
|
+
$('[data-does="animate-ellipsis"]').each (idx, ele) ->
|
28
|
+
window.digitalOpera(ele)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#= require jquery
|
2
|
+
#= require digital_opera/digital_opera_namespace
|
3
|
+
|
4
|
+
# @method isClickOutsideElement
|
5
|
+
# event [Event]
|
6
|
+
# element [DOM Element]
|
7
|
+
# Determines whether or not a click is outside of the element passed in
|
8
|
+
((d) ->
|
9
|
+
d.isClickOutsideElement = (event, element) ->
|
10
|
+
target = $ event.target
|
11
|
+
|
12
|
+
if target[0] == element[0] || element.children(target).length > 0
|
13
|
+
return false
|
14
|
+
else
|
15
|
+
return true
|
16
|
+
)(window.digitalOpera)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#= require jquery
|
2
|
+
#= require digital_opera/digital_opera_namespace
|
3
|
+
|
4
|
+
((d) ->
|
5
|
+
# @method parameterizeObject
|
6
|
+
# data [Object]
|
7
|
+
# Generate correctly formatted parameters for xhr2
|
8
|
+
#
|
9
|
+
# {
|
10
|
+
# id: 1234567890,
|
11
|
+
# person: {
|
12
|
+
# first_name: 'Grant',
|
13
|
+
# last_name : 'Klinsing',
|
14
|
+
# meta : {
|
15
|
+
# foo: 'bar',
|
16
|
+
# test: [100, 200]
|
17
|
+
# }
|
18
|
+
# }
|
19
|
+
# }
|
20
|
+
#
|
21
|
+
# Will become:
|
22
|
+
#
|
23
|
+
# id = 1234567890
|
24
|
+
# person[first_name] = 'Grant'
|
25
|
+
# person[last_name] = 'Klinsing'
|
26
|
+
# person[meta][foo] = 'bar'
|
27
|
+
# person[meta][test] = [100, 200]
|
28
|
+
d.parameterizeObject = (data) ->
|
29
|
+
obj = {}
|
30
|
+
|
31
|
+
accLoop = (key, val) ->
|
32
|
+
if $.isPlainObject val
|
33
|
+
for k, v of val
|
34
|
+
k = "#{key}[#{k}]"
|
35
|
+
accLoop(k, v)
|
36
|
+
else
|
37
|
+
obj[key] = val
|
38
|
+
return
|
39
|
+
|
40
|
+
for key, val of data
|
41
|
+
accLoop(key, val)
|
42
|
+
|
43
|
+
obj
|
44
|
+
|
45
|
+
)(window.digitalOpera)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#= require digital_opera/digital_opera_namespace
|
2
|
+
|
3
|
+
((d) ->
|
4
|
+
# @method preloadImages
|
5
|
+
# urls [String, Array]
|
6
|
+
# callback [Function]
|
7
|
+
# callback fired when all images have loaded
|
8
|
+
d.preloadImages = (urls, callback) ->
|
9
|
+
urls = [urls] if typeof urls == 'string'
|
10
|
+
images = []
|
11
|
+
numLoaded = 0
|
12
|
+
increment = ->
|
13
|
+
numLoaded++
|
14
|
+
if callback? && numLoaded == urls.length
|
15
|
+
callback()
|
16
|
+
urls.map (url, i) ->
|
17
|
+
img = images[i]
|
18
|
+
img = new Image()
|
19
|
+
# we want to increment on each of these events
|
20
|
+
img.onload = increment
|
21
|
+
img.onerror = increment
|
22
|
+
img.src = url
|
23
|
+
img
|
24
|
+
|
25
|
+
)(window.digitalOpera)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#= require jquery
|
2
|
+
#= require digital_opera/digital_opera_namespace
|
3
|
+
|
4
|
+
((d) ->
|
5
|
+
d.capitalize = (str) ->
|
6
|
+
str.charAt(0).toUpperCase() + str.slice(1)
|
7
|
+
|
8
|
+
# @method titleize
|
9
|
+
# str [String]
|
10
|
+
# Titleize a string
|
11
|
+
d.titleize = (str) ->
|
12
|
+
arr = str.split(' ')
|
13
|
+
newString = ''
|
14
|
+
for string in arr
|
15
|
+
arr[_i] = string.charAt(0).toUpperCase() + string.slice(1).toLowerCase()
|
16
|
+
arr.join(' ')
|
17
|
+
|
18
|
+
# @method formatJSONErrors
|
19
|
+
# str [String, Object]
|
20
|
+
# withKeys [Boolean]
|
21
|
+
# Takes a JSON object and convert it to a readable sentence
|
22
|
+
#
|
23
|
+
# Example:
|
24
|
+
# {email: ["must be at least 6 characters","must contain a number and a letter"]}
|
25
|
+
# will be translated to:
|
26
|
+
# ["email must be at least 6 characters and must contain a number and a letter"]
|
27
|
+
d.formatJSONErrors = (str, withKeys) ->
|
28
|
+
errors = if typeof str == 'string' then JSON.parse(str) else str
|
29
|
+
$.map errors, (val, key) ->
|
30
|
+
values = val.join(' and ')
|
31
|
+
str = d.capitalize "#{key} #{values}"
|
32
|
+
|
33
|
+
if withKeys?
|
34
|
+
obj = {}
|
35
|
+
obj[key] = str
|
36
|
+
obj
|
37
|
+
else
|
38
|
+
str
|
39
|
+
|
40
|
+
)(window.digitalOpera)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#= require jquery
|
2
|
+
#= require digital_opera/digital_opera_namespace
|
3
|
+
|
4
|
+
((d) ->
|
5
|
+
$(document).on 'click', 'tr[data-href]', (e) ->
|
6
|
+
target = $(e.target)
|
7
|
+
currentTarget = $(e.currentTarget)
|
8
|
+
|
9
|
+
if target.is('a') == false && target.parents('a').length == 0 # check to make sure click isn't within a link
|
10
|
+
href = currentTarget.attr('data-href')
|
11
|
+
if currentTarget.attr('data-does') == 'open-window'
|
12
|
+
win = window.open(href, '_blank')
|
13
|
+
win.focus()
|
14
|
+
else
|
15
|
+
location = d.forTestingPurposes.getWindowLocation()
|
16
|
+
location = href
|
17
|
+
|
18
|
+
# this really sucks, but in order to test everything, we need to mock
|
19
|
+
# window.location since it can NOT be spied on. #lame
|
20
|
+
d.forTestingPurposes = (->
|
21
|
+
getWindowLocation = ->
|
22
|
+
return window.location;
|
23
|
+
|
24
|
+
return {
|
25
|
+
getWindowLocation: getWindowLocation
|
26
|
+
}
|
27
|
+
)();
|
28
|
+
)(window.digitalOpera)
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/html4/loose.dtd">
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<title>Jasmine Spec Runner</title>
|
6
|
+
|
7
|
+
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
|
8
|
+
<link rel="shortcut icon" type="image/png" href="lib/jasmine-1.3.1/jasmine_favicon.png">
|
9
|
+
<link rel="stylesheet" type="text/css" href="lib/jasmine-1.3.1/jasmine.css">
|
10
|
+
<script type="text/javascript" src="lib/jasmine-1.3.1/jasmine.js"></script>
|
11
|
+
<script type="text/javascript" src="lib/jasmine-1.3.1/jasmine-html.js"></script>
|
12
|
+
|
13
|
+
<!-- include source files here... -->
|
14
|
+
<script type="text/javascript" src="src/digital_opera.js"></script>
|
15
|
+
|
16
|
+
<!-- include spec files here... -->
|
17
|
+
<script type="text/javascript" src="spec/SpecHelper.js"></script>
|
18
|
+
|
19
|
+
<!--[specFiles]-->
|
20
|
+
<script type="text/javascript" src="spec/digital_opera_namespace_spec.js"></script>
|
21
|
+
<script type="text/javascript" src="spec/ellipsis_spec.js"></script>
|
22
|
+
<script type="text/javascript" src="spec/events_spec.js"></script>
|
23
|
+
<script type="text/javascript" src="spec/forms_spec.js"></script>
|
24
|
+
<script type="text/javascript" src="spec/preload_images_spec.js"></script>
|
25
|
+
<script type="text/javascript" src="spec/strings_spec.js"></script>
|
26
|
+
<script type="text/javascript" src="spec/tables_spec.js"></script>
|
27
|
+
<!--[/specFiles]-->
|
28
|
+
|
29
|
+
<script type="text/javascript">
|
30
|
+
(function() {
|
31
|
+
var jasmineEnv = jasmine.getEnv();
|
32
|
+
jasmineEnv.updateInterval = 1000;
|
33
|
+
|
34
|
+
var htmlReporter = new jasmine.HtmlReporter();
|
35
|
+
|
36
|
+
jasmineEnv.addReporter(htmlReporter);
|
37
|
+
|
38
|
+
jasmineEnv.specFilter = function(spec) {
|
39
|
+
return htmlReporter.specFilter(spec);
|
40
|
+
};
|
41
|
+
|
42
|
+
var currentWindowOnload = window.onload;
|
43
|
+
|
44
|
+
window.onload = function() {
|
45
|
+
if (currentWindowOnload) {
|
46
|
+
currentWindowOnload();
|
47
|
+
}
|
48
|
+
execJasmine();
|
49
|
+
};
|
50
|
+
|
51
|
+
function execJasmine() {
|
52
|
+
jasmineEnv.execute();
|
53
|
+
}
|
54
|
+
|
55
|
+
})();
|
56
|
+
</script>
|
57
|
+
|
58
|
+
</head>
|
59
|
+
|
60
|
+
<body>
|
61
|
+
</body>
|
62
|
+
</html>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2008-2011 Pivotal Labs
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|