abstracted 0.2.2 → 0.2.5

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.
@@ -0,0 +1,125 @@
1
+ # this var holds whatever HTML has been parked
2
+ # to make room for a loader
3
+ #
4
+ class App.Shared
5
+ # constructor: (@el) ->
6
+ # # initialize some stuff
7
+ # # it will be re-instated with releaseLoader
8
+ loaded_html = ""
9
+ loaded_element = ""
10
+
11
+
12
+
13
+ getDownload: (xhr,data) ->
14
+ # Check if a filename is existing on the response headers.
15
+ filename = ""
16
+ disposition = xhr.getResponseHeader("Content-Disposition")
17
+ if disposition && disposition.indexOf("attachment") != -1
18
+ filenameRegex = /filename[^;=\n]*=(([""]).*?\2|[^;\n]*)/
19
+ matches = filenameRegex.exec(disposition)
20
+ if matches != null && matches[1]
21
+ filename = matches[1].replace(/[""]/g, "")
22
+ #
23
+ type = xhr.getResponseHeader("Content-Type")
24
+ console.log 'getDownload ' + type
25
+ blob = new Blob([data], {type: type})
26
+ #
27
+ if typeof window.navigator.msSaveBlob != "undefined"
28
+ # // IE workaround for "HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed.
29
+ window.navigator.msSaveBlob(blob, filename)
30
+ else
31
+ URL = window.URL || window.webkitURL
32
+ downloadUrl = URL.createObjectURL(blob)
33
+ downloadUrl.oneTimeOnly = true
34
+ #
35
+ if filename
36
+ # // Use HTML5 a[download] attribute to specify filename.
37
+ a = document.createElement("a")
38
+ # // Safari doesn"t support this yet.
39
+ if typeof a.download == "undefined"
40
+ window.location = downloadUrl
41
+ else
42
+ a.href = downloadUrl
43
+ a.download = filename
44
+ document.body.appendChild(a)
45
+ a.click()
46
+ else
47
+ window.location = downloadUrl
48
+
49
+ # cloneObject will make a copy of an object - not a copy of the reference
50
+ # to some object!
51
+ #
52
+ # var obj1= {bla:'blabla',foo:'foofoo',etc:'etc'};
53
+ # var obj2= new cloneObject(obj1);
54
+ #
55
+ # 03-07-2015 (whd) not sure whether this method is OK!!!!
56
+ # cp'ed from: http://scriptcult.com/subcategory_1/article_414-copy-or-clone-javascript-array-object
57
+ #
58
+ cloneObject: (source) ->
59
+ for i in source
60
+ if typeof source[i] == 'source'
61
+ this[i] = new cloneObject source[i]
62
+ else
63
+ this[i] = source[i]
64
+
65
+
66
+
67
+ #
68
+ # set a loader - see http://materializecss.com/preloader.html
69
+ # for examples
70
+ #
71
+ setLoader: (elem,html) =>
72
+ html ||= '<div class="progress"><div class="indeterminate"></div></div>'
73
+ loaded_element = $(elem)
74
+ loaded_html = elem.html()
75
+ elem.html(html)
76
+ return loaded_html
77
+
78
+ #
79
+ # release the loader
80
+ #
81
+ releaseLoader: (elem=null) =>
82
+ elem ||= loaded_element
83
+ $(elem).html(loaded_html)
84
+
85
+ tellResponse: (msg,anchor='.message_container',fade=15000,selector='.alert') ->
86
+ $(anchor).prepend(msg)
87
+ if fade>0
88
+ fadeItOut $(anchor).find(selector), 15000
89
+
90
+ reportError: (msg) ->
91
+ Materialize.toast( msg, 4500, 'red lighten-3')
92
+
93
+
94
+ #
95
+ # fadeItOut will fade an element out with a preset or
96
+ # supplied delay
97
+ #
98
+ fadeItOut: (e,delay=3500) ->
99
+ $(e).delay( delay ).fadeOut( 1000 )
100
+
101
+ #
102
+ # dataArgumentOn constructs the data: argument on AJAX calls
103
+ # from what ever data- attributes an element holds
104
+ #
105
+ # excemptions: data-id, data-remote, data-ajax, data-method, data-type and data-url
106
+ #
107
+ dataArgumentOn: (elem) ->
108
+ $(elem).data()
109
+ # try
110
+ #
111
+ # swal( 'pageOnLoad', 'pageOnLoad blev kaldt!', 'success')
112
+ #
113
+ # catch error
114
+ # console.log 'ok - giving up'
115
+ # console.log 'page loaded!'
116
+
117
+ #
118
+ # check to see iff this browser supperts the File APIs
119
+ #
120
+ fileApiSupportCheck: () ->
121
+ if (window.File && window.FileReader && window.FileList && window.Blob)
122
+ # All the File APIs are supported.
123
+ console.log 'file APIs supported '
124
+ else
125
+ document.getElementById('message_container').innerHTML = '<div class="alert fade in alert-warning"><a href="#!" class="warning close-notice btn-floating btn-small waves-effect waves-light" aria-hidden="true" type="button" data-dismiss="alert"><i class="material-icons">close</i></a>This browser does not support this application fully! Use latest Chrome - or advance cautiously!</div>';
@@ -0,0 +1,32 @@
1
+ class App.SweetAlert
2
+ constructor: (@el) ->
3
+ # initialize some stuff
4
+
5
+
6
+ #
7
+ # initializeSweetAlert
8
+ # initializes the sweetalert prompt
9
+ #
10
+ initializeSweetAlert: () ->
11
+ try
12
+ # console.log 'sweet alert initializing...'
13
+ # sweetHTML = '<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert" tabIndex="-1"><div class="icon error"><span class="x-mark"><span class="line left"></span><span class="line right"></span></span></div><div class="icon warning"> <span class="body"></span> <span class="dot"></span> </div> <div class="icon info"></div> <div class="icon success"> <span class="line tip"></span> <span class="line long"></span> <div class="placeholder"></div> <div class="fix"></div> </div> <div class="icon custom"></div> <h2>Title</h2><p>Text</p><button class="cancel" tabIndex="2">Cancel</button><button class="confirm" tabIndex="1">OK</button></div>'
14
+ # sweetWrap = document.createElement('div')
15
+ # sweetWrap.innerHTML = sweetHTML
16
+ # $(document.body).append(sweetWrap)
17
+ # console.log 'sweetalert initialized!'
18
+ catch error
19
+ console.log 'sweetalert says: ' + error
20
+
21
+
22
+ prepare: ->
23
+
24
+ try
25
+ if ($('.sweet-alert').length<1)
26
+ @initializeSweetAlert()
27
+ if ($('.sweet-alert').length>0)
28
+ console.log 'sweet-alert initialized correctly!' #swal( 'pageOnLoad', 'pageOnLoad blev kaldt!', 'success')
29
+
30
+ catch error
31
+ alert 'App.Materialize did not prepare!'
32
+ console.log error
@@ -0,0 +1,23 @@
1
+ #
2
+ # start looking on App.trigger 'ctrlf'
3
+ # looking for search-key - CTRL-F
4
+ #
5
+ $(App).on 'ctrlf', ->
6
+
7
+ #
8
+ # watch out for search key - CTRL-F
9
+ $(document).keypress (e) ->
10
+ if (e.which==6)
11
+ checkWebkitandIE=1
12
+ else
13
+ checkWebkitandIE=0
14
+
15
+ if (e.which==102 && e.ctrlKey)
16
+ checkMoz=1
17
+ else
18
+ checkMoz=0
19
+
20
+ if (checkWebkitandIE || checkMoz)
21
+ if $('input.search-list')
22
+ $('input.search-list').focus()
23
+ # console.log e
@@ -9,18 +9,30 @@ App.trigger = (event) ->
9
9
  $(App).trigger(event)
