esphinx-rails-ui 1.0.0

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,238 @@
1
+ var
2
+ esPhinx;
3
+
4
+
5
+ (function($, $module) {
6
+ "use strict";
7
+
8
+ var
9
+ CSS_CLASS = "esphinx ui",
10
+ CSS_CLASS_QUERY = "." + CSS_CLASS.replace(/ +/g, ".");
11
+
12
+
13
+ $module.extend({
14
+ selectors: {Select: {}}
15
+ });
16
+
17
+ $.Extender.extend($module.selectors.Select, true, {
18
+ new: function(select, options) {
19
+ var
20
+ ConstructorReference = $module.selectors.Select.new,
21
+ wrapper = $("<div></div>"),
22
+ caption = $("<div></div>"),
23
+ optionsPanel = $("<div></div>"),
24
+ searchTextBox = $("<input></input>"),
25
+ abstractSelect = $("<ul></ul>"),
26
+ abstractOptions = [],
27
+ captionText = $("<div></div>"),
28
+ selectElement = $(select),
29
+ optionElements = selectElement.find("option"),
30
+
31
+ resolveArguments = function(options) {
32
+ if(!options) {
33
+ options = {};
34
+ }
35
+
36
+ if(!options.developmentMode ||
37
+ typeof options.developmentMode != "boolean") {
38
+ options.developmentMode = false;
39
+ }
40
+ },
41
+
42
+ selected = function(select) {
43
+ return $(select).find("option:checked");
44
+ },
45
+
46
+ toggleCaptionClass = function(caption) {
47
+ caption.toggleClass("expanded-arrow", "retracted-arrow");
48
+ },
49
+
50
+ reattachFoundListEventListener = function(abstractOptions) {
51
+ var
52
+ callback = function(abstractOption) {
53
+ $(abstractOption.element()).off("click");
54
+ $(abstractOption.element()).on("click", function() {
55
+ abstractOption.select();
56
+ });
57
+ };
58
+
59
+ abstractOptions.forEach(callback);
60
+ },
61
+
62
+ composeOptions = function(optionElements) {
63
+ var
64
+ callback = function(option) {
65
+ option = Option.new({
66
+ option: option,
67
+ select: selectElement,
68
+ caption: caption,
69
+ captionText: captionText,
70
+ optionsPanel: optionsPanel,
71
+ abstractSelect: abstractSelect
72
+ });
73
+
74
+ abstractOptions.push(option);
75
+ };
76
+
77
+ $(optionElements).each(callback);
78
+
79
+ reattachFoundListEventListener(abstractOptions);
80
+ abstractOptions = [];
81
+ },
82
+
83
+ compose = function() {
84
+ if (!options.developmentMode) {
85
+ selectElement.hide();
86
+ }
87
+
88
+ wrapper.insertAfter(selectElement);
89
+ captionText.text(selected(selectElement).text());
90
+ caption.append(captionText);
91
+ wrapper.prepend(caption);
92
+ wrapper.append(optionsPanel);
93
+ optionsPanel.append(abstractSelect);
94
+
95
+ var
96
+
97
+ composeSearchTextBox = function() {
98
+ searchTextBox.attribute("type", "text");
99
+ optionsPanel.prepend(searchTextBox);
100
+
101
+ $.ui.panels.autocomplete.new(searchTextBox,
102
+ abstractSelect,
103
+ options.autocomplete,
104
+ function(found) {
105
+ composeOptions(found);
106
+ }
107
+ );
108
+ };
109
+
110
+ wrapper.addClass(CSS_CLASS + " select");
111
+ caption.addClass("caption retracted-arrow");
112
+ optionsPanel.addClass("options-panel");
113
+ captionText.addClass("text");
114
+
115
+ // toggle on click on caption
116
+ caption.on("click", function() {
117
+ optionsPanel.toggle();
118
+ toggleCaptionClass($(this));
119
+ });
120
+
121
+ if (typeof options.searchTextBox == "boolean" &&
122
+ options.searchTextBox) {
123
+ composeSearchTextBox();
124
+ }
125
+
126
+ composeOptions(optionElements);
127
+ },
128
+
129
+ attachClickFromOutsideEventListener = function() {
130
+ var
131
+ wrapper = $(CSS_CLASS_QUERY + ".select"),
132
+ optionsPanels = wrapper.find(".options-panel"),
133
+ captions = wrapper.find(".caption");
134
+
135
+ $(window.document).on("click", function(e) {
136
+
137
+ if (!$(e.target).parent(CSS_CLASS_QUERY + ".select")
138
+ .some()) {
139
+ if (optionsPanels.visible()) {
140
+ optionsPanels.hide();
141
+ captions.removeClass("expanded-arrow");
142
+ captions.addClass("retracted-arrow");
143
+ }
144
+ }
145
+ });
146
+ },
147
+
148
+ addOptions = function(select, optionElements) {
149
+ var
150
+ callback = function(optionElement) {
151
+ select.append(optionElement);
152
+ };
153
+
154
+ $(optionElements).each(callback);
155
+ },
156
+
157
+ replaceSelectOptions = function(select, optionElements) {
158
+ select.clean();
159
+ addOptions(select, $(optionElements));
160
+ },
161
+
162
+ Option = {
163
+ new: function(data) {
164
+ var
165
+ option,
166
+ abstractOption,
167
+ ConstructorReference = Option.new,
168
+ select = $(data.select),
169
+
170
+ buildAbstractOption = function(li, option) {
171
+ li = $(li);
172
+ option = $(option);
173
+ li.text(option.text());
174
+ li.attribute("data-value", option
175
+ .attribute("value"));
176
+ },
177
+
178
+ append = function(abstractOption) {
179
+ if (abstractOption.tagName() != "option") {
180
+ data.abstractSelect.append(abstractOption);
181
+ }
182
+ };
183
+
184
+ if (!(this instanceof ConstructorReference)) {
185
+ return new ConstructorReference(data);
186
+ }
187
+
188
+ if ($(data.option).tagName() == "option") {
189
+ option = $(data.option);
190
+ abstractOption = $("<li></li>");
191
+ buildAbstractOption(abstractOption, option);
192
+ append(abstractOption);
193
+ } else {
194
+ abstractOption = $(data.option);
195
+ option = select.find("option[value='" +
196
+ abstractOption.data("value") + "']");
197
+ }
198
+
199
+ this.select = function() {
200
+ $(data.captionText).text($(abstractOption)
201
+ .textContent());
202
+ select.find("option:checked").unselect();
203
+ option.select();
204
+ $(data.optionsPanel).hide();
205
+ toggleCaptionClass(data.caption);
206
+ };
207
+
208
+ this.element = function() {
209
+ return abstractOption;
210
+ };
211
+ }
212
+ };
213
+
214
+ if (!(this instanceof ConstructorReference)) {
215
+ return new ConstructorReference(select, options);
216
+ }
217
+
218
+ resolveArguments(options);
219
+ select = $(select);
220
+ compose();
221
+ attachClickFromOutsideEventListener();
222
+
223
+ this.addOptions = function(optionElements) {
224
+ addOptions(select, optionElements);
225
+ composeOptions(optionElements);
226
+ };
227
+
228
+ this.replaceOptions = function(optionElements) {
229
+ abstractSelect.clean();
230
+ replaceSelectOptions(select, optionElements);
231
+ composeOptions(optionElements);
232
+ };
233
+
234
+ return this;
235
+ }
236
+ });
237
+
238
+ }(esPhinx, esPhinx.ui));
@@ -0,0 +1,13 @@
1
+ *
2
+ &.esphinx.ui
3
+ .transparent,
4
+ &.transparent
5
+ opacity: 0 !important
6
+
7
+ .hidden,
8
+ &.hidden
9
+ display: none
10
+
11
+ .fixed,
12
+ &.fixed
13
+ position: fixed
@@ -0,0 +1 @@
1
+ //= require_directory .
@@ -0,0 +1 @@
1
+ @import basicss/mixins
@@ -0,0 +1,61 @@
1
+ @import mixins
2
+
3
+ .esphinx.ui
4
+
5
+ &.modal
6
+ position: absolute
7
+ top: 0
8
+ bottom: 0
9
+ left: 0
10
+ right: 0
11
+
12
+ .mask
13
+ top: 0
14
+ bottom: 0
15
+ left: 0
16
+ right: 0
17
+ background-color: black
18
+ opacity: 0.3
19
+
20
+ section
21
+ +shadow(gray, 3px, 3px, 2px)
22
+ background: white
23
+ height: initial
24
+ width: initial
25
+ position: fixed !important
26
+ //alterou a centralização da imagem oO
27
+ //z-index: 1
28
+
29
+ header
30
+ padding: 5px 10px
31
+
32
+ .actions
33
+
34
+ display: inline-block
35
+
36
+ a
37
+ color: #ccc
38
+ font-weight: bold
39
+ font-size: 20px
40
+ text-decoration: none
41
+
42
+ &.close-button
43
+
44
+ &:before
45
+ content: "×"
46
+
47
+ &.hide-button
48
+ margin-left: 5px
49
+
50
+ &:before
51
+ content: "−"
52
+
53
+ &.close-button,
54
+ &.hide-button
55
+ &:hover
56
+ cursor: pointer
57
+ color: #999
58
+
59
+ .main
60
+ margin: 0
61
+ text-align: left
@@ -0,0 +1,69 @@
1
+ .esphinx.ui
2
+ &.select
3
+ display: inline-block
4
+
5
+ .caption
6
+ border: 1px solid
7
+ padding: 5px
8
+ display: inline-block
9
+
10
+ cursor: pointer
11
+
12
+ .text
13
+ white-space: nowrap
14
+ overflow-x: hidden
15
+ text-overflow: ellipsis
16
+
17
+ display: inline-block
18
+ margin-right: 6px
19
+
20
+ &::after
21
+ vertical-align: top
22
+ display: inline-block
23
+ margin-right: -4px
24
+ text-align: center
25
+
26
+ &.retracted-arrow
27
+ &::after
28
+ content: '▼'
29
+
30
+ &.expanded-arrow
31
+ &::after
32
+ content: '▲'
33
+
34
+ .options-panel
35
+ display: none
36
+ border: 1px solid
37
+ margin-top: -1px
38
+ padding: 10px
39
+
40
+ position: absolute
41
+ background: white
42
+
43
+ ol, ul
44
+ overflow-y: auto
45
+
46
+ background: white
47
+
48
+ list-style: none
49
+ margin: 0
50
+
51
+ li
52
+ cursor: pointer
53
+
54
+ white-space: nowrap
55
+ overflow-x: hidden
56
+ text-overflow: ellipsis
57
+
58
+ padding: 3px 0
59
+
60
+ &.list-built-found
61
+ li
62
+ &:first-of-type
63
+ padding-top: 9px
64
+
65
+ &.list-built-found
66
+ background: white
67
+
68
+ li
69
+ cursor: default
@@ -0,0 +1,14 @@
1
+ .esphinx.ui
2
+ &.tabs
3
+ ul
4
+ list-style-type: none
5
+
6
+ &.navs
7
+ li
8
+ text-align: center
9
+
10
+ &:first-child
11
+ margin-left: initial
12
+
13
+ a
14
+ display: block
@@ -0,0 +1,17 @@
1
+ .esphinx
2
+ &.ui
3
+ .tooltip
4
+ position: absolute
5
+ z-index: -1
6
+ opacity: 0
7
+
8
+ &.transition-in
9
+ opacity: 1
10
+ z-index: 1
11
+
12
+ .arrow
13
+ position: absolute
14
+ transform: rotate(45deg)
15
+ width: 12px
16
+ height: 12px
17
+ z-index: 1
@@ -0,0 +1 @@
1
+ require "esphinx/rails/ui/engine"
@@ -0,0 +1,9 @@
1
+ module ESphinx
2
+ module Rails
3
+ module UI
4
+ class Engine < ::Rails::Engine
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module ESphinx
2
+ module Rails
3
+ module UI
4
+ VERSION = "1.0.0"
5
+ end
6
+ end
7
+ end