simditor-rails 1.0.1 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simditor-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hsu Pan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-31 00:00:00.000000000 Z
11
+ date: 2014-08-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Rails assets wrapper for https://github.com/mycolorway/simditor
14
14
  email:
@@ -18,11 +18,13 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - lib/simditor-rails.rb
21
+ - lib/simditor-rails/engine.rb
21
22
  - lib/simditor-rails/version.rb
23
+ - vendor/assets/images/loading-upload.gif
22
24
  - vendor/assets/javascripts/simditor.js
23
- - vendor/assets/javascripts/simditor/module.coffee
25
+ - vendor/assets/javascripts/simditor/module.js
24
26
  - vendor/assets/javascripts/simditor/simditor.coffee
25
- - vendor/assets/javascripts/simditor/uploader.coffee
27
+ - vendor/assets/javascripts/simditor/uploader.js
26
28
  - vendor/assets/stylesheets/simditor.scss
27
29
  homepage: https://github.com/cqpx/simditor-rails
28
30
  licenses: []
@@ -1,80 +0,0 @@
1
- class Module
2
-
3
- @extend: (obj) ->
4
- return unless obj? and typeof obj is 'object'
5
- for key, val of obj when key not in ['included', 'extended']
6
- @[key] = val
7
- obj.extended?.call(@)
8
-
9
- @include: (obj) ->
10
- return unless obj? and typeof obj is 'object'
11
- for key, val of obj when key not in ['included', 'extended']
12
- @::[key] = val
13
- obj.included?.call(@)
14
-
15
- on: (args...) ->
16
- $(@).on args...
17
-
18
- one: (args...) ->
19
- $(@).one args...
20
-
21
- off: (args...) ->
22
- $(@).off args...
23
-
24
- trigger: (args...) ->
25
- $(@).trigger args...
26
-
27
- triggerHandler: (args...) ->
28
- $(@).triggerHandler args...
29
-
30
-
31
- class Widget extends Module
32
-
33
- @connect: (cls) ->
34
- return unless typeof cls is 'function'
35
-
36
- unless cls.className
37
- throw new Error 'Widget.connect: lack of class property "className"'
38
- return
39
-
40
- @_connectedClasses = [] unless @_connectedClasses
41
- @_connectedClasses.push(cls)
42
- @[cls.className] = cls if cls.className
43
-
44
- _init: ->
45
-
46
- opts: {}
47
-
48
- constructor: (opts) ->
49
- @opts = $.extend({}, @opts, opts)
50
-
51
- @constructor._connectedClasses ||= []
52
-
53
- instances = for cls in @constructor._connectedClasses
54
- name = cls.className.charAt(0).toLowerCase() + cls.className.slice(1)
55
- @[name] = new cls(@)
56
-
57
- @_init()
58
-
59
- instance._init?() for instance in instances
60
-
61
- @trigger 'pluginconnected'
62
-
63
- destroy: ->
64
-
65
-
66
- class Plugin extends Module
67
-
68
- @className: 'Plugin'
69
-
70
- opts: {}
71
-
72
- constructor: (@widget) ->
73
- @opts = $.extend({}, @opts, @widget.opts)
74
-
75
- _init: ->
76
-
77
-
78
- window.Module = Module
79
- window.Widget = Widget
80
- window.Plugin = Plugin
@@ -1,228 +0,0 @@
1
-
2
- class Uploader extends Module
3
-
4
- @count: 0
5
-
6
- opts:
7
- url: ''
8
- params: null
9
- connectionCount: 3
10
- leaveConfirm: '正在上传文件,如果离开上传会自动取消'
11
-
12
- files: [] #files being uploaded
13
-
14
- queue: [] #files waiting to be uploaded
15
-
16
- html5: !!(window.File && window.FileList)
17
-
18
- constructor: (opts = {}) ->
19
- $.extend(@opts, opts)
20
- @id = ++ Uploader.count
21
-
22
- # upload the files in the queue
23
- @on 'uploadcomplete', (e, file) =>
24
- @files.splice($.inArray(file, @files), 1)
25
- if @queue.length > 0 and @files.length < @opts.connectionCount
26
- @upload @queue.shift()
27
- else
28
- @uploading = false
29
-
30
- # confirm to leave page while uploading
31
- $(window).on 'beforeunload.uploader-' + @id, (e) =>
32
- return unless @uploading
33
-
34
- # for ie
35
- # TODO firefox can not set the string
36
- e.originalEvent.returnValue = @opts.leaveConfirm
37
- # for webkit
38
- return @opts.leaveConfirm
39
-
40
- generateId: (->
41
- id = 0
42
- return ->
43
- id += 1
44
- )()
45
-
46
- upload: (file, opts = {}) ->
47
- return unless file?
48
-
49
- if $.isArray file
50
- @upload(f, opts) for f in file
51
- else if $(file).is('input:file') and @html5
52
- @upload($.makeArray($(file)[0].files), opts)
53
- else if !file.id or !file.obj
54
- file = @getFile file
55
-
56
- return unless file and file.obj
57
-
58
- $.extend(file, opts)
59
-
60
- if @files.length >= @opts.connectionCount
61
- @queue.push file
62
- return
63
-
64
- return if @triggerHandler('beforeupload', [file]) == false
65
-
66
- @files.push file
67
- if @html5
68
- @xhrUpload file
69
- else
70
- @iframeUpload file
71
-
72
- @uploading = true
73
-
74
- getFile: (fileObj) ->
75
- if fileObj instanceof window.File or fileObj instanceof window.Blob
76
- name = fileObj.fileName ? fileObj.name
77
- else if $(fileObj).is('input:file')
78
- name = $input.val().replace(/.*(\/|\\)/, "")
79
- fileObj = $(fileObj).clone()
80
- else
81
- return null
82
-
83
- id: @generateId()
84
- url: @opts.url
85
- params: @opts.params
86
- name: name
87
- size: fileObj.fileSize ? fileObj.size
88
- ext: if name then name.split('.').pop().toLowerCase() else ''
89
- obj: fileObj
90
-
91
- xhrUpload: (file) ->
92
- formData = new FormData()
93
- formData.append("upload_file", file.obj)
94
- formData.append("original_filename", file.name)
95
- formData.append(k, v) for k, v of file.params if file.params
96
-
97
- file.xhr = $.ajax
98
- url: file.url
99
- data: formData
100
- processData: false
101
- contentType: false
102
- type: 'POST'
103
- headers:
104
- 'X-File-Name': encodeURIComponent(file.name)
105
- xhr: ->
106
- req = $.ajaxSettings.xhr()
107
- if req
108
- req.upload.onprogress = (e) =>
109
- @progress(e)
110
- req
111
- progress: (e) =>
112
- return unless e.lengthComputable
113
- @trigger 'uploadprogress', [file, e.loaded, e.total]
114
- error: (xhr, status, err) =>
115
- @trigger 'uploaderror', [file, xhr, status]
116
- success: (result) =>
117
- @trigger 'uploadprogress', [file, file.size, file.size]
118
- @trigger 'uploadsuccess', [file, result]
119
- complete: (xhr, status) =>
120
- @trigger 'uploadcomplete', [file, xhr.responseText]
121
-
122
- iframeUpload: (file) ->
123
- file.iframe = $('iframe', {
124
- src: 'javascript:false;',
125
- name: 'uploader-' + file.id
126
- }).hide()
127
- .appendTo(document.body)
128
-
129
- file.form = $('<form/>', {
130
- method: 'post',
131
- enctype: 'multipart/form-data',
132
- action: file.url,
133
- target: file.iframe[0].name
134
- }).hide()
135
- .append(file.obj)
136
- .appendTo(document.body)
137
-
138
- if file.params
139
- for k, v of file.params
140
- $('<input/>', {
141
- type: 'hidden',
142
- name: k,
143
- value: v
144
- }).appendTo(form)
145
-
146
- file.iframe.on 'load', =>
147
- # when we remove iframe from dom
148
- # the request stops, but in IE load
149
- # event fires
150
- return unless iframe.parent().length > 0
151
-
152
- iframeDoc = iframe[0].contentDocument
153
-
154
- # In Opera event is fired second time
155
- # when body.innerHTML changed from false
156
- # to server response approx. after 1 sec
157
- # when we upload file with iframe
158
- return if iframeDoc and iframeDoc.body and iframeDoc.body.innerHTML == "false"
159
-
160
- # 当返回的JSON中存在html片段时,需要做这个hack
161
- # json-response是一个script标签
162
- # TODO: 简化服务器端的操作
163
- responseEl = iframeDoc.getElementById('json-response')
164
- json = if responseEl then responseEl.innerHTML else iframeDoc.body.innerHTML
165
-
166
- try
167
- result = $.parseJSON json
168
- catch error
169
- @trigger 'uploaderror', [file, null, 'parsererror']
170
- result = {}
171
-
172
- if result.success
173
- @trigger 'uploadsuccess', [file, result]
174
-
175
- @trigger 'uploadcomplete', [file, result]
176
- file.iframe.remove()
177
-
178
- file.form.submit().remove()
179
-
180
- cancel: (file) ->
181
- unless file.id
182
- for f in @files
183
- if f.id == file
184
- file = f
185
- break
186
-
187
- @trigger 'uploadcancel', [file]
188
-
189
- if @html5
190
- # abort xhr will trigger complete event automatically
191
- file.xhr.abort() if file.xhr
192
- file.xhr = null
193
- else
194
- file.iframe
195
- .attr('src', 'javascript:false;')
196
- .remove()
197
- @trigger 'uploadcomplete', [file]
198
-
199
- readImageFile: (fileObj, callback) ->
200
- return unless $.isFunction callback
201
-
202
- img = new Image()
203
- img.onload = ->
204
- callback img
205
- img.onerror = ->
206
- callback()
207
-
208
- if window.FileReader && FileReader.prototype.readAsDataURL && /^image/.test(fileObj.type)
209
- fileReader = new FileReader()
210
- fileReader.onload = (e) ->
211
- img.src = e.target.result
212
- fileReader.readAsDataURL fileObj
213
- else
214
- callback()
215
-
216
- destroy: ->
217
- @queue.length = 0
218
- @cancel file for file in @files
219
- $(window).off '.uploader-' + @id
220
- $(document).off '.uploader-' + @id
221
-
222
-
223
-
224
- window.Uploader = Uploader
225
-
226
-
227
-
228
-