bootstrap-jasny 0.1.12

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.
Files changed (100) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.rdoc +27 -0
  4. data/lib/bootstrap-jasny.rb +51 -0
  5. data/lib/bootstrap-jasny/compass_functions.rb +24 -0
  6. data/lib/bootstrap-jasny/engine.rb +7 -0
  7. data/lib/bootstrap-jasny/less_functions.rb +14 -0
  8. data/vendor/assets/fonts/bootstrap/iconic/iconic_fill.eot +0 -0
  9. data/vendor/assets/fonts/bootstrap/iconic/iconic_fill.otf +0 -0
  10. data/vendor/assets/fonts/bootstrap/iconic/iconic_fill.svg +475 -0
  11. data/vendor/assets/fonts/bootstrap/iconic/iconic_fill.ttf +0 -0
  12. data/vendor/assets/fonts/bootstrap/iconic/iconic_fill.woff +0 -0
  13. data/vendor/assets/fonts/bootstrap/iconic/iconic_stroke.eot +0 -0
  14. data/vendor/assets/fonts/bootstrap/iconic/iconic_stroke.otf +0 -0
  15. data/vendor/assets/fonts/bootstrap/iconic/iconic_stroke.svg +492 -0
  16. data/vendor/assets/fonts/bootstrap/iconic/iconic_stroke.ttf +0 -0
  17. data/vendor/assets/fonts/bootstrap/iconic/iconic_stroke.woff +0 -0
  18. data/vendor/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  19. data/vendor/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  20. data/vendor/assets/javascripts/bootstrap-affix.js +117 -0
  21. data/vendor/assets/javascripts/bootstrap-alert.js +99 -0
  22. data/vendor/assets/javascripts/bootstrap-button.js +105 -0
  23. data/vendor/assets/javascripts/bootstrap-carousel.js +207 -0
  24. data/vendor/assets/javascripts/bootstrap-collapse.js +167 -0
  25. data/vendor/assets/javascripts/bootstrap-dropdown.js +165 -0
  26. data/vendor/assets/javascripts/bootstrap-fileupload.js +169 -0
  27. data/vendor/assets/javascripts/bootstrap-inputmask.js +355 -0
  28. data/vendor/assets/javascripts/bootstrap-modal.js +247 -0
  29. data/vendor/assets/javascripts/bootstrap-popover.js +114 -0
  30. data/vendor/assets/javascripts/bootstrap-rowlink.js +71 -0
  31. data/vendor/assets/javascripts/bootstrap-scrollspy.js +162 -0
  32. data/vendor/assets/javascripts/bootstrap-tab.js +144 -0
  33. data/vendor/assets/javascripts/bootstrap-tooltip.js +361 -0
  34. data/vendor/assets/javascripts/bootstrap-transition.js +60 -0
  35. data/vendor/assets/javascripts/bootstrap-typeahead.js +524 -0
  36. data/vendor/assets/javascripts/bootstrap.js +21 -0
  37. data/vendor/assets/stylesheets/bootstrap-responsive.less +1 -0
  38. data/vendor/assets/stylesheets/bootstrap.less +2 -0
  39. data/vendor/assets/stylesheets/bootstrap/accordion.less +34 -0
  40. data/vendor/assets/stylesheets/bootstrap/action-areas.less +14 -0
  41. data/vendor/assets/stylesheets/bootstrap/action-links.less +57 -0
  42. data/vendor/assets/stylesheets/bootstrap/alerts.less +79 -0
  43. data/vendor/assets/stylesheets/bootstrap/bootstrap.less +63 -0
  44. data/vendor/assets/stylesheets/bootstrap/breadcrumbs.less +24 -0
  45. data/vendor/assets/stylesheets/bootstrap/button-groups.less +229 -0
  46. data/vendor/assets/stylesheets/bootstrap/buttons.less +228 -0
  47. data/vendor/assets/stylesheets/bootstrap/carousel.less +158 -0
  48. data/vendor/assets/stylesheets/bootstrap/close.less +32 -0
  49. data/vendor/assets/stylesheets/bootstrap/code.less +61 -0
  50. data/vendor/assets/stylesheets/bootstrap/component-animations.less +22 -0
  51. data/vendor/assets/stylesheets/bootstrap/dropdowns.less +237 -0
  52. data/vendor/assets/stylesheets/bootstrap/fileupload.less +105 -0
  53. data/vendor/assets/stylesheets/bootstrap/forms-uneditable.less +159 -0
  54. data/vendor/assets/stylesheets/bootstrap/forms.less +690 -0
  55. data/vendor/assets/stylesheets/bootstrap/grid.less +21 -0
  56. data/vendor/assets/stylesheets/bootstrap/hero-unit.less +25 -0
  57. data/vendor/assets/stylesheets/bootstrap/iconic.less +209 -0
  58. data/vendor/assets/stylesheets/bootstrap/jasny-bootstrap.less +31 -0
  59. data/vendor/assets/stylesheets/bootstrap/jasny-forms.less +99 -0
  60. data/vendor/assets/stylesheets/bootstrap/jasny-forms.responsive-1200px-min.less +16 -0
  61. data/vendor/assets/stylesheets/bootstrap/jasny-forms.responsive-767px-max.less +17 -0
  62. data/vendor/assets/stylesheets/bootstrap/jasny-forms.responsive-768px-979px.less +36 -0
  63. data/vendor/assets/stylesheets/bootstrap/jasny-navs-tabbable.less +148 -0
  64. data/vendor/assets/stylesheets/bootstrap/jasny-responsive.less +27 -0
  65. data/vendor/assets/stylesheets/bootstrap/labels-badges.less +84 -0
  66. data/vendor/assets/stylesheets/bootstrap/layouts-semifluid.less +11 -0
  67. data/vendor/assets/stylesheets/bootstrap/layouts-semifluid.responsive-1200px-min.less +7 -0
  68. data/vendor/assets/stylesheets/bootstrap/layouts.less +16 -0
  69. data/vendor/assets/stylesheets/bootstrap/media.less +55 -0
  70. data/vendor/assets/stylesheets/bootstrap/mixins.less +702 -0
  71. data/vendor/assets/stylesheets/bootstrap/modals.less +95 -0
  72. data/vendor/assets/stylesheets/bootstrap/navbar.less +497 -0
  73. data/vendor/assets/stylesheets/bootstrap/navs.less +409 -0
  74. data/vendor/assets/stylesheets/bootstrap/page-alert.less +23 -0
  75. data/vendor/assets/stylesheets/bootstrap/page-alert.responsive-1200px-min.less +11 -0
  76. data/vendor/assets/stylesheets/bootstrap/page-alert.responsive-767px-max.less +20 -0
  77. data/vendor/assets/stylesheets/bootstrap/pager.less +43 -0
  78. data/vendor/assets/stylesheets/bootstrap/pagination.less +123 -0
  79. data/vendor/assets/stylesheets/bootstrap/popovers.less +133 -0
  80. data/vendor/assets/stylesheets/bootstrap/progress-bars.less +122 -0
  81. data/vendor/assets/stylesheets/bootstrap/reset.less +216 -0
  82. data/vendor/assets/stylesheets/bootstrap/responsive-1200px-min.less +28 -0
  83. data/vendor/assets/stylesheets/bootstrap/responsive-767px-max.less +193 -0
  84. data/vendor/assets/stylesheets/bootstrap/responsive-768px-979px.less +19 -0
  85. data/vendor/assets/stylesheets/bootstrap/responsive-navbar.less +189 -0
  86. data/vendor/assets/stylesheets/bootstrap/responsive-row-desktop.less +23 -0
  87. data/vendor/assets/stylesheets/bootstrap/responsive-tables.less +30 -0
  88. data/vendor/assets/stylesheets/bootstrap/responsive-utilities.less +59 -0
  89. data/vendor/assets/stylesheets/bootstrap/responsive.less +48 -0
  90. data/vendor/assets/stylesheets/bootstrap/rowlink.less +20 -0
  91. data/vendor/assets/stylesheets/bootstrap/scaffolding.less +53 -0
  92. data/vendor/assets/stylesheets/bootstrap/sprites.less +197 -0
  93. data/vendor/assets/stylesheets/bootstrap/tables.less +244 -0
  94. data/vendor/assets/stylesheets/bootstrap/thumbnails.less +53 -0
  95. data/vendor/assets/stylesheets/bootstrap/tooltip.less +70 -0
  96. data/vendor/assets/stylesheets/bootstrap/type.less +247 -0
  97. data/vendor/assets/stylesheets/bootstrap/utilities.less +30 -0
  98. data/vendor/assets/stylesheets/bootstrap/variables.less +302 -0
  99. data/vendor/assets/stylesheets/bootstrap/wells.less +29 -0
  100. metadata +241 -0