10
10
 
11
11
  #
12
- #
12
+ # signal App
13
13
  App.init = ->
14
14
  #
15
- # $( document ).trigger( "page:change" )
16
- #
17
- # $(document).on 'page:change', ->
18
- # console.log 'page changed on event'
19
15
  App.trigger('app:init')
20
- console.log 'app initialized'
21
-
16
+ #
17
+ # Try to keep users from double-clicking submit's
18
+ #
19
+ # document.addEventListener('DOMContentLoaded', disableMultipleSubmits, false);
20
+
21
+ #
22
+ # Prepare close-notice's for acting on clicks to remove div
23
+ #
24
+ $(document.body).unbind('click.close_notice')
25
+ $(document.body).on 'click.close_notice', 'a.close-notice', App.closeNotice
26
+
27
+
22
28
  #
23
- # standard triggers - and actions
29
+ # signal a pageload
30
+ App.pageload = ->
31
+ App.trigger('app:pageload')
32
+
33
+
24
34
  #
25
- $(App).on 'app:modal:open', ->
26
- window.ReactRailsUJS.mountComponents()
35
+ # closeNotice
36
+ # will close the notice DIV
37
+ App.closeNotice = (e) ->
38
+ fadeItOut $(e).closest('.alert') #.remove()
@@ -0,0 +1,34 @@
1
+
2
+ #
3
+ # standard triggers - and actions
4
+ #
5
+ $(App).on 'app:modal:open', ->
6
+ #
7
+ # mount React Components laying dormant in a modal
8
+ window.ReactRailsUJS.mountComponents()
9
+ App.trigger('app:pageload')
10
+
11
+ $(App).on 'app:pageload', ->
12
+ page = new App.Materialize()
13
+ page.prepare()
14
+ sweet = new App.SweetAlert()
15
+ sweet.prepare()
16
+ if $('table.resources_table')
17
+ rl = new App.ResourcesList($('form'))
18
+ rl.prepare()
19
+ rs = new App.ResourceForm()
20
+ rs.prepare()
21
+ fab = new App.fabDelete()
22
+ fab.prepare()
23
+
24
+ #
25
+ # PageOnChange really just calls a pageload - as of now 19-06-15
26
+ # fixed elements like SELECT's, Materialized's elements, et al.
27
+ #
28
+ # @pageOnChange = () ->
29
+ # console.log 'page changed '
30
+ # pageOnLoad()
31
+ #
32
+ # call the App.pageload
33
+ $(document).on 'page:change', ->
34
+ App.pageload()
@@ -1,3 +1,3 @@
1
1
  module Abstracted
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abstracted
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Walther H Diechmann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-05 00:00:00.000000000 Z
11
+ date: 2016-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -270,10 +270,16 @@ files:
270
270
  - app/assets/images/abstracted/.keep
