weeler 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/CHANGELOG.md +68 -0
- data/README.md +1 -0
- data/app/.DS_Store +0 -0
- data/app/assets/.DS_Store +0 -0
- data/app/assets/javascripts/.DS_Store +0 -0
- data/app/assets/javascripts/weeler/.DS_Store +0 -0
- data/app/assets/javascripts/weeler/app/index.js +0 -0
- data/app/assets/javascripts/weeler/init.js.coffee +8 -0
- data/app/assets/javascripts/weeler/vendor/.DS_Store +0 -0
- data/app/assets/javascripts/weeler/vendor/bootstrap.file-input.js +122 -0
- data/app/assets/javascripts/weeler/{bootstrap.js → vendor/bootstrap.js} +0 -0
- data/app/assets/javascripts/weeler/{bootstrap.rowlink.js → vendor/bootstrap.rowlink.js} +0 -0
- data/app/assets/javascripts/weeler/{bootstrap.switch.js → vendor/bootstrap.switch.js} +0 -0
- data/app/assets/javascripts/weeler/{jquery.pnotify.js → vendor/jquery.pnotify.js} +0 -0
- data/app/assets/stylesheets/.DS_Store +0 -0
- data/app/assets/stylesheets/weeler/.DS_Store +0 -0
- data/app/assets/stylesheets/weeler/app/index.css +0 -0
- data/app/assets/stylesheets/weeler/init.css.erb +5 -0
- data/app/assets/stylesheets/weeler/{style.css.scss.erb → style.css.scss} +11 -0
- data/app/assets/stylesheets/weeler/{bootstrap.css → vendor/bootstrap.css} +0 -0
- data/app/assets/stylesheets/weeler/{bootstrap.min.css → vendor/bootstrap.min.css} +0 -0
- data/app/assets/stylesheets/weeler/{bootstrap.rowlink.css → vendor/bootstrap.rowlink.css} +0 -0
- data/app/assets/stylesheets/weeler/{bootstrap.spinner.css → vendor/bootstrap.spinner.css} +0 -0
- data/app/assets/stylesheets/weeler/{bootstrap.switch.css → vendor/bootstrap.switch.css} +0 -0
- data/app/assets/stylesheets/weeler/{jquery.pnotify.css → vendor/jquery.pnotify.css} +0 -0
- data/app/controllers/weeler/translations_controller.rb +5 -78
- data/app/views/layouts/weeler/base.html.erb +27 -73
- data/app/views/weeler/shared/_flash.html.erb +17 -0
- data/app/views/weeler/shared/_footer.html.erb +3 -0
- data/app/views/weeler/shared/_header_navbar.html.erb +18 -0
- data/app/views/weeler/shared/_side_navbar.html.erb +14 -0
- data/app/views/weeler/translations/index.html.erb +2 -5
- data/lib/.DS_Store +0 -0
- data/lib/generators/weeler/install_generator.rb +15 -6
- data/lib/generators/weeler/templates/controllers/weeler/example_controller.rb.example +7 -0
- data/lib/generators/weeler/templates/views/weeler/example/index.html.erb +0 -0
- data/lib/i18n/backend/weeler/exporter/active_record.rb +37 -0
- data/lib/i18n/backend/weeler/exporter/active_record_relation.rb +38 -0
- data/lib/i18n/backend/weeler/exporter.rb +18 -0
- data/lib/i18n/backend/weeler/importer.rb +85 -0
- data/lib/i18n/backend/weeler.rb +4 -0
- data/lib/weeler/.DS_Store +0 -0
- data/lib/weeler/route_mapper.rb +1 -1
- data/lib/weeler/version.rb +1 -1
- data/rspec.html +176 -98
- data/spec/.DS_Store +0 -0
- data/spec/controllers/translations_controller_spec.rb +8 -3
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/test.log +49556 -0
- data/spec/fixtures/.DS_Store +0 -0
- data/spec/fixtures/test.xlsx +0 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/weeler/.DS_Store +0 -0
- data/spec/weeler/i18n/.DS_Store +0 -0
- data/spec/weeler/i18n/backend/.DS_Store +0 -0
- data/spec/weeler/i18n/backend/weeler/exporter_spec.rb +72 -0
- data/spec/weeler/i18n/backend/weeler/importer_spec.rb +47 -0
- data/spec/weeler/{i18n_backend_weeler_spec.rb → i18n/backend/weeler_spec.rb} +9 -9
- data/spec/weeler/{i18n_humanize_missing_translations_spec.rb → i18n/humanize_missing_translations_spec.rb} +0 -0
- metadata +46 -21
- data/app/assets/javascripts/weeler/bootstrap-fileupload.js +0 -169
- data/app/assets/javascripts/weeler.js.coffee +0 -8
- data/app/assets/stylesheets/weeler/bootstrap-fileupload.css +0 -132
- data/app/assets/stylesheets/weeler.css +0 -9
Binary file
|
Binary file
|
data/spec/spec_helper.rb
CHANGED
data/spec/weeler/.DS_Store
CHANGED
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe I18n::Backend::Weeler::Exporter do
|
4
|
+
|
5
|
+
describe :as_xlsx_package do
|
6
|
+
|
7
|
+
context "all translations" do
|
8
|
+
before(:all) do
|
9
|
+
I18n::Backend::Weeler::Translation.delete_all
|
10
|
+
I18n.backend.store_translations(:en, foo: {one: 'test'})
|
11
|
+
I18n.backend.store_translations(:en, foo: {two: nil })
|
12
|
+
I18n.backend.store_translations(:lv, foo: {two: "some"})
|
13
|
+
|
14
|
+
@rows = I18n::Backend::Weeler::Translation.all.as_xlsx_package.workbook.worksheets[0].rows
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should have 3 rows" do
|
18
|
+
expect(@rows.size).to be(3)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "first row should be title" do
|
22
|
+
expect(@rows.first.cells[0].value).to eq("Key")
|
23
|
+
expect(@rows.first.cells[1].value).to eq("En")
|
24
|
+
expect(@rows.first.cells[2].value).to eq("Lv")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "other row with one translation" do
|
28
|
+
expect(@rows[1].cells[0].value).to eq("foo.one")
|
29
|
+
expect(@rows[1].cells[1].value).to eq("test")
|
30
|
+
expect(@rows[1].cells[2].value).to eq("")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "other row with two translation" do
|
34
|
+
expect(@rows[2].cells[0].value).to eq("foo.two")
|
35
|
+
expect(@rows[2].cells[1].value).to eq(nil)
|
36
|
+
expect(@rows[2].cells[2].value).to eq("some")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "selected translations" do
|
41
|
+
before(:all) do
|
42
|
+
I18n::Backend::Weeler::Translation.delete_all
|
43
|
+
I18n.backend.store_translations(:en, foo: {one: 'test'})
|
44
|
+
I18n.backend.store_translations(:en, foo: {two: nil })
|
45
|
+
I18n.backend.store_translations(:lv, foo: {two: "some"})
|
46
|
+
|
47
|
+
translations = I18n::Backend::Weeler::Translation.where(key: "foo.one").load
|
48
|
+
translations.size
|
49
|
+
@other_rows = translations.as_xlsx_package.workbook.worksheets[0].rows
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should have 2 rows" do
|
54
|
+
expect(@other_rows.size).to be(2)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "first row should be title" do
|
58
|
+
expect(@other_rows.first.cells[0].value).to eq("Key")
|
59
|
+
expect(@other_rows.first.cells[1].value).to eq("En")
|
60
|
+
expect(@other_rows.first.cells[2].value).to eq("Lv")
|
61
|
+
end
|
62
|
+
|
63
|
+
it "other row with one translation" do
|
64
|
+
expect(@other_rows[1].cells[0].value).to eq("foo.one")
|
65
|
+
expect(@other_rows[1].cells[1].value).to eq("test")
|
66
|
+
expect(@other_rows[1].cells[2].value).to eq("")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe I18n::Backend::Weeler::Importer do
|
4
|
+
|
5
|
+
# This is file with 10 translations and 3 locales.
|
6
|
+
let(:file_path) {File.dirname(__FILE__) + '/../../../../fixtures/test.xlsx'}
|
7
|
+
|
8
|
+
describe :import do
|
9
|
+
|
10
|
+
context "empty db" do
|
11
|
+
before(:each) do
|
12
|
+
I18n::Backend::Weeler::Translation.delete_all
|
13
|
+
I18n::Backend::Weeler::Translation.import file_path
|
14
|
+
end
|
15
|
+
|
16
|
+
it "translation stores all translation in each locale" do
|
17
|
+
expect(I18n::Backend::Weeler::Translation.count).to eq(30)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns value if value is in file" do
|
21
|
+
expect(I18n.t(:"welcome.title", :locale => :lv)).to eq("SveikI!")
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns nil if value is not file" do
|
25
|
+
expect(I18n.t(:"product.list.open", :locale => :en)).to eq("")
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
context "full db" do
|
32
|
+
before(:each) do
|
33
|
+
I18n::Backend::Weeler::Translation.delete_all
|
34
|
+
I18n.backend.store_translations(:en, welcome: {title: 'fooo'})
|
35
|
+
end
|
36
|
+
|
37
|
+
it "file import overrides value" do
|
38
|
+
expect(I18n.t(:"welcome.title", :locale => :en)).to eq("fooo")
|
39
|
+
I18n::Backend::Weeler::Translation.import file_path
|
40
|
+
expect(I18n.t(:"welcome.title", :locale => :en)).to eq("EN welcome")
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -36,21 +36,21 @@ describe I18n::Backend::Weeler do
|
|
36
36
|
|
37
37
|
expect(true_t.value).to be(true)
|
38
38
|
expect(false_t.value).to be(false)
|
39
|
-
|
40
39
|
end
|
41
40
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
41
|
+
it "runs kernel if translation is_proc" do
|
42
|
+
proc = I18n::Backend::Weeler::Translation.create(:key => 'valid', :value => "p 'This ir proc!'", :locale => :en, :is_proc => true)
|
43
|
+
Kernel.should_receive(:p).with("This ir proc!")
|
44
|
+
proc.value
|
45
|
+
end
|
47
46
|
|
48
47
|
end
|
49
48
|
|
50
49
|
describe "#lookup" do
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
it "show warning" do
|
51
|
+
I18n::Backend::Weeler::Translation.should_receive(:warn).with("[DEPRECATION] Giving a separator to Translation.lookup is deprecated. You can change the internal separator by overwriting FLATTEN_SEPARATOR.")
|
52
|
+
I18n::Backend::Weeler::Translation.lookup("foo", "|")
|
53
|
+
end
|
54
54
|
end
|
55
55
|
|
56
56
|
describe "groups" do
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: weeler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artūrs Braučs
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -274,6 +274,7 @@ files:
|
|
274
274
|
- .gitignore
|
275
275
|
- .rspec
|
276
276
|
- .travis.yml
|
277
|
+
- CHANGELOG.md
|
277
278
|
- Gemfile
|
278
279
|
- LICENSE.txt
|
279
280
|
- README.md
|
@@ -281,24 +282,26 @@ files:
|
|
281
282
|
- app/.DS_Store
|
282
283
|
- app/assets/.DS_Store
|
283
284
|
- app/assets/javascripts/.DS_Store
|
284
|
-
- app/assets/javascripts/weeler.js.coffee
|
285
285
|
- app/assets/javascripts/weeler/.DS_Store
|
286
|
-
- app/assets/javascripts/weeler/
|
287
|
-
- app/assets/javascripts/weeler/
|
288
|
-
- app/assets/javascripts/weeler/
|
289
|
-
- app/assets/javascripts/weeler/bootstrap.
|
290
|
-
- app/assets/javascripts/weeler/
|
286
|
+
- app/assets/javascripts/weeler/app/index.js
|
287
|
+
- app/assets/javascripts/weeler/init.js.coffee
|
288
|
+
- app/assets/javascripts/weeler/vendor/.DS_Store
|
289
|
+
- app/assets/javascripts/weeler/vendor/bootstrap.file-input.js
|
290
|
+
- app/assets/javascripts/weeler/vendor/bootstrap.js
|
291
|
+
- app/assets/javascripts/weeler/vendor/bootstrap.rowlink.js
|
292
|
+
- app/assets/javascripts/weeler/vendor/bootstrap.switch.js
|
293
|
+
- app/assets/javascripts/weeler/vendor/jquery.pnotify.js
|
291
294
|
- app/assets/stylesheets/.DS_Store
|
292
|
-
- app/assets/stylesheets/weeler.css
|
293
295
|
- app/assets/stylesheets/weeler/.DS_Store
|
294
|
-
- app/assets/stylesheets/weeler/
|
295
|
-
- app/assets/stylesheets/weeler/
|
296
|
-
- app/assets/stylesheets/weeler/
|
297
|
-
- app/assets/stylesheets/weeler/bootstrap.
|
298
|
-
- app/assets/stylesheets/weeler/bootstrap.
|
299
|
-
- app/assets/stylesheets/weeler/bootstrap.
|
300
|
-
- app/assets/stylesheets/weeler/
|
301
|
-
- app/assets/stylesheets/weeler/
|
296
|
+
- app/assets/stylesheets/weeler/app/index.css
|
297
|
+
- app/assets/stylesheets/weeler/init.css.erb
|
298
|
+
- app/assets/stylesheets/weeler/style.css.scss
|
299
|
+
- app/assets/stylesheets/weeler/vendor/bootstrap.css
|
300
|
+
- app/assets/stylesheets/weeler/vendor/bootstrap.min.css
|
301
|
+
- app/assets/stylesheets/weeler/vendor/bootstrap.rowlink.css
|
302
|
+
- app/assets/stylesheets/weeler/vendor/bootstrap.spinner.css
|
303
|
+
- app/assets/stylesheets/weeler/vendor/bootstrap.switch.css
|
304
|
+
- app/assets/stylesheets/weeler/vendor/jquery.pnotify.css
|
302
305
|
- app/controllers/weeler/base_controller.rb
|
303
306
|
- app/controllers/weeler/home_controller.rb
|
304
307
|
- app/controllers/weeler/translations_controller.rb
|
@@ -312,6 +315,10 @@ files:
|
|
312
315
|
- app/views/layouts/weeler/base.html.erb
|
313
316
|
- app/views/weeler/home/about.html.erb
|
314
317
|
- app/views/weeler/home/index.html.erb
|
318
|
+
- app/views/weeler/shared/_flash.html.erb
|
319
|
+
- app/views/weeler/shared/_footer.html.erb
|
320
|
+
- app/views/weeler/shared/_header_navbar.html.erb
|
321
|
+
- app/views/weeler/shared/_side_navbar.html.erb
|
315
322
|
- app/views/weeler/translations/_form.html.erb
|
316
323
|
- app/views/weeler/translations/_translation.html.erb
|
317
324
|
- app/views/weeler/translations/edit.html.erb
|
@@ -321,11 +328,17 @@ files:
|
|
321
328
|
- lib/.DS_Store
|
322
329
|
- lib/generators/weeler/.DS_Store
|
323
330
|
- lib/generators/weeler/install_generator.rb
|
331
|
+
- lib/generators/weeler/templates/controllers/weeler/example_controller.rb.example
|
324
332
|
- lib/generators/weeler/templates/initializers/weeler.rb
|
325
333
|
- lib/generators/weeler/templates/migrations/create_weeler_translations.rb
|
334
|
+
- lib/generators/weeler/templates/views/weeler/example/index.html.erb
|
326
335
|
- lib/i18n/.DS_Store
|
327
336
|
- lib/i18n/backend/.DS_Store
|
328
337
|
- lib/i18n/backend/weeler.rb
|
338
|
+
- lib/i18n/backend/weeler/exporter.rb
|
339
|
+
- lib/i18n/backend/weeler/exporter/active_record.rb
|
340
|
+
- lib/i18n/backend/weeler/exporter/active_record_relation.rb
|
341
|
+
- lib/i18n/backend/weeler/importer.rb
|
329
342
|
- lib/i18n/backend/weeler/store_procs.rb
|
330
343
|
- lib/i18n/backend/weeler/translation.rb
|
331
344
|
- lib/i18n/humanize_missing_translations.rb
|
@@ -387,11 +400,17 @@ files:
|
|
387
400
|
- spec/dummy/public/500.html
|
388
401
|
- spec/dummy/public/favicon.ico
|
389
402
|
- spec/factories/translations.rb
|
403
|
+
- spec/fixtures/.DS_Store
|
404
|
+
- spec/fixtures/test.xlsx
|
390
405
|
- spec/routing/routes_spec.rb
|
391
406
|
- spec/spec_helper.rb
|
392
407
|
- spec/weeler/.DS_Store
|
393
|
-
- spec/weeler/
|
394
|
-
- spec/weeler/
|
408
|
+
- spec/weeler/i18n/.DS_Store
|
409
|
+
- spec/weeler/i18n/backend/.DS_Store
|
410
|
+
- spec/weeler/i18n/backend/weeler/exporter_spec.rb
|
411
|
+
- spec/weeler/i18n/backend/weeler/importer_spec.rb
|
412
|
+
- spec/weeler/i18n/backend/weeler_spec.rb
|
413
|
+
- spec/weeler/i18n/humanize_missing_translations_spec.rb
|
395
414
|
- weeler.gemspec
|
396
415
|
homepage: ''
|
397
416
|
licenses:
|
@@ -469,8 +488,14 @@ test_files:
|
|
469
488
|
- spec/dummy/public/500.html
|
470
489
|
- spec/dummy/public/favicon.ico
|
471
490
|
- spec/factories/translations.rb
|
491
|
+
- spec/fixtures/.DS_Store
|
492
|
+
- spec/fixtures/test.xlsx
|
472
493
|
- spec/routing/routes_spec.rb
|
473
494
|
- spec/spec_helper.rb
|
474
495
|
- spec/weeler/.DS_Store
|
475
|
-
- spec/weeler/
|
476
|
-
- spec/weeler/
|
496
|
+
- spec/weeler/i18n/.DS_Store
|
497
|
+
- spec/weeler/i18n/backend/.DS_Store
|
498
|
+
- spec/weeler/i18n/backend/weeler/exporter_spec.rb
|
499
|
+
- spec/weeler/i18n/backend/weeler/importer_spec.rb
|
500
|
+
- spec/weeler/i18n/backend/weeler_spec.rb
|
501
|
+
- spec/weeler/i18n/humanize_missing_translations_spec.rb
|
@@ -1,169 +0,0 @@
|
|
1
|
-
/* ===========================================================
|
2
|
-
* bootstrap-fileupload.js j2
|
3
|
-
* http://jasny.github.com/bootstrap/javascript.html#fileupload
|
4
|
-
* ===========================================================
|
5
|
-
* Copyright 2012 Jasny BV, Netherlands.
|
6
|
-
*
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the "License")
|
8
|
-
* you may not use this file except in compliance with the License.
|
9
|
-
* You may obtain a copy of the License at
|
10
|
-
*
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
*
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
* See the License for the specific language governing permissions and
|
17
|
-
* limitations under the License.
|
18
|
-
* ========================================================== */
|
19
|
-
|
20
|
-
!function ($) {
|
21
|
-
|
22
|
-
"use strict"; // jshint ;_
|
23
|
-
|
24
|
-
/* FILEUPLOAD PUBLIC CLASS DEFINITION
|
25
|
-
* ================================= */
|
26
|
-
|
27
|
-
var Fileupload = function (element, options) {
|
28
|
-
this.$element = $(element)
|
29
|
-
this.type = this.$element.data('uploadtype') || (this.$element.find('.thumbnail').length > 0 ? "image" : "file")
|
30
|
-
|
31
|
-
this.$input = this.$element.find(':file')
|
32
|
-
if (this.$input.length === 0) return
|
33
|
-
|
34
|
-
this.name = this.$input.attr('name') || options.name
|
35
|
-
|
36
|
-
this.$hidden = this.$element.find('input[type=hidden][name="'+this.name+'"]')
|
37
|
-
if (this.$hidden.length === 0) {
|
38
|
-
this.$hidden = $('<input type="hidden" />')
|
39
|
-
this.$element.prepend(this.$hidden)
|
40
|
-
}
|
41
|
-
|
42
|
-
this.$preview = this.$element.find('.fileupload-preview')
|
43
|
-
var height = this.$preview.css('height')
|
44
|
-
if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)
|
45
|
-
|
46
|
-
this.original = {
|
47
|
-
'exists': this.$element.hasClass('fileupload-exists'),
|
48
|
-
'preview': this.$preview.html(),
|
49
|
-
'hiddenVal': this.$hidden.val()
|
50
|
-
}
|
51
|
-
|
52
|
-
this.$remove = this.$element.find('[data-dismiss="fileupload"]')
|
53
|
-
|
54
|
-
this.$element.find('[data-trigger="fileupload"]').on('click.fileupload', $.proxy(this.trigger, this))
|
55
|
-
|
56
|
-
this.listen()
|
57
|
-
}
|
58
|
-
|
59
|
-
Fileupload.prototype = {
|
60
|
-
|
61
|
-
listen: function() {
|
62
|
-
this.$input.on('change.fileupload', $.proxy(this.change, this))
|
63
|
-
$(this.$input[0].form).on('reset.fileupload', $.proxy(this.reset, this))
|
64
|
-
if (this.$remove) this.$remove.on('click.fileupload', $.proxy(this.clear, this))
|
65
|
-
},
|
66
|
-
|
67
|
-
change: function(e, invoked) {
|
68
|
-
if (invoked === 'clear') return
|
69
|
-
|
70
|
-
var file = e.target.files !== undefined ? e.target.files[0] : (e.target.value ? { name: e.target.value.replace(/^.+\\/, '') } : null)
|
71
|
-
|
72
|
-
if (!file) {
|
73
|
-
this.clear()
|
74
|
-
return
|
75
|
-
}
|
76
|
-
|
77
|
-
this.$hidden.val('')
|
78
|
-
this.$hidden.attr('name', '')
|
79
|
-
this.$input.attr('name', this.name)
|
80
|
-
|
81
|
-
if (this.type === "image" && this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
|
82
|
-
var reader = new FileReader()
|
83
|
-
var preview = this.$preview
|
84
|
-
var element = this.$element
|
85
|
-
|
86
|
-
reader.onload = function(e) {
|
87
|
-
preview.html('<img src="' + e.target.result + '" ' + (preview.css('max-height') != 'none' ? 'style="max-height: ' + preview.css('max-height') + ';"' : '') + ' />')
|
88
|
-
element.addClass('fileupload-exists').removeClass('fileupload-new')
|
89
|
-
}
|
90
|
-
|
91
|
-
reader.readAsDataURL(file)
|
92
|
-
} else {
|
93
|
-
this.$preview.text(file.name)
|
94
|
-
this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
|
95
|
-
}
|
96
|
-
},
|
97
|
-
|
98
|
-
clear: function(e) {
|
99
|
-
this.$hidden.val('')
|
100
|
-
this.$hidden.attr('name', this.name)
|
101
|
-
this.$input.attr('name', '')
|
102
|
-
|
103
|
-
//ie8+ doesn't support changing the value of input with type=file so clone instead
|
104
|
-
if (navigator.userAgent.match(/msie/i)){
|
105
|
-
var inputClone = this.$input.clone(true);
|
106
|
-
this.$input.after(inputClone);
|
107
|
-
this.$input.remove();
|
108
|
-
this.$input = inputClone;
|
109
|
-
}else{
|
110
|
-
this.$input.val('')
|
111
|
-
}
|
112
|
-
|
113
|
-
this.$preview.html('')
|
114
|
-
this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
|
115
|
-
|
116
|
-
if (e) {
|
117
|
-
this.$input.trigger('change', [ 'clear' ])
|
118
|
-
e.preventDefault()
|
119
|
-
}
|
120
|
-
},
|
121
|
-
|
122
|
-
reset: function(e) {
|
123
|
-
this.clear()
|
124
|
-
|
125
|
-
this.$hidden.val(this.original.hiddenVal)
|
126
|
-
this.$preview.html(this.original.preview)
|
127
|
-
|
128
|
-
if (this.original.exists) this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
|
129
|
-
else this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
|
130
|
-
},
|
131
|
-
|
132
|
-
trigger: function(e) {
|
133
|
-
this.$input.trigger('click')
|
134
|
-
e.preventDefault()
|
135
|
-
}
|
136
|
-
}
|
137
|
-
|
138
|
-
|
139
|
-
/* FILEUPLOAD PLUGIN DEFINITION
|
140
|
-
* =========================== */
|
141
|
-
|
142
|
-
$.fn.fileupload = function (options) {
|
143
|
-
return this.each(function () {
|
144
|
-
var $this = $(this)
|
145
|
-
, data = $this.data('fileupload')
|
146
|
-
if (!data) $this.data('fileupload', (data = new Fileupload(this, options)))
|
147
|
-
if (typeof options == 'string') data[options]()
|
148
|
-
})
|
149
|
-
}
|
150
|
-
|
151
|
-
$.fn.fileupload.Constructor = Fileupload
|
152
|
-
|
153
|
-
|
154
|
-
/* FILEUPLOAD DATA-API
|
155
|
-
* ================== */
|
156
|
-
|
157
|
-
$(document).on('click.fileupload.data-api', '[data-provides="fileupload"]', function (e) {
|
158
|
-
var $this = $(this)
|
159
|
-
if ($this.data('fileupload')) return
|
160
|
-
$this.fileupload($this.data())
|
161
|
-
|
162
|
-
var $target = $(e.target).closest('[data-dismiss="fileupload"],[data-trigger="fileupload"]');
|
163
|
-
if ($target.length > 0) {
|
164
|
-
$target.trigger('click.fileupload')
|
165
|
-
e.preventDefault()
|
166
|
-
}
|
167
|
-
})
|
168
|
-
|
169
|
-
}(window.jQuery);
|
@@ -1,132 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Bootstrap v2.3.1-j6
|
3
|
-
*
|
4
|
-
* Copyright 2012 Twitter, Inc
|
5
|
-
* Licensed under the Apache License v2.0
|
6
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
7
|
-
*
|
8
|
-
* Designed and built with all the love in the world by @mdo and @fat, extended by @ArnoldDaniels.
|
9
|
-
*/
|
10
|
-
.clearfix {
|
11
|
-
*zoom: 1;
|
12
|
-
}
|
13
|
-
.clearfix:before,
|
14
|
-
.clearfix:after {
|
15
|
-
display: table;
|
16
|
-
content: "";
|
17
|
-
line-height: 0;
|
18
|
-
}
|
19
|
-
.clearfix:after {
|
20
|
-
clear: both;
|
21
|
-
}
|
22
|
-
.hide-text {
|
23
|
-
font: 0/0 a;
|
24
|
-
color: transparent;
|
25
|
-
text-shadow: none;
|
26
|
-
background-color: transparent;
|
27
|
-
border: 0;
|
28
|
-
}
|
29
|
-
.input-block-level {
|
30
|
-
display: block;
|
31
|
-
width: 100%;
|
32
|
-
min-height: 30px;
|
33
|
-
-webkit-box-sizing: border-box;
|
34
|
-
-moz-box-sizing: border-box;
|
35
|
-
box-sizing: border-box;
|
36
|
-
}
|
37
|
-
.btn-file {
|
38
|
-
overflow: hidden;
|
39
|
-
position: relative;
|
40
|
-
vertical-align: middle;
|
41
|
-
}
|
42
|
-
.btn-file > input {
|
43
|
-
position: absolute;
|
44
|
-
top: 0;
|
45
|
-
right: 0;
|
46
|
-
margin: 0;
|
47
|
-
opacity: 0;
|
48
|
-
filter: alpha(opacity=0);
|
49
|
-
transform: translate(-300px, 0) scale(4);
|
50
|
-
font-size: 23px;
|
51
|
-
direction: ltr;
|
52
|
-
cursor: pointer;
|
53
|
-
}
|
54
|
-
.fileupload {
|
55
|
-
margin-bottom: 9px;
|
56
|
-
}
|
57
|
-
.fileupload .uneditable-input {
|
58
|
-
display: inline-block;
|
59
|
-
margin-bottom: 0px;
|
60
|
-
vertical-align: middle;
|
61
|
-
cursor: text;
|
62
|
-
}
|
63
|
-
.fileupload .thumbnail {
|
64
|
-
overflow: hidden;
|
65
|
-
display: inline-block;
|
66
|
-
margin-bottom: 5px;
|
67
|
-
vertical-align: middle;
|
68
|
-
text-align: center;
|
69
|
-
}
|
70
|
-
.fileupload .thumbnail > img {
|
71
|
-
display: inline-block;
|
72
|
-
vertical-align: middle;
|
73
|
-
max-height: 100%;
|
74
|
-
}
|
75
|
-
.fileupload .btn {
|
76
|
-
vertical-align: middle;
|
77
|
-
}
|
78
|
-
.fileupload-exists .fileupload-new,
|
79
|
-
.fileupload-new .fileupload-exists {
|
80
|
-
display: none;
|
81
|
-
}
|
82
|
-
.fileupload-inline .fileupload-controls {
|
83
|
-
display: inline;
|
84
|
-
}
|
85
|
-
.fileupload-new .input-append .btn-file {
|
86
|
-
-webkit-border-radius: 0 3px 3px 0;
|
87
|
-
-moz-border-radius: 0 3px 3px 0;
|
88
|
-
border-radius: 0 3px 3px 0;
|
89
|
-
}
|
90
|
-
.thumbnail-borderless .thumbnail {
|
91
|
-
border: none;
|
92
|
-
padding: 0;
|
93
|
-
-webkit-border-radius: 0;
|
94
|
-
-moz-border-radius: 0;
|
95
|
-
border-radius: 0;
|
96
|
-
-webkit-box-shadow: none;
|
97
|
-
-moz-box-shadow: none;
|
98
|
-
box-shadow: none;
|
99
|
-
}
|
100
|
-
.fileupload-new.thumbnail-borderless .thumbnail {
|
101
|
-
border: 1px solid #ddd;
|
102
|
-
}
|
103
|
-
.control-group.warning .fileupload .uneditable-input {
|
104
|
-
color: #a47e3c;
|
105
|
-
border-color: #a47e3c;
|
106
|
-
}
|
107
|
-
.control-group.warning .fileupload .fileupload-preview {
|
108
|
-
color: #a47e3c;
|
109
|
-
}
|
110
|
-
.control-group.warning .fileupload .thumbnail {
|
111
|
-
border-color: #a47e3c;
|
112
|
-
}
|
113
|
-
.control-group.error .fileupload .uneditable-input {
|
114
|
-
color: #b94a48;
|
115
|
-
border-color: #b94a48;
|
116
|
-
}
|
117
|
-
.control-group.error .fileupload .fileupload-preview {
|
118
|
-
color: #b94a48;
|
119
|
-
}
|
120
|
-
.control-group.error .fileupload .thumbnail {
|
121
|
-
border-color: #b94a48;
|
122
|
-
}
|
123
|
-
.control-group.success .fileupload .uneditable-input {
|
124
|
-
color: #468847;
|
125
|
-
border-color: #468847;
|
126
|
-
}
|
127
|
-
.control-group.success .fileupload .fileupload-preview {
|
128
|
-
color: #468847;
|
129
|
-
}
|
130
|
-
.control-group.success .fileupload .thumbnail {
|
131
|
-
border-color: #468847;
|
132
|
-
}
|