card-mod-bootstrap 0.13.1 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/assets/script/bootstrap_modal_decko.js +27 -0
- data/assets/script/manifest.yml +13 -0
- data/assets/script/script_colorpicker.js.coffee +3 -0
- data/assets/script/script_load_select2.js.coffee +55 -0
- data/assets/style/bootstrap_colorpicker.scss +272 -0
- data/{lib/stylesheets → assets/style}/font_awesome.css +0 -0
- data/assets/style/manifest.yml +14 -0
- data/{lib/stylesheets → assets/style}/material_icons.css +0 -0
- data/{lib/stylesheets/style_select2_bootstrap.scss → assets/style/select2_bootstrap.scss} +0 -0
- data/{lib/stylesheets → assets/style}/style_bootstrap_cards.scss +5 -3
- data/locales/de.yml +3 -0
- data/locales/en.yml +3 -0
- data/set/abstract/bootswatch_theme.rb +45 -70
- data/set/all/bootstrap/helper.rb +1 -1
- data/set/all/bootstrap/icon.rb +1 -1
- data/set/type/customized_bootswatch_skin.rb +7 -10
- metadata +25 -163
- data/file/cerulean_skin_image/image-icon.png +0 -0
- data/file/cerulean_skin_image/image-large.png +0 -0
- data/file/cerulean_skin_image/image-medium.png +0 -0
- data/file/cerulean_skin_image/image-original.png +0 -0
- data/file/cerulean_skin_image/image-small.png +0 -0
- data/file/cosmo_skin_image/image-icon.png +0 -0
- data/file/cosmo_skin_image/image-large.png +0 -0
- data/file/cosmo_skin_image/image-medium.png +0 -0
- data/file/cosmo_skin_image/image-original.png +0 -0
- data/file/cosmo_skin_image/image-small.png +0 -0
- data/file/cyborg_skin_image/image-icon.png +0 -0
- data/file/cyborg_skin_image/image-large.png +0 -0
- data/file/cyborg_skin_image/image-medium.png +0 -0
- data/file/cyborg_skin_image/image-original.png +0 -0
- data/file/cyborg_skin_image/image-small.png +0 -0
- data/file/darkly_skin_image/image-icon.png +0 -0
- data/file/darkly_skin_image/image-large.png +0 -0
- data/file/darkly_skin_image/image-medium.png +0 -0
- data/file/darkly_skin_image/image-original.png +0 -0
- data/file/darkly_skin_image/image-small.png +0 -0
- data/file/flatly_skin_image/image-icon.png +0 -0
- data/file/flatly_skin_image/image-large.png +0 -0
- data/file/flatly_skin_image/image-medium.png +0 -0
- data/file/flatly_skin_image/image-original.png +0 -0
- data/file/flatly_skin_image/image-small.png +0 -0
- data/file/journal_skin_image/image-icon.png +0 -0
- data/file/journal_skin_image/image-large.png +0 -0
- data/file/journal_skin_image/image-medium.png +0 -0
- data/file/journal_skin_image/image-original.png +0 -0
- data/file/journal_skin_image/image-small.png +0 -0
- data/file/litera_skin_image/image-icon.png +0 -0
- data/file/litera_skin_image/image-large.png +0 -0
- data/file/litera_skin_image/image-medium.png +0 -0
- data/file/litera_skin_image/image-original.png +0 -0
- data/file/litera_skin_image/image-small.png +0 -0
- data/file/lumen_skin_image/image-icon.png +0 -0
- data/file/lumen_skin_image/image-large.png +0 -0
- data/file/lumen_skin_image/image-medium.png +0 -0
- data/file/lumen_skin_image/image-original.png +0 -0
- data/file/lumen_skin_image/image-small.png +0 -0
- data/file/lux_skin_image/image-icon.png +0 -0
- data/file/lux_skin_image/image-large.png +0 -0
- data/file/lux_skin_image/image-medium.png +0 -0
- data/file/lux_skin_image/image-original.png +0 -0
- data/file/lux_skin_image/image-small.png +0 -0
- data/file/materia_skin_image/image-icon.png +0 -0
- data/file/materia_skin_image/image-large.png +0 -0
- data/file/materia_skin_image/image-medium.png +0 -0
- data/file/materia_skin_image/image-original.png +0 -0
- data/file/materia_skin_image/image-small.png +0 -0
- data/file/minty_skin_image/image-icon.png +0 -0
- data/file/minty_skin_image/image-large.png +0 -0
- data/file/minty_skin_image/image-medium.png +0 -0
- data/file/minty_skin_image/image-original.png +0 -0
- data/file/minty_skin_image/image-small.png +0 -0
- data/file/mod_bootstrap_script_bootstrap_machine_output/file.js +0 -25
- data/file/mod_bootstrap_script_pointer_machine_output/file.js +0 -223
- data/file/paper_skin_image/image-icon.png +0 -0
- data/file/paper_skin_image/image-large.png +0 -0
- data/file/paper_skin_image/image-medium.png +0 -0
- data/file/paper_skin_image/image-original.png +0 -0
- data/file/paper_skin_image/image-small.png +0 -0
- data/file/pulse_skin_image/image-icon.png +0 -0
- data/file/pulse_skin_image/image-large.png +0 -0
- data/file/pulse_skin_image/image-medium.png +0 -0
- data/file/pulse_skin_image/image-original.png +0 -0
- data/file/pulse_skin_image/image-small.png +0 -0
- data/file/readable_skin_image/image-icon.png +0 -0
- data/file/readable_skin_image/image-large.png +0 -0
- data/file/readable_skin_image/image-medium.png +0 -0
- data/file/readable_skin_image/image-original.png +0 -0
- data/file/readable_skin_image/image-small.png +0 -0
- data/file/sandstone_skin_image/image-icon.png +0 -0
- data/file/sandstone_skin_image/image-large.png +0 -0
- data/file/sandstone_skin_image/image-medium.png +0 -0
- data/file/sandstone_skin_image/image-original.png +0 -0
- data/file/sandstone_skin_image/image-small.png +0 -0
- data/file/simplex_skin_image/image-icon.png +0 -0
- data/file/simplex_skin_image/image-large.png +0 -0
- data/file/simplex_skin_image/image-medium.png +0 -0
- data/file/simplex_skin_image/image-original.png +0 -0
- data/file/simplex_skin_image/image-small.png +0 -0
- data/file/sketchy_skin_image/image-icon.png +0 -0
- data/file/sketchy_skin_image/image-large.png +0 -0
- data/file/sketchy_skin_image/image-medium.png +0 -0
- data/file/sketchy_skin_image/image-original.png +0 -0
- data/file/sketchy_skin_image/image-small.png +0 -0
- data/file/slate_skin_image/image-icon.png +0 -0
- data/file/slate_skin_image/image-large.png +0 -0
- data/file/slate_skin_image/image-medium.png +0 -0
- data/file/slate_skin_image/image-original.png +0 -0
- data/file/slate_skin_image/image-small.png +0 -0
- data/file/solar_skin_image/image-icon.png +0 -0
- data/file/solar_skin_image/image-large.png +0 -0
- data/file/solar_skin_image/image-medium.png +0 -0
- data/file/solar_skin_image/image-original.png +0 -0
- data/file/solar_skin_image/image-small.png +0 -0
- data/file/spacelab_skin_image/image-icon.png +0 -0
- data/file/spacelab_skin_image/image-large.png +0 -0
- data/file/spacelab_skin_image/image-medium.png +0 -0
- data/file/spacelab_skin_image/image-original.png +0 -0
- data/file/spacelab_skin_image/image-small.png +0 -0
- data/file/superhero_skin_image/image-icon.png +0 -0
- data/file/superhero_skin_image/image-large.png +0 -0
- data/file/superhero_skin_image/image-medium.png +0 -0
- data/file/superhero_skin_image/image-original.png +0 -0
- data/file/superhero_skin_image/image-small.png +0 -0
- data/file/united_skin_image/image-icon.png +0 -0
- data/file/united_skin_image/image-large.png +0 -0
- data/file/united_skin_image/image-medium.png +0 -0
- data/file/united_skin_image/image-original.png +0 -0
- data/file/united_skin_image/image-small.png +0 -0
- data/file/yeti_skin_image/image-icon.png +0 -0
- data/file/yeti_skin_image/image-large.png +0 -0
- data/file/yeti_skin_image/image-medium.png +0 -0
- data/file/yeti_skin_image/image-original.png +0 -0
- data/file/yeti_skin_image/image-small.png +0 -0
- data/lib/card/lazy_tab.rb +0 -37
- data/lib/card/tab.rb +0 -83
- data/lib/javascript/smartmenu.js +0 -94
- data/lib/stylesheets/smartmenu.css +0 -433
- data/set/all/bootstrap/tabs/tab_panel.haml +0 -7
- data/set/all/bootstrap/tabs.rb +0 -40
- data/set/self/font_awesome.rb +0 -2
- data/set/self/material_icons.rb +0 -2
- data/set/self/script_load_select2.rb +0 -2
- data/set/self/smartmenu_css.rb +0 -5
- data/set/self/smartmenu_js.rb +0 -5
- data/set/self/style_bootstrap_cards.rb +0 -1
- data/set/self/style_bootstrap_colorpicker.rb +0 -6
- data/set/self/style_select2.rb +0 -10
- data/set/self/style_select2_bootstrap.rb +0 -1
@@ -1,223 +0,0 @@
|
|
1
|
-
// script_pointer_config.js.coffee
|
2
|
-
(function() {
|
3
|
-
var permissionsContent, pointerContent;
|
4
|
-
|
5
|
-
$.extend(decko.editorContentFunctionMap, {
|
6
|
-
'select.pointer-select': function() {
|
7
|
-
return pointerContent(this.val());
|
8
|
-
},
|
9
|
-
'select.pointer-multiselect': function() {
|
10
|
-
return pointerContent(this.val());
|
11
|
-
},
|
12
|
-
'.pointer-radio-list': function() {
|
13
|
-
return pointerContent(this.find('input:checked').val());
|
14
|
-
},
|
15
|
-
'.pointer-list-ul': function() {
|
16
|
-
return pointerContent(this.find('input').map(function() {
|
17
|
-
return $(this).val();
|
18
|
-
}));
|
19
|
-
},
|
20
|
-
'.pointer-link-list-ul': function() {
|
21
|
-
return decko.linkListContent(this.find('.input-group'));
|
22
|
-
},
|
23
|
-
'._nest-list-ul': function() {
|
24
|
-
return decko.nestListContent(this.find('.input-group'));
|
25
|
-
},
|
26
|
-
'.pointer-checkbox-list': function() {
|
27
|
-
return pointerContent(this.find('input:checked').map(function() {
|
28
|
-
return $(this).val();
|
29
|
-
}));
|
30
|
-
},
|
31
|
-
'.pointer-select-list': function() {
|
32
|
-
return pointerContent(this.find('.pointer-select select').map(function() {
|
33
|
-
return $(this).val();
|
34
|
-
}));
|
35
|
-
},
|
36
|
-
'._pointer-filtered-list': function() {
|
37
|
-
return pointerContent(this.find('._filtered-list-item').map(function() {
|
38
|
-
return $(this).data('cardName');
|
39
|
-
}));
|
40
|
-
},
|
41
|
-
'._pointer-list': function() {
|
42
|
-
return pointerContent(this.find('._pointer-item').map(function() {
|
43
|
-
return $(this).val();
|
44
|
-
}));
|
45
|
-
},
|
46
|
-
'.perm-editor': function() {
|
47
|
-
return permissionsContent(this);
|
48
|
-
}
|
49
|
-
});
|
50
|
-
|
51
|
-
decko.editorInitFunctionMap['.pointer-list-editor'] = function() {
|
52
|
-
this.sortable({
|
53
|
-
handle: '.handle',
|
54
|
-
cancel: ''
|
55
|
-
});
|
56
|
-
return decko.initPointerList(this.find('input'));
|
57
|
-
};
|
58
|
-
|
59
|
-
decko.editorInitFunctionMap['._pointer-filtered-list'] = function() {
|
60
|
-
return this.sortable({
|
61
|
-
handle: '._handle',
|
62
|
-
cancel: ''
|
63
|
-
});
|
64
|
-
};
|
65
|
-
|
66
|
-
$.extend(decko, {
|
67
|
-
initPointerList: function(input) {
|
68
|
-
return decko.initAutoCardPlete(input);
|
69
|
-
},
|
70
|
-
initAutoCardPlete: function(input) {
|
71
|
-
var optionsCard, path;
|
72
|
-
optionsCard = input.data('options-card');
|
73
|
-
if (!optionsCard) {
|
74
|
-
return;
|
75
|
-
}
|
76
|
-
path = optionsCard + '.json?view=name_match';
|
77
|
-
return input.autocomplete({
|
78
|
-
source: decko.slotPath(path)
|
79
|
-
});
|
80
|
-
},
|
81
|
-
pointerContent: function(vals) {
|
82
|
-
var list;
|
83
|
-
list = $.map($.makeArray(vals), function(v) {
|
84
|
-
if (v) {
|
85
|
-
return '[[' + v + ']]';
|
86
|
-
}
|
87
|
-
});
|
88
|
-
return $.makeArray(list).join("\n");
|
89
|
-
},
|
90
|
-
linkListContent: function(input_groups) {
|
91
|
-
var list, vals;
|
92
|
-
vals = input_groups.map(function() {
|
93
|
-
var title, v;
|
94
|
-
v = $(this).find('input._reference').val();
|
95
|
-
title = $(this).find('input._title').val();
|
96
|
-
if (title.length > 0) {
|
97
|
-
v += "|" + title;
|
98
|
-
}
|
99
|
-
return v;
|
100
|
-
});
|
101
|
-
list = $.map($.makeArray(vals), function(v) {
|
102
|
-
if (v) {
|
103
|
-
return '[[' + v + ']]';
|
104
|
-
}
|
105
|
-
});
|
106
|
-
return $.makeArray(list).join("\n");
|
107
|
-
},
|
108
|
-
nestListContent: function(input_groups) {
|
109
|
-
var list, vals;
|
110
|
-
vals = input_groups.map(function() {
|
111
|
-
var options, v;
|
112
|
-
v = $(this).find('input._reference').val();
|
113
|
-
options = $(this).find('input._nest-options').val();
|
114
|
-
if (options.length > 0) {
|
115
|
-
v += "|" + options;
|
116
|
-
}
|
117
|
-
return v;
|
118
|
-
});
|
119
|
-
list = $.map($.makeArray(vals), function(v) {
|
120
|
-
if (v) {
|
121
|
-
return '{{' + v + '}}';
|
122
|
-
}
|
123
|
-
});
|
124
|
-
return $.makeArray(list).join("\n");
|
125
|
-
}
|
126
|
-
});
|
127
|
-
|
128
|
-
pointerContent = function(vals) {
|
129
|
-
return decko.pointerContent(vals);
|
130
|
-
};
|
131
|
-
|
132
|
-
permissionsContent = function(ed) {
|
133
|
-
var groups, indivs;
|
134
|
-
if (ed.find('#inherit').is(':checked')) {
|
135
|
-
return '_left';
|
136
|
-
}
|
137
|
-
groups = ed.find('.perm-group input:checked').map(function() {
|
138
|
-
return $(this).val();
|
139
|
-
});
|
140
|
-
indivs = ed.find('.perm-indiv input').map(function() {
|
141
|
-
return $(this).val();
|
142
|
-
});
|
143
|
-
return pointerContent($.makeArray(groups).concat($.makeArray(indivs)));
|
144
|
-
};
|
145
|
-
|
146
|
-
}).call(this);
|
147
|
-
|
148
|
-
// script_pointer_list_editor.js.coffee
|
149
|
-
(function() {
|
150
|
-
$(window).ready(function() {
|
151
|
-
$('body').on('click', '._pointer-item-add', function(event) {
|
152
|
-
decko.addPointerItem(this);
|
153
|
-
return event.preventDefault();
|
154
|
-
});
|
155
|
-
$('body').on('keydown', '.pointer-item-text', function(event) {
|
156
|
-
if (event.key === 'Enter') {
|
157
|
-
decko.addPointerItem(this);
|
158
|
-
return event.preventDefault();
|
159
|
-
}
|
160
|
-
});
|
161
|
-
$('body').on('keyup', '.pointer-item-text', function(_event) {
|
162
|
-
return decko.updateAddItemButton(this);
|
163
|
-
});
|
164
|
-
return $('body').on('click', '.pointer-item-delete', function() {
|
165
|
-
var item, list;
|
166
|
-
item = $(this).closest('li');
|
167
|
-
list = item.closest('ul');
|
168
|
-
if (list.find('.pointer-li').length > 1) {
|
169
|
-
item.remove();
|
170
|
-
} else {
|
171
|
-
item.find('input').val('');
|
172
|
-
}
|
173
|
-
return decko.updateAddItemButton(list);
|
174
|
-
});
|
175
|
-
});
|
176
|
-
|
177
|
-
decko.slotReady(function(slot) {
|
178
|
-
return slot.find('.pointer-list-editor').each(function() {
|
179
|
-
return decko.updateAddItemButton(this);
|
180
|
-
});
|
181
|
-
});
|
182
|
-
|
183
|
-
$.extend(decko, {
|
184
|
-
addPointerItem: function(el) {
|
185
|
-
var newInput, slot;
|
186
|
-
slot = $(el).slot();
|
187
|
-
slot.trigger("slotDestroy");
|
188
|
-
newInput = decko.nextPointerInput(decko.lastPointerItem(el));
|
189
|
-
newInput.val('');
|
190
|
-
slot.trigger("slotReady");
|
191
|
-
decko.initializeEditors(slot);
|
192
|
-
newInput.first().focus();
|
193
|
-
decko.updateAddItemButton(el);
|
194
|
-
return decko.initPointerList(newInput);
|
195
|
-
},
|
196
|
-
nextPointerInput: function(lastItem) {
|
197
|
-
var all_empty, i, input, lastInputs, len, newItem;
|
198
|
-
lastInputs = lastItem.find('input');
|
199
|
-
all_empty = true;
|
200
|
-
for (i = 0, len = lastInputs.length; i < len; i++) {
|
201
|
-
input = lastInputs[i];
|
202
|
-
all_empty = all_empty && $(input).val() === '';
|
203
|
-
}
|
204
|
-
if (all_empty) {
|
205
|
-
return lastInputs;
|
206
|
-
}
|
207
|
-
newItem = lastItem.clone();
|
208
|
-
lastItem.after(newItem);
|
209
|
-
newItem.attr("data-index", parseInt(lastItem.attr("data-index") + 1));
|
210
|
-
return newItem.find('input');
|
211
|
-
},
|
212
|
-
lastPointerItem: function(el) {
|
213
|
-
return $(el).closest('.content-editor').find('.pointer-li:last');
|
214
|
-
},
|
215
|
-
updateAddItemButton: function(el) {
|
216
|
-
var button, disabled;
|
217
|
-
button = $(el).closest('.content-editor').find('._pointer-item-add');
|
218
|
-
disabled = decko.lastPointerItem(el).find('input').val() === '';
|
219
|
-
return button.prop('disabled', disabled);
|
220
|
-
}
|
221
|
-
});
|
222
|
-
|
223
|
-
}).call(this);
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/card/lazy_tab.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
class LazyTab < Tab
|
3
|
-
def url
|
4
|
-
@url ||= (config_hash? && @config[:path]) || format.path(view: view)
|
5
|
-
end
|
6
|
-
|
7
|
-
def view
|
8
|
-
@view ||= (config_hash? && @config[:view]) || @config
|
9
|
-
end
|
10
|
-
|
11
|
-
def tab_button
|
12
|
-
if url
|
13
|
-
super
|
14
|
-
else
|
15
|
-
wrap_with(:li, label, role: "presentation")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def button_attrib
|
20
|
-
@button_attrib ||= super.merge("data-url" => url.html_safe)
|
21
|
-
end
|
22
|
-
|
23
|
-
def tab_button_link
|
24
|
-
add_class button_attrib, "load" unless active?
|
25
|
-
super
|
26
|
-
end
|
27
|
-
|
28
|
-
def content
|
29
|
-
@content ||= ""
|
30
|
-
end
|
31
|
-
|
32
|
-
def tab_pane args=nil, &block
|
33
|
-
@content = yield if active? && block_given?
|
34
|
-
super
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
data/lib/card/tab.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
class Tab
|
3
|
-
attr_reader :format, :name, :label, :content, :button_attrib
|
4
|
-
|
5
|
-
class << self
|
6
|
-
def tab_objects format, tab_hash, active_name, klass=nil
|
7
|
-
klass ||= Card::Tab
|
8
|
-
active_name = active active_name, tab_hash.keys
|
9
|
-
tab_hash.map do |name, config|
|
10
|
-
klass.new format, name, active_name, config
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def active requested, keys
|
17
|
-
r = requested.to_name
|
18
|
-
r && keys.find { |k| k.to_name == r } || keys.first
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
delegate :add_class, :wrap_with, :unique_id, :link_to, to: :format
|
23
|
-
|
24
|
-
def initialize format, name, active_name, config
|
25
|
-
@format = format
|
26
|
-
@name = name
|
27
|
-
@active_name = active_name
|
28
|
-
@config = config
|
29
|
-
end
|
30
|
-
|
31
|
-
def tab_button
|
32
|
-
add_class button_attrib, "active" if active?
|
33
|
-
wrap_with :li, tab_button_link,
|
34
|
-
role: :presentation,
|
35
|
-
class: "nav-item tab-li-#{name}"
|
36
|
-
end
|
37
|
-
|
38
|
-
def tab_pane args=nil
|
39
|
-
pane_attr = { role: :tabpanel, id: tab_id }
|
40
|
-
pane_attr.merge! args if args.present?
|
41
|
-
add_class pane_attr, "tab-pane tab-pane-#{name}"
|
42
|
-
add_class pane_attr, "active" if active?
|
43
|
-
wrap_with :div, content, pane_attr
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def config_hash?
|
49
|
-
@config.is_a? Hash
|
50
|
-
end
|
51
|
-
|
52
|
-
def label
|
53
|
-
@label ||= (config_hash? && @config[:title]) || name
|
54
|
-
end
|
55
|
-
|
56
|
-
def content
|
57
|
-
@content ||= config_hash? ? @config[:content] : @config
|
58
|
-
end
|
59
|
-
|
60
|
-
def button_attrib
|
61
|
-
@button_attrib ||= (config_hash? && @config[:button_attr]) || {}
|
62
|
-
end
|
63
|
-
|
64
|
-
def tab_button_link
|
65
|
-
add_class button_attrib, "nav-link"
|
66
|
-
|
67
|
-
link_to label, button_attrib.merge(
|
68
|
-
path: "##{tab_id}",
|
69
|
-
role: "tab",
|
70
|
-
"data-toggle" => "tab",
|
71
|
-
"data-tab-name" => name
|
72
|
-
)
|
73
|
-
end
|
74
|
-
|
75
|
-
def tab_id
|
76
|
-
@tab_id ||= "#{unique_id}-#{name.to_name.safe_key}"
|
77
|
-
end
|
78
|
-
|
79
|
-
def active?
|
80
|
-
name == @active_name
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|