271
271
  - app/assets/javascripts/abstract_resources.js
272
272
  - app/assets/javascripts/abstracted/.keep
273
- - app/assets/javascripts/crud.js.coffee
273
+ - app/assets/javascripts/abstracted/app.fab_delete.coffee
274
+ - app/assets/javascripts/abstracted/app.materialize.coffee
275
+ - app/assets/javascripts/abstracted/app.resource_form.coffee
276
+ - app/assets/javascripts/abstracted/app.resources_list.coffee
277
+ - app/assets/javascripts/abstracted/app.shared.coffee
278
+ - app/assets/javascripts/abstracted/app.sweetalert.coffee
279
+ - app/assets/javascripts/abstracted/keypress.coffee
274
280
  - app/assets/javascripts/init.js.coffee
275
- - app/assets/javascripts/initializers.js.coffee
276
281
  - app/assets/javascripts/pagescrolling.js.coffee
282
+ - app/assets/javascripts/triggers.coffee
277
283
  - app/assets/stylesheets/abstract_resources.css
278
284
  - app/assets/stylesheets/abstracted/.keep
279
285
  - app/assets/stylesheets/scaffold.css
@@ -1,194 +0,0 @@
1
- #
2
- # searchPost handles ordering search on index actions
3
- #
4
- @orderSearch = (url,query) ->
5
- loader = '<div class="preloader-wrapper small active"> <div class="spinner-layer spinner-blue-only"> <div class="circle-clipper left"> <div class="circle"></div> </div><div class="gap-patch"> <div class="circle"></div> </div><div class="circle-clipper right"> <div class="circle"></div> </div> </div> </div>'
6
- loaded_element = $('.fixed-action-btn')
7
- setLoader( loaded_element,loader )
8
- window.location.href= url + '?q=' + encodeURIComponent(query)
9
-
10
- #
11
- # deletePost handles deleting records
12
- #
13
- # dependencies:
14
- # sweetalert
15
- #
16
- # data-url="", data-id="" - eg.
17
- @deletePost = ($elem) ->
18
- try
19
- url = $elem.data('url') + "/" + $elem.data('id') + ".js"
20
- $remove = $($elem.data('remove'))
21
- request = $.ajax
22
- url: url,
23
- type: "delete",
24
- dataType: 'html'
25
- .done (data) ->
26
- if $remove
27
- $remove.hide()
28
- closeSweetAlert($elem)
29
- #swal("Deleted!", "Your file was successfully deleted!", "success")
30
- .error (data) ->
31
- $elem.show()
32
- swal("Oops", "We couldn't connect to the server!", "error")
33
- #
34
- # statusCode:
35
- #
36
- # 200: (response,textStatus,jqXHR) ->
37
- # closeSweetAlert()
38
- # tellResponse response.responseText
39
- #
40
- #
41
- # 301: () ->
42
- # $elem.show()
43
- # closeSweetAlert()
44
- # swal "Ikke slettet!", "Posten blev ikke slettet - årsagen ikke kendt", "warning"
45
- #
46
- # 401: (response) ->
47
- # tellResponse response.responseText
48
- # closeSweetAlert()
49
- #
50
- # 409: (response) ->
51
- # tellResponse response.responseText
52
- # closeSweetAlert()
53
- #
54
- # 412: () ->
55
- # closeSweetAlert()
56
- # swal "Øv!", "Et eller andet gik galt!", "error"
57
-
58
- catch error
59
- swal "Hmmm", "Most unexpected! \n#{error}", "error"
60
-
61
- #
62
- # printPost handles printing posts either way
63
- #
64
- # dependencies
65
- #
66
- #
67
- #
68
- #
69
- # <a
70
- # class="print_post_link"
71
- # data-ajax="get"
72
- # data-remote="false"
73
- # data-method="get"
74
- # data-download="true" -- if is is a file which we should send!
75
- # data-url="/stock_items/1/print.js"
76
- # data-oxremote="true"
77
- # data-name="2"
78
- # data-id="1"
79
- # data-paper="label"
80
- # data-message-ok="Udskrivning af Labels bestilt!"
81
- # data-message-error="øv"
82
- # href="http://localhost:3000/stock_items/1/print">
83
- # <i class="material-icons small" title="Udskriv labels">label</i>
84
- # </a>
85
- #
86
- # data-url="", data-id="", data-print-action="", data-message-ok="", data-message-error=""
87
- @printPost = (elem) ->
88
- elem = $(elem)
89
- url = elem.data('url') || elem.attr('href')
90
- if elem.data('browser')=='new'
91
- releaseLoader()
92
- window.open url + '?' + $.param dataArgumentOn(elem)
93
- return
94
-
95
- oxremote = elem.data('oxremote')
96
- if oxremote=='false'
97
- switch elem.data('method')
98
- when 'post', 'POST'
99
- # elem.closest('form').submit()
100
- $('form').submit()
101
- when 'put', 'PUT'
102
- console.log 'how do I put? add code in abstracted/app/assets/javascripts/initializers.js.coffee'
103
- when 'get', 'GET'
104
- window.location.href = elem.data('url')
105
- else
106
- try
107
- jqxhr = $.ajax
108
- url: elem.data('url') || elem.attr('href')
109
- type: elem.data('method') || 'get'
110
- data: dataArgumentOn(elem)
111
- dataType: elem.data('type') || 'html'
112
- .done (data) ->
113
- releaseLoader()
114
- if elem.data('download')
115
- getDownload(jqxhr,data)
116
- else
117
- $(document.body).append(data)
118
-
119
- .fail (response,status) ->
120
- releaseLoader()
121
- if jqxhr.state=='rejected'
122
- reportError('Der er ingen forbindelse til serveren - prøv lidt senere!')
123
- else
124
- $(document.body).append(response.responseText)
125
-
126
- catch e
127
- console.log e
128
-
129
- return false
130
-
131
- @getDownload = (xhr,data) ->
132
- # Check if a filename is existing on the response headers.
133
- filename = ""
134
- disposition = xhr.getResponseHeader("Content-Disposition")
135
- if disposition && disposition.indexOf("attachment") != -1
136
- filenameRegex = /filename[^;=\n]*=(([""]).*?\2|[^;\n]*)/
137
- matches = filenameRegex.exec(disposition)
138
- if matches != null && matches[1]
139
- filename = matches[1].replace(/[""]/g, "")
140
- #
141
- type = xhr.getResponseHeader("Content-Type")
142
- console.log 'getDownload ' + type
143
- blob = new Blob([data], {type: type})
144
- #
145
- if typeof window.navigator.msSaveBlob != "undefined"
146
- # // IE workaround for "HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed.
147
- window.navigator.msSaveBlob(blob, filename)
148
- else
149
- URL = window.URL || window.webkitURL
150
- downloadUrl = URL.createObjectURL(blob)
151
- downloadUrl.oneTimeOnly = true
152
- #
153
- if filename
154
- # // Use HTML5 a[download] attribute to specify filename.
155
- a = document.createElement("a")
156
- # // Safari doesn"t support this yet.
157
- if typeof a.download == "undefined"
158
- window.location = downloadUrl
159
- else
160
- a.href = downloadUrl
161
- a.download = filename
162
- document.body.appendChild(a)
163
- a.click()
164
- else
165
- window.location = downloadUrl
166
-
167
- #
168
- # setTimeout () ->
169
- # URL.revokeObjectURL(downloadUrl)
170
- # , 100
171
- #
172
- #
173
- #
174
- # blob=new Blob([data])
175
- # link=document.createElement('a')
176
- # link.href=window.URL.createObjectURL(blob)
177
- # # link.target='_blank';
178
- # link.download="oxen_"+new Date()+".pdf"
179
- # link.click()
180
-
181
- # @printPost = ($elem) ->
182
- # try
183
- # url = $elem.data('url') + "/" + $elem.data('id') + '/' + $elem.data('print-action') + ".js"
184
- # request = $.ajax
185
- # url: url,
186
- # type: "post",
187
- # data: $elem.data('data'),
188
- # dataType: 'html'
189
- # .done (data) ->
190
- # releaseLoader($elem.closest('.loader_container'))
191
- # $(document.body).append(data)
192
- # .error (data) ->
193
- # releaseLoader($elem.closest('.loader_container'))
194
- # $(document.body).append(data)