material_raingular 0.0.1.alpha → 0.0.2.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/assets/javascripts/ajax_errors.js.coffee +2 -3
- data/lib/assets/javascripts/dateconverter.coffee +1 -15
- data/lib/assets/javascripts/dateparser.coffee +21 -0
- data/lib/assets/javascripts/directives/ngboolean.js.coffee +10 -11
- data/lib/assets/javascripts/directives/ngcreate.js.coffee +5 -2
- data/lib/assets/javascripts/directives/ngupdate.js.coffee +76 -0
- data/lib/assets/javascripts/identifier_interceptor.js.coffee +8 -0
- data/lib/assets/javascripts/material_raingular.js.coffee +4 -1
- data/lib/material_raingular/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6b89dcb5aaed8e1ccb5bc7b31f826165201b73f
|
4
|
+
data.tar.gz: fc3af078ed0d7119fac7523948286765c587dd51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73e7a544ba217cf5b909897ffd4efc2a6d9b7c1710c444f85c596cc21da791a631e6ba68306a4592de9b6cc755e6eb4d03987c7cf8c492f51ae8c7794e01d85d
|
7
|
+
data.tar.gz: f7c1e8316babc822e13807960c4b96a93779959aa51bb6516bbd833bcca463024a7082944aa83262abfa2dfbd027d9d0d794c28caf4adacddfe271d7e98ee00d
|
@@ -7,7 +7,6 @@ angular.factories
|
|
7
7
|
response: (response) -> response
|
8
8
|
responseError: (rejection) ->
|
9
9
|
$rootScope.xhr_errors = []
|
10
|
-
for
|
11
|
-
|
12
|
-
$rootScope.xhr_errors.push(k + ' ' + ' ' + description)
|
10
|
+
for error in rejection.data.errors
|
11
|
+
$rootScope.xhr_errors.push(error)
|
13
12
|
rejection
|
@@ -1,18 +1,4 @@
|
|
1
|
-
|
2
|
-
constructor: (object)->
|
3
|
-
@object = object
|
4
|
-
evaluate: ->
|
5
|
-
for i of @object
|
6
|
-
if @object[i] != null and typeof @object[i] == 'object'
|
7
|
-
new DateParser(@object[i]).evaluate()
|
8
|
-
else if @object[i] != null and typeof @object[i] == 'string'
|
9
|
-
if !!@object[i].match(/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/)
|
10
|
-
time = new Date(@object[i])
|
11
|
-
time.setTime( time.getTime() + time.getTimezoneOffset()*60*1000 ) #offset timezone
|
12
|
-
@object[i] = time
|
13
|
-
else if !!@object[i].match(/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T[0-9]{2}\:[0-9]{2}\:[0-9]{2}\.[0-9]{3}[A-Z]$/)
|
14
|
-
@object[i] = new Date(@object[i])
|
15
|
-
return
|
1
|
+
# //= require dateparser
|
16
2
|
angular.factories
|
17
3
|
.factory 'DateConverterInterceptor', ($q, $rootScope) ->
|
18
4
|
request: (config) -> config
|
@@ -0,0 +1,21 @@
|
|
1
|
+
root = exports ? this
|
2
|
+
class root.DateParser
|
3
|
+
constructor: (object)->
|
4
|
+
@object = object
|
5
|
+
formatDate: (date)->
|
6
|
+
date.getFullYear() + '-' + ('0' + (date.getMonth() + 1))[-2..-1] + '-' + ( '0' + date.getDate())[-2..-1]
|
7
|
+
to_s: ->
|
8
|
+
@evaluate(true)
|
9
|
+
evaluate: (string_flag)->
|
10
|
+
for i of @object
|
11
|
+
if @object[i] != null and typeof @object[i] == 'object'
|
12
|
+
new DateParser(@object[i]).evaluate()
|
13
|
+
else if @object[i] != null and typeof @object[i] == 'string'
|
14
|
+
if !!@object[i].match(/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/)
|
15
|
+
time = new Date(@object[i])
|
16
|
+
time.setTime( time.getTime() + time.getTimezoneOffset()*60*1000 ) #offset timezone
|
17
|
+
@object[i] = if string_flag then @formatDate(time) else time
|
18
|
+
else if !!@object[i].match(/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T[0-9]{2}\:[0-9]{2}\:[0-9]{2}\.[0-9]{3}[A-Z]$/)
|
19
|
+
time = new Date(@object[i])
|
20
|
+
@object[i] = if string_flag then @formatDate(time) else time
|
21
|
+
return
|
@@ -1,7 +1,8 @@
|
|
1
1
|
angular.module 'NgBoolean', ['Factories', 'FactoryName']
|
2
2
|
|
3
|
-
.directive 'ngBoolean', ($
|
3
|
+
.directive 'ngBoolean', ($injector,factoryName) ->
|
4
4
|
restrict: 'A'
|
5
|
+
require: 'ngModel'
|
5
6
|
|
6
7
|
link: (scope, element, attributes, ngModelCtrl) ->
|
7
8
|
model = attributes.ngModel
|
@@ -9,10 +10,8 @@ angular.module 'NgBoolean', ['Factories', 'FactoryName']
|
|
9
10
|
callFunction += ';' + attributes.ngCallback if attributes.ngCallback
|
10
11
|
element.attr("call-function", callFunction)
|
11
12
|
element.bind 'click', ->
|
12
|
-
scope.$eval(element.attr("call-function"))
|
13
|
-
|
14
|
-
controller: ($scope, $injector,factoryName) ->
|
15
|
-
$scope.update = (modelName)->
|
13
|
+
scope.$eval(element.attr("call-function")) unless attributes.disabled
|
14
|
+
scope.update = (modelName)->
|
16
15
|
input = modelName.split(',')
|
17
16
|
trackby = input.pop() if input.length > 1
|
18
17
|
trackby = trackby.split(';') if trackby
|
@@ -20,15 +19,15 @@ angular.module 'NgBoolean', ['Factories', 'FactoryName']
|
|
20
19
|
data = input.splice(0,1)[0].split('.')
|
21
20
|
functions = input.join(',').split(')')
|
22
21
|
factory = factoryName(data[0])
|
23
|
-
object = {id:
|
24
|
-
object[data[0]] = {id:
|
25
|
-
object[data[0]][data[1]] =
|
22
|
+
object = {id: scope[data[0]]['id']}
|
23
|
+
object[data[0]] = {id: scope[data[0]]['id']}
|
24
|
+
object[data[0]][data[1]] = scope[data[0]][data[1]]
|
26
25
|
list = $injector.get(factory)
|
27
26
|
list.update object, (returnData) ->
|
28
27
|
for tracked in trackby
|
29
|
-
|
30
|
-
|
28
|
+
scope[data[0]][tracked] = returnData[tracked]
|
29
|
+
ngModelCtrl.$setViewValue(returnData[data[1]]) if ngModelCtrl.$modelValue == object[data[0]][data[1]]
|
31
30
|
callFunctions = []
|
32
31
|
for callFunction in functions
|
33
32
|
callFunctions.push(callFunction + ',' + JSON.stringify(returnData) + ')') if callFunction.length > 0
|
34
|
-
|
33
|
+
scope.$eval( callFunctions.join('') ) if callFunctions.join('').length > 0
|
@@ -5,10 +5,11 @@ angular.module 'NgCreate', ['Factories', 'FactoryName']
|
|
5
5
|
link: (scope, element, attributes) ->
|
6
6
|
element.bind 'click', (event) ->
|
7
7
|
[parentName, listName] = attributes.ngContext.split('.') if attributes.ngContext
|
8
|
-
attr = eval('(' + attributes.ngAttributes + ')') || {}
|
8
|
+
attr = scope.$eval('(' + attributes.ngAttributes + ')') || {}
|
9
9
|
scope.create(attributes.ngCreate,parentName,listName,attr)
|
10
|
-
controller: ($scope, $injector, factoryName) ->
|
10
|
+
controller: ($scope, $injector, factoryName, $element) ->
|
11
11
|
$scope.create = (modelName,parentName,listName,attributes) ->
|
12
|
+
addTo = $element[0].attributes['ng-add-to'].value if $element[0].attributes['ng-add-to']
|
12
13
|
factory = factoryName(modelName)
|
13
14
|
list = $injector.get(factory)
|
14
15
|
object = {}
|
@@ -17,6 +18,8 @@ angular.module 'NgCreate', ['Factories', 'FactoryName']
|
|
17
18
|
object[parentName] = $scope[parentName] unless parentName.indexOf('_id') < 0
|
18
19
|
object[parentName + '_id'] = $scope[parentName].id if parentName.indexOf('_id') < 0
|
19
20
|
list.create object, (returnData) ->
|
21
|
+
if addTo
|
22
|
+
$scope[addTo].push(returnData)
|
20
23
|
if listName
|
21
24
|
scope = if $scope[parentName] then $scope else $scope.$parent
|
22
25
|
scope[parentName] = {} unless scope[parentName]
|
@@ -60,3 +60,79 @@ angular.module 'NgUpdate', ['Factories', 'FactoryName']
|
|
60
60
|
for callFunction in functions
|
61
61
|
callFunctions.push(callFunction + ',' + JSON.stringify(returnData) + ')') if callFunction.length > 0
|
62
62
|
$scope.$eval( callFunctions.join('') ) if callFunctions.join('').length > 0
|
63
|
+
|
64
|
+
.directive 'mdUpdate', ($timeout, factoryName, $injector) ->
|
65
|
+
restrict: 'A'
|
66
|
+
require: 'ngModel'
|
67
|
+
|
68
|
+
link: (scope, element, attributes, ngModelCtrl) ->
|
69
|
+
modelName = attributes.ngModel
|
70
|
+
watcher = ->
|
71
|
+
scope.$watch modelName, (updated,old) ->
|
72
|
+
update(updated) unless updated == old
|
73
|
+
equiv = (left,right) ->
|
74
|
+
return true if left == right
|
75
|
+
return true if (!!left && !!right) == false
|
76
|
+
false
|
77
|
+
|
78
|
+
update = (value) ->
|
79
|
+
override = if attributes.ngOverride then attributes.ngOverride.split('.') else []
|
80
|
+
functions = if attributes.ngCallback then attributes.ngCallback.split(';') else []
|
81
|
+
trackby = if attributes.ngTrackBy then attributes.ngTrackBy.split(';') else []
|
82
|
+
data = modelName.split('.')
|
83
|
+
factory = factoryName(override[0] || data[0])
|
84
|
+
if override[1]
|
85
|
+
object = {id: scope.$eval(override[0]).id}
|
86
|
+
object[override[1]] = scope.$eval(override[1])
|
87
|
+
else
|
88
|
+
object = {id: scope[data[0]]['id']}
|
89
|
+
object[data[0]] = {id: scope[data[0]]['id']}
|
90
|
+
object[data[0]][data[1]] = scope[data[0]][data[1]]
|
91
|
+
list = $injector.get(factory)
|
92
|
+
|
93
|
+
list.update object, (returnData) ->
|
94
|
+
for tracked in trackby
|
95
|
+
scope[data[0]][tracked] = returnData[tracked]
|
96
|
+
scope[data[0]][data[1]] = returnData[data[1]] if equiv(scope[data[0]][data[1]], object[data[0]][data[1]]) && !equiv(scope[data[0]][data[1]], returnData[data[1]])
|
97
|
+
scope[data[0]].errors = returnData.errors
|
98
|
+
callFunctions = []
|
99
|
+
for callFunction in functions
|
100
|
+
[match,func,args] = callFunction.match(/(.*)\((.*)\)/)
|
101
|
+
if typeof scope[func] == 'function'
|
102
|
+
scope[func](args,returnData)
|
103
|
+
else if typeof window[func] == 'function'
|
104
|
+
window[func](args,returnData)
|
105
|
+
if element[0].tagName == 'INPUT'
|
106
|
+
if attributes.type == 'radio' || attributes.type == 'checkbox' || attributes.type == 'date'
|
107
|
+
element.bind 'input', (event) ->
|
108
|
+
return unless ngModelCtrl.$valid
|
109
|
+
update(element.val())
|
110
|
+
else if attributes.type == 'hidden'
|
111
|
+
watcher()
|
112
|
+
else
|
113
|
+
oldValue = null
|
114
|
+
element.bind 'focus', ->
|
115
|
+
scope.$apply ->
|
116
|
+
oldValue = element.val()
|
117
|
+
element.bind 'blur', (event) ->
|
118
|
+
delay = if element.hasClass('autocomplete') then 300 else 0
|
119
|
+
$timeout ->
|
120
|
+
scope.$apply ->
|
121
|
+
newValue = element.val()
|
122
|
+
update(newValue) if (newValue != oldValue)
|
123
|
+
, delay
|
124
|
+
else if element[0].tagName == 'TEXTAREA'
|
125
|
+
element.bind 'keyup', ->
|
126
|
+
$timeout.cancel(scope.debounce)
|
127
|
+
scope.debounce = $timeout ->
|
128
|
+
update(element.val())
|
129
|
+
,750
|
130
|
+
else
|
131
|
+
watcher()
|
132
|
+
if element[0].attributes['placeholder']
|
133
|
+
placeholder = element[0].attributes['placeholder'].value
|
134
|
+
else
|
135
|
+
placeholder = ''
|
136
|
+
for word in modelName.split('.').pop().split('_')
|
137
|
+
placeholder += word[0].toUpperCase() + word[1..-1].toLowerCase() + ' '
|
138
|
+
element.attr('placeholder',placeholder)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# //= require angular
|
2
2
|
# //= require angular-route
|
3
3
|
# //= require angular-resource
|
4
|
+
# //= require angular-messages
|
4
5
|
# //= require angular-animate
|
5
6
|
# //= require angular-aria
|
6
7
|
# //= require angular-material.min
|
@@ -10,8 +11,10 @@
|
|
10
11
|
# //= require js-routes
|
11
12
|
# //= require dateconverter
|
12
13
|
# //= require ajax_errors
|
14
|
+
# //= require identifier_interceptor
|
13
15
|
|
14
16
|
angular.module('materialRaingular', ['AutoComplete', 'NgDownload', 'NgChangeOnBlur', 'NgDrag', 'NgAuthorize'
|
15
17
|
'NgRepeatList', 'NgUpdate', 'NgPopup', 'NgBoolean', 'Table', 'NgWatchShow'
|
16
18
|
'NgUpload', 'NgDestroy', 'NgCreate', 'Video','NgAuthorize', 'TextArea'
|
17
|
-
'NgSlide', 'NgMatches','NgFade','NgSwipe', 'NgLoad', 'NgWatchContent'
|
19
|
+
'NgSlide', 'NgMatches','NgFade','NgSwipe', 'NgLoad', 'NgWatchContent'
|
20
|
+
'ngRoute', 'ngMaterial', 'ngMessages', 'ngResource'])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: material_raingular
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2.alpha
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Moody
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- Rakefile
|
70
70
|
- lib/assets/javascripts/ajax_errors.js.coffee
|
71
71
|
- lib/assets/javascripts/dateconverter.coffee
|
72
|
+
- lib/assets/javascripts/dateparser.coffee
|
72
73
|
- lib/assets/javascripts/directives/ngauthorize.js.coffee
|
73
74
|
- lib/assets/javascripts/directives/ngautocomplete.js.coffee
|
74
75
|
- lib/assets/javascripts/directives/ngboolean.js.coffee
|
@@ -92,6 +93,7 @@ files:
|
|
92
93
|
- lib/assets/javascripts/directives/textarea.coffee
|
93
94
|
- lib/assets/javascripts/directives/video.js.coffee
|
94
95
|
- lib/assets/javascripts/factory_name.js.coffee
|
96
|
+
- lib/assets/javascripts/identifier_interceptor.js.coffee
|
95
97
|
- lib/assets/javascripts/material_raingular.js.coffee
|
96
98
|
- lib/material_raingular.rb
|
97
99
|
- lib/material_raingular/version.rb
|