@@ -0,0 +1,167 @@
1
+ /* =============================================================
2
+ * bootstrap-collapse.js v2.3.1
3
+ * http://twitter.github.com/bootstrap/javascript.html#collapse
4
+ * =============================================================
5
+ * Copyright 2012 Twitter, Inc.
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
+
21
+ !function ($) {
22
+
23
+ "use strict"; // jshint ;_;
24
+
25
+
26
+ /* COLLAPSE PUBLIC CLASS DEFINITION
27
+ * ================================ */
28
+
29
+ var Collapse = function (element, options) {
30
+ this.$element = $(element)
31
+ this.options = $.extend({}, $.fn.collapse.defaults, options)
32
+
33
+ if (this.options.parent) {
34
+ this.$parent = $(this.options.parent)
35
+ }
36
+
37
+ this.options.toggle && this.toggle()
38
+ }
39
+
40
+ Collapse.prototype = {
41
+
42
+ constructor: Collapse
43
+
44
+ , dimension: function () {
45
+ var hasWidth = this.$element.hasClass('width')
46
+ return hasWidth ? 'width' : 'height'
47
+ }
48
+
49
+ , show: function () {
50
+ var dimension
51
+ , scroll
52
+ , actives
53
+ , hasData
54
+
55
+ if (this.transitioning || this.$element.hasClass('in')) return
56
+
57
+ dimension = this.dimension()
58
+ scroll = $.camelCase(['scroll', dimension].join('-'))
59
+ actives = this.$parent && this.$parent.find('> .accordion-group > .in')
60
+
61
+ if (actives && actives.length) {
62
+ hasData = actives.data('collapse')
63
+ if (hasData && hasData.transitioning) return
64
+ actives.collapse('hide')
65
+ hasData || actives.data('collapse', null)
66
+ }
67
+
68
+ this.$element[dimension](0)
69
+ this.transition('addClass', $.Event('show'), 'shown')
70
+ $.support.transition && this.$element[dimension](this.$element[0][scroll])
71
+ }
72
+
73
+ , hide: function () {
74
+ var dimension
75
+ if (this.transitioning || !this.$element.hasClass('in')) return
76
+ dimension = this.dimension()
77
+ this.reset(this.$element[dimension]())
78
+ this.transition('removeClass', $.Event('hide'), 'hidden')
79
+ this.$element[dimension](0)
80
+ }
81
+
82
+ , reset: function (size) {
83
+ var dimension = this.dimension()
84
+
85
+ this.$element
86
+ .removeClass('collapse')
87
+ [dimension](size || 'auto')
88
+ [0].offsetWidth
89
+
90
+ this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
91
+
92
+ return this
93
+ }
94
+
95
+ , transition: function (method, startEvent, completeEvent) {
96
+ var that = this
97
+ , complete = function () {
98
+ if (startEvent.type == 'show') that.reset()
99
+ that.transitioning = 0
100
+ that.$element.trigger(completeEvent)
101
+ }
102
+
103
+ this.$element.trigger(startEvent)
104
+
105
+ if (startEvent.isDefaultPrevented()) return
106
+
107
+ this.transitioning = 1
108
+
109
+ this.$element[method]('in')
110
+
111
+ $.support.transition && this.$element.hasClass('collapse') ?
112
+ this.$element.one($.support.transition.end, complete) :
113
+ complete()
114
+ }
115
+
116
+ , toggle: function () {
117
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
118
+ }
119
+
120
+ }
121
+
122
+
123
+ /* COLLAPSE PLUGIN DEFINITION
124
+ * ========================== */
125
+
126
+ var old = $.fn.collapse
127
+
128
+ $.fn.collapse = function (option) {
129
+ return this.each(function () {
130
+ var $this = $(this)
131
+ , data = $this.data('collapse')
132
+ , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
133
+ if (!data) $this.data('collapse', (data = new Collapse(this, options)))
134
+ if (typeof option == 'string') data[option]()
135
+ })
136
+ }
137
+
138
+ $.fn.collapse.defaults = {
139
+ toggle: true
140
+ }
141
+
142
+ $.fn.collapse.Constructor = Collapse
143
+
144
+
145
+ /* COLLAPSE NO CONFLICT
146
+ * ==================== */
147
+
148
+ $.fn.collapse.noConflict = function () {
149
+ $.fn.collapse = old
150
+ return this
151
+ }
152
+
153
+
154
+ /* COLLAPSE DATA-API
155
+ * ================= */
156
+
157
+ $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
158
+ var $this = $(this), href
159
+ , target = $this.attr('data-target')
160
+ || e.preventDefault()
161
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
162
+ , option = $(target).data('collapse') ? 'toggle' : $this.data()
163
+ $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
164
+ $(target).collapse(option)
165
+ })
166
+
167
+ }(window.jQuery);
@@ -0,0 +1,165 @@
1
+ /* ============================================================
2
+ * bootstrap-dropdown.js v2.3.1
3
+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns
4
+ * ============================================================
5
+ * Copyright 2012 Twitter, Inc.
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
+
21
+ !function ($) {
22
+
23
+ "use strict"; // jshint ;_;
24
+
25
+
26
+ /* DROPDOWN CLASS DEFINITION
27
+ * ========================= */
28
+
29
+ var toggle = '[data-toggle=dropdown]'
30
+ , Dropdown = function (element) {
31
+ var $el = $(element).on('click.dropdown.data-api', this.toggle)
32
+ $('html').on('click.dropdown.data-api', function () {
33
+ $el.parent().removeClass('open')
34
+ })
35
+ }
36
+
37
+ Dropdown.prototype = {
38
+
39
+ constructor: Dropdown
40
+
41
+ , toggle: function (e) {
42
+ var $this = $(this)
43
+ , $parent
44
+ , isActive
45
+
46
+ if ($this.is('.disabled, :disabled')) return
47
+
48
+ $parent = getParent($this)
49
+
50
+ isActive = $parent.hasClass('open')
51
+
52
+ clearMenus()
53
+
54
+ if (!isActive) {
55
+ $parent.toggleClass('open')
56
+ }
57
+
58
+ $this.focus()
59
+
60
+ return false
61
+ }
62
+
63
+ , keydown: function (e) {
64
+ var $this
65
+ , $items
66
+ , $active
67
+ , $parent
68
+ , isActive
69
+ , index
70
+
71
+ if (!/(38|40|27)/.test(e.keyCode)) return
72
+
73
+ $this = $(this)
74
+
75
+ e.preventDefault()
76
+ e.stopPropagation()
77
+
78
+ if ($this.is('.disabled, :disabled')) return
79
+
80
+ $parent = getParent($this)
81
+
82
+ isActive = $parent.hasClass('open')
83
+
84
+ if (!isActive || (isActive && e.keyCode == 27)) {
85
+ if (e.which == 27) $parent.find(toggle).focus()
86
+ return $this.click()
87
+ }
88
+
89
+ $items = $('[role=menu] li:not(.divider):visible a', $parent)
90
+
91
+ if (!$items.length) return
92
+
93
+ index = $items.index($items.filter(':focus'))
94
+
95
+ if (e.keyCode == 38 && index > 0) index-- // up
96
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
97
+ if (!~index) index = 0
98
+
99
+ $items
100
+ .eq(index)
101
+ .focus()
102
+ }
103
+
104
+ }
105
+
106
+ function clearMenus() {
107
+ $(toggle).each(function () {
108
+ getParent($(this)).removeClass('open')
109
+ })
110
+ }
111
+
112
+ function getParent($this) {
113
+ var selector = $this.attr('data-target')
114
+ , $parent
115
+
116
+ if (!selector) {
117
+ selector = $this.attr('href')
118
+ selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
119
+ }
120
+
121
+ $parent = selector && $(selector)
122
+
123
+ if (!$parent || !$parent.length) $parent = $this.parent()
124
+
125
+ return $parent
126
+ }
127
+
128
+
129
+ /* DROPDOWN PLUGIN DEFINITION
130
+ * ========================== */
131
+
132
+ var old = $.fn.dropdown
133
+
134
+ $.fn.dropdown = function (option) {
135
+ return this.each(function () {
136
+ var $this = $(this)
137
+ , data = $this.data('dropdown')
138
+ if (!data) $this.data('dropdown', (data = new Dropdown(this)))
139
+ if (typeof option == 'string') data[option].call($this)
140
+ })
141
+ }
142
+
143
+ $.fn.dropdown.Constructor = Dropdown
144
+
145
+
146
+ /* DROPDOWN NO CONFLICT
147
+ * ==================== */
148
+
149
+ $.fn.dropdown.noConflict = function () {
150
+ $.fn.dropdown = old
151
+ return this
152
+ }
153
+
154
+
155
+ /* APPLY TO STANDARD DROPDOWN ELEMENTS
156
+ * =================================== */
157
+
158
+ $(document)
159
+ .on('click.dropdown.data-api', clearMenus)
160
+ .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
161
+ .on('click.dropdown-menu', function (e) { e.stopPropagation() })
162
+ .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
163
+ .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
164
+
165
+ }(window.jQuery);
@@ -0,0 +1,169 @@
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);