simditor-rails 1.0.1 → 1.0.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.
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
-