thecore_ui_rails_admin 2.1.3 → 2.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/rails_admin/custom/ckeditor_ajax.js.coffee +7 -0
- data/app/assets/javascripts/rails_admin/custom/timer.js +135 -0
- data/app/assets/javascripts/rails_admin/custom/ui.js +115 -0
- data/app/assets/javascripts/rails_admin/ra.widgets.coffee +233 -0
- data/app/assets/stylesheets/rails_admin/custom/flashing.scss +28 -0
- data/app/assets/stylesheets/rails_admin/custom/theming.scss +199 -0
- data/app/assets/stylesheets/rails_admin/custom/togglable-sidebar.scss +112 -0
- data/app/views/contact_mailer/contact_message.html.erb +5 -0
- data/app/views/devise/confirmations/new.html.erb +16 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/password_change.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise/menu/_login_items.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.erb +25 -0
- data/app/views/devise/passwords/new.html.erb +18 -0
- data/app/views/devise/registrations/edit.html.erb +45 -0
- data/app/views/devise/registrations/new.html.erb +29 -0
- data/app/views/devise/sessions/new.html.erb +28 -0
- data/app/views/devise/shared/_links.html.erb +25 -0
- data/app/views/devise/unlocks/new.html.erb +16 -0
- data/app/views/home/index.html.erb +5 -0
- data/app/views/kaminari/_first_page.html.erb +3 -0
- data/app/views/kaminari/_gap.html.erb +3 -0
- data/app/views/kaminari/_last_page.html.erb +3 -0
- data/app/views/kaminari/_next_page.html.erb +3 -0
- data/app/views/kaminari/_page.html.erb +9 -0
- data/app/views/kaminari/_paginator.html.erb +15 -0
- data/app/views/kaminari/_prev_page.html.erb +3 -0
- data/app/views/layouts/_footer.html.erb +3 -0
- data/app/views/layouts/_messages.html.erb +9 -0
- data/app/views/layouts/_navigation.html.erb +20 -0
- data/app/views/layouts/_navigation_links.html.erb +7 -0
- data/app/views/layouts/mailer.html.erb +6 -0
- data/app/views/layouts/mailer.text.erb +1 -0
- data/app/views/layouts/rails_admin/_navigation.html.haml +13 -0
- data/app/views/layouts/rails_admin/_secondary_navigation.html.haml +3 -0
- data/app/views/layouts/rails_admin/_sidebar_navigation.html.haml +4 -0
- data/app/views/layouts/rails_admin/_user_navigation.html.haml +7 -0
- data/app/views/layouts/rails_admin/application.html.haml +59 -0
- data/app/views/layouts/rails_admin/pjax.html.haml +25 -0
- data/app/views/layouts/thecore.html.erb +42 -0
- data/app/views/pages/contact.html.erb +54 -0
- data/app/views/pages/home.html.erb +2 -0
- data/app/views/pages/inside.html.erb +4 -0
- data/app/views/rails_admin/main/_card.html.haml +17 -0
- data/app/views/rails_admin/main/_modal_interaction.html.erb +53 -0
- data/app/views/rails_admin/main/dashboard.html.haml +25 -0
- data/app/views/rails_admin/main/index.html.haml +90 -0
- data/app/views/shared/_flash.html.erb +10 -0
- data/app/views/users/confirmations/new.html.erb +16 -0
- data/app/views/users/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/users/mailer/password_change.html.erb +3 -0
- data/app/views/users/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/users/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/users/passwords/edit.html.erb +19 -0
- data/app/views/users/passwords/new.html.erb +15 -0
- data/app/views/users/registrations/edit.html.erb +27 -0
- data/app/views/users/registrations/new.html.erb +17 -0
- data/app/views/users/sessions/new.html.erb +37 -0
- data/app/views/users/shared/_links.html.erb +26 -0
- data/app/views/users/unlocks/new.html.erb +16 -0
- data/config/initializers/rails_admin.rb +49 -0
- data/config/initializers/thecore_concern.rb +125 -0
- data/config/locales/en.index_cards.custom.yml +8 -0
- data/config/locales/en.main.yml +27 -0
- data/config/locales/en.rails_admin.yml +34 -0
- data/config/locales/en.rollincode.yml +5 -0
- data/config/locales/it.index_cards.custom.yml +20 -0
- data/config/locales/it.main.yml +27 -0
- data/config/locales/it.rails_admin.yml +4 -0
- data/config/locales/it.rollincode.yml +5 -0
- data/config/routes.rb +10 -0
- data/lib/thecore_ui_rails_admin.rb +3 -0
- data/lib/thecore_ui_rails_admin/engine.rb +7 -0
- data/lib/thecore_ui_rails_admin/version.rb +1 -1
- metadata +88 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78a1dd7ba203dc1d336c00fb86f0e9f7cf2c796b2b24511d062c273eddbf1eaa
|
4
|
+
data.tar.gz: a359435b170c33d16d5ff47b8642f4d132e62a07491fd05056bc8b884bded8f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 510fa296d40ae2d48f0c00a03216cd7fc176b1796686e25e8f04f42933ed58e64a96abf7069c8b60a4bc54f1688c6b16ff17e970df7356ec30b93be8a6277c10
|
7
|
+
data.tar.gz: 829585f7fb0ba54de9a8dc27be4b548d19a2e54051bd7ed991f549954bc200523ed21cb799f30489425a6601b1c7b7ff62a4e92a08beae18fe92e5e5047f8646
|
@@ -0,0 +1,135 @@
|
|
1
|
+
(function (root, factory) {
|
2
|
+
'use strict'
|
3
|
+
if (typeof define === 'function' && define.amd) define([], factory)
|
4
|
+
else if (typeof exports === 'object') module.exports = factory()
|
5
|
+
else root.Timer = factory()
|
6
|
+
}(this, function () {
|
7
|
+
'use strict'
|
8
|
+
|
9
|
+
var defaultOptions = {
|
10
|
+
tick : 1,
|
11
|
+
onstart : null,
|
12
|
+
ontick : null,
|
13
|
+
onpause : null,
|
14
|
+
onstop : null,
|
15
|
+
onend : null
|
16
|
+
}
|
17
|
+
|
18
|
+
var Timer = function (options) {
|
19
|
+
if (!(this instanceof Timer)) return new Timer(options)
|
20
|
+
this._ = {
|
21
|
+
id : +new Date,
|
22
|
+
options : {},
|
23
|
+
duration : 0,
|
24
|
+
status : 'initialized',
|
25
|
+
start : 0,
|
26
|
+
measures : []
|
27
|
+
}
|
28
|
+
for (var prop in defaultOptions) this._.options[prop] = defaultOptions[prop]
|
29
|
+
this.options(options)
|
30
|
+
}
|
31
|
+
|
32
|
+
Timer.prototype.start = function (duration) {
|
33
|
+
if (!+duration && !this._.duration) return this
|
34
|
+
duration && (duration *= 1000)
|
35
|
+
if (this._.timeout && this._.status === 'started') return this
|
36
|
+
this._.duration = duration || this._.duration
|
37
|
+
this._.timeout = setTimeout(end.bind(this), this._.duration)
|
38
|
+
if (typeof this._.options.ontick === 'function')
|
39
|
+
this._.interval = setInterval(function () {
|
40
|
+
trigger.call(this, 'ontick', this.getDuration())
|
41
|
+
}.bind(this), +this._.options.tick * 1000)
|
42
|
+
this._.start = +new Date
|
43
|
+
this._.status = 'started'
|
44
|
+
trigger.call(this, 'onstart', this.getDuration())
|
45
|
+
return this
|
46
|
+
}
|
47
|
+
|
48
|
+
Timer.prototype.pause = function () {
|
49
|
+
if (this._.status !== 'started') return this
|
50
|
+
this._.duration -= (+new Date - this._.start)
|
51
|
+
clear.call(this, false)
|
52
|
+
this._.status = 'paused'
|
53
|
+
trigger.call(this, 'onpause')
|
54
|
+
return this
|
55
|
+
}
|
56
|
+
|
57
|
+
Timer.prototype.stop = function () {
|
58
|
+
if (!/started|paused/.test(this._.status)) return this
|
59
|
+
clear.call(this, true)
|
60
|
+
this._.status = 'stopped'
|
61
|
+
trigger.call(this, 'onstop')
|
62
|
+
return this
|
63
|
+
}
|
64
|
+
|
65
|
+
Timer.prototype.getDuration = function () {
|
66
|
+
if (this._.status === 'started')
|
67
|
+
return this._.duration - (+new Date - this._.start)
|
68
|
+
if (this._.status === 'paused') return this._.duration
|
69
|
+
return 0
|
70
|
+
}
|
71
|
+
|
72
|
+
Timer.prototype.getStatus = function () {
|
73
|
+
return this._.status
|
74
|
+
}
|
75
|
+
|
76
|
+
Timer.prototype.options = function (option, value) {
|
77
|
+
if (option && value) this._.options[option] = value
|
78
|
+
if (!value && typeof option === 'object')
|
79
|
+
for (var prop in option)
|
80
|
+
if (this._.options.hasOwnProperty(prop))
|
81
|
+
this._.options[prop] = option[prop]
|
82
|
+
return this
|
83
|
+
}
|
84
|
+
|
85
|
+
Timer.prototype.on = function (option, value) {
|
86
|
+
if (typeof option !== 'string' || typeof value !== 'function') return this
|
87
|
+
if (!(/^on/).test(option))
|
88
|
+
option = 'on' + option
|
89
|
+
if (this._.options.hasOwnProperty(option))
|
90
|
+
this._.options[option] = value
|
91
|
+
return this
|
92
|
+
}
|
93
|
+
|
94
|
+
Timer.prototype.off = function (option) {
|
95
|
+
if (typeof option !== 'string') return this
|
96
|
+
option = option.toLowerCase()
|
97
|
+
if (option === 'all') {
|
98
|
+
this._.options = defaultOptions
|
99
|
+
return this
|
100
|
+
}
|
101
|
+
if (!(/^on/).test(option)) option = 'on' + option
|
102
|
+
if (this._.options.hasOwnProperty(option))
|
103
|
+
this._.options[option] = defaultOptions[option]
|
104
|
+
return this
|
105
|
+
}
|
106
|
+
|
107
|
+
Timer.prototype.measureStart = function (label) {
|
108
|
+
this._.measures[label || ''] = +new Date
|
109
|
+
return this
|
110
|
+
}
|
111
|
+
|
112
|
+
Timer.prototype.measureStop = function (label) {
|
113
|
+
return +new Date - this._.measures[label || '']
|
114
|
+
}
|
115
|
+
|
116
|
+
function end () {
|
117
|
+
clear.call(this)
|
118
|
+
this._.status = 'stopped'
|
119
|
+
trigger.call(this, 'onend')
|
120
|
+
}
|
121
|
+
|
122
|
+
function trigger (event) {
|
123
|
+
var callback = this._.options[event],
|
124
|
+
args = [].slice.call(arguments, 1)
|
125
|
+
typeof callback === 'function' && callback.apply(this, args)
|
126
|
+
}
|
127
|
+
|
128
|
+
function clear (clearDuration) {
|
129
|
+
clearTimeout(this._.timeout)
|
130
|
+
clearInterval(this._.interval)
|
131
|
+
if (clearDuration === true) this._.duration = 0
|
132
|
+
}
|
133
|
+
|
134
|
+
return Timer
|
135
|
+
}))
|
@@ -0,0 +1,115 @@
|
|
1
|
+
//= require selectize
|
2
|
+
//= require timer
|
3
|
+
//= require froala_editor.min.js
|
4
|
+
//= require plugins/align.min.js
|
5
|
+
//= require plugins/char_counter.min.js
|
6
|
+
//= require plugins/colors.min.js
|
7
|
+
//= require plugins/font_family.min.js
|
8
|
+
//= require plugins/font_size.min.js
|
9
|
+
//= require plugins/line_breaker.min.js
|
10
|
+
//= require plugins/link.min.js
|
11
|
+
//= require plugins/lists.min.js
|
12
|
+
//= require plugins/special_characters.min.js
|
13
|
+
//= require plugins/url.min.js
|
14
|
+
//= require languages/it.js
|
15
|
+
//= require rails_admin/custom/ckeditor_ajax
|
16
|
+
//= require_tree .
|
17
|
+
|
18
|
+
$(document).on('ready pjax:success', function(e) {
|
19
|
+
handleActiveBase();
|
20
|
+
|
21
|
+
function handleActiveBase() {
|
22
|
+
$('.sub-menu').each(function() {
|
23
|
+
if ($(this).hasClass('active')) {
|
24
|
+
$(this).parent().prev().addClass('active');
|
25
|
+
$(this).parent().prev().addClass('open');
|
26
|
+
$(this).parent().slideDown();
|
27
|
+
}
|
28
|
+
});
|
29
|
+
}
|
30
|
+
// home dashboard dark theme
|
31
|
+
if ((new RegExp('app/$').test(e.currentTarget.URL) || new RegExp('app$').test(e.currentTarget.URL)) && !new RegExp('app/app').test(e.currentTarget.URL)) {
|
32
|
+
$('.page-header, .content').addClass('dashboard');
|
33
|
+
} else {
|
34
|
+
$('.page-header, .content').removeClass('dashboard');
|
35
|
+
}
|
36
|
+
|
37
|
+
$('textarea[data-richtext="froala-wysiwyg"').froalaEditor();
|
38
|
+
|
39
|
+
// $(document).ready(function () {
|
40
|
+
// Hide and show the sidebar
|
41
|
+
// Make the sidebar button shine a bit
|
42
|
+
// setTimeout(function() {
|
43
|
+
// $('#sidebar-collapse').addClass("flash");
|
44
|
+
// }, 500);
|
45
|
+
// setTimeout(function() {
|
46
|
+
// if (!$('#wrapper').hasClass('toggled'))
|
47
|
+
// $('#wrapper').addClass('toggled');
|
48
|
+
// }, 1200);
|
49
|
+
// });
|
50
|
+
});
|
51
|
+
|
52
|
+
$(function() {
|
53
|
+
var array_menu = [];
|
54
|
+
var lvl_1 = null;
|
55
|
+
var count = 0;
|
56
|
+
|
57
|
+
$('.sidebar-nav li').each(function(index, item) {
|
58
|
+
if ($(item).hasClass('dropdown-header')) {
|
59
|
+
lvl_1 = count++;
|
60
|
+
array_menu[lvl_1] = []
|
61
|
+
} else {
|
62
|
+
$(item).addClass('sub-menu sub-menu-' + lvl_1);
|
63
|
+
}
|
64
|
+
});
|
65
|
+
|
66
|
+
for (var i = 0; i <= array_menu.length; i++) {
|
67
|
+
$('.sub-menu-' + i).wrapAll("<div class='sub-menu-container' />");
|
68
|
+
}
|
69
|
+
|
70
|
+
$('.sub-menu-container').hide();
|
71
|
+
|
72
|
+
handleActiveBase();
|
73
|
+
|
74
|
+
function handleActiveBase() {
|
75
|
+
$('.sub-menu').each(function() {
|
76
|
+
if ($(this).hasClass('active')) {
|
77
|
+
$(this).parent().prev().addClass('active');
|
78
|
+
$(this).parent().slideDown();
|
79
|
+
}
|
80
|
+
});
|
81
|
+
}
|
82
|
+
|
83
|
+
$('.dropdown-header').bind('click', function() {
|
84
|
+
$('.dropdown-header').removeClass('open'); //Rimuove tutte le classi open
|
85
|
+
$(this).toggleClass('open'); // Apre la corrente
|
86
|
+
// Se la corrente è già aperta, allora la chiude
|
87
|
+
|
88
|
+
$('.dropdown-header').removeClass('active');
|
89
|
+
$('.sub-menu-container').stop().slideUp();
|
90
|
+
$(this).toggleClass('active');
|
91
|
+
$(this).next('.sub-menu-container').stop().slideDown();
|
92
|
+
});
|
93
|
+
});
|
94
|
+
|
95
|
+
$(document).ready(function () {
|
96
|
+
// All pjax in sidebar-nav make the menu disappear when clicked
|
97
|
+
$(".sidebar-nav a[class=pjax]").on("click", function(){
|
98
|
+
$('#wrapper').toggleClass('toggled');
|
99
|
+
});
|
100
|
+
|
101
|
+
$('#sidebar-collapse').on('click', function() {
|
102
|
+
$('#wrapper').toggleClass('toggled');
|
103
|
+
});
|
104
|
+
|
105
|
+
$('textarea[data-richtext="froala-wysiwyg"').froalaEditor();
|
106
|
+
// // Hide and show the sidebar
|
107
|
+
// // Make the sidebar button shine a bit
|
108
|
+
// setTimeout(function() {
|
109
|
+
// $('#sidebar-collapse').addClass("flash");
|
110
|
+
// }, 500);
|
111
|
+
// setTimeout(function() {
|
112
|
+
// if (!$('#wrapper').hasClass('toggled'))
|
113
|
+
// $('#wrapper').addClass('toggled');
|
114
|
+
// }, 1200);
|
115
|
+
});
|
@@ -0,0 +1,233 @@
|
|
1
|
+
$(document).on 'rails_admin.dom_ready', (e, content) ->
|
2
|
+
content = if content then content else $('form')
|
3
|
+
|
4
|
+
if content.length # don't waste time otherwise
|
5
|
+
|
6
|
+
# colorpicker
|
7
|
+
|
8
|
+
content.find('[data-color]').each ->
|
9
|
+
that = this
|
10
|
+
$(this).ColorPicker
|
11
|
+
color: $(that).val()
|
12
|
+
onShow: (el) ->
|
13
|
+
$(el).fadeIn(500)
|
14
|
+
false
|
15
|
+
onHide: (el) ->
|
16
|
+
$(el).fadeOut(500)
|
17
|
+
false
|
18
|
+
onChange: (hsb, hex, rgb) ->
|
19
|
+
$(that).val(hex)
|
20
|
+
$(that).css('backgroundColor', '#' + hex)
|
21
|
+
|
22
|
+
# datetime picker
|
23
|
+
$.fn.datetimepicker.defaults.icons =
|
24
|
+
time: 'fa fa-clock'
|
25
|
+
date: 'fa fa-calendar'
|
26
|
+
up: 'fa fa-chevron-up'
|
27
|
+
down: 'fa fa-chevron-down'
|
28
|
+
previous: 'fa fa-angle-double-left'
|
29
|
+
next: 'fa fa-angle-double-right'
|
30
|
+
today: 'fa fa-dot-circle'
|
31
|
+
clear: 'fa fa-trash'
|
32
|
+
close: 'fa fa-times'
|
33
|
+
|
34
|
+
content.find('[data-datetimepicker]').each ->
|
35
|
+
options = $(this).data('options')
|
36
|
+
$.extend(options, {locale: RailsAdmin.I18n.locale})
|
37
|
+
$(this).datetimepicker options
|
38
|
+
|
39
|
+
# enumeration
|
40
|
+
|
41
|
+
content.find('[data-enumeration]').each ->
|
42
|
+
if $(this).is('[multiple]')
|
43
|
+
$(this).filteringMultiselect $(this).data('options')
|
44
|
+
else
|
45
|
+
$(this).filteringSelect $(this).data('options')
|
46
|
+
|
47
|
+
# fileupload
|
48
|
+
|
49
|
+
content.find('[data-fileupload]').each ->
|
50
|
+
input = this
|
51
|
+
$(this).on 'click', ".delete input[type='checkbox']", ->
|
52
|
+
$(input).children('.toggle').toggle('slow')
|
53
|
+
|
54
|
+
# fileupload-preview
|
55
|
+
|
56
|
+
content.find('[data-fileupload]').change ->
|
57
|
+
input = this
|
58
|
+
image_container = $("#" + input.id).parent().children(".preview")
|
59
|
+
unless image_container.length
|
60
|
+
image_container = $("#" + input.id).parent().prepend($('<img />').addClass('preview').addClass('img-thumbnail')).find('img.preview')
|
61
|
+
image_container.parent().find('img:not(.preview)').hide()
|
62
|
+
ext = $("#" + input.id).val().split('.').pop().toLowerCase()
|
63
|
+
if input.files and input.files[0] and $.inArray(ext, ['gif', 'png', 'jpg', 'jpeg', 'bmp']) != -1
|
64
|
+
reader = new FileReader()
|
65
|
+
reader.onload = (e) ->
|
66
|
+
image_container.attr "src", e.target.result
|
67
|
+
reader.readAsDataURL input.files[0]
|
68
|
+
image_container.show()
|
69
|
+
else
|
70
|
+
image_container.hide()
|
71
|
+
|
72
|
+
# filtering-multiselect
|
73
|
+
|
74
|
+
content.find('[data-filteringmultiselect]').each ->
|
75
|
+
$(this).filteringMultiselect $(this).data('options')
|
76
|
+
if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
|
77
|
+
$(this).siblings('.btn').remove()
|
78
|
+
else
|
79
|
+
$(this).parents('.control-group').first().remoteForm()
|
80
|
+
|
81
|
+
# filtering-select
|
82
|
+
|
83
|
+
content.find('[data-filteringselect]').each ->
|
84
|
+
$(this).filteringSelect $(this).data('options')
|
85
|
+
if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
|
86
|
+
$(this).siblings('.btn').remove()
|
87
|
+
else
|
88
|
+
$(this).parents('.control-group').first().remoteForm()
|
89
|
+
|
90
|
+
# nested-many
|
91
|
+
|
92
|
+
content.find('[data-nestedmany]').each ->
|
93
|
+
field = $(this).parents('.control-group').first()
|
94
|
+
nav = field.find('> .controls > .nav')
|
95
|
+
tab_content = field.find('> .tab-content')
|
96
|
+
toggler = field.find('> .controls > .btn-group > .toggler')
|
97
|
+
# add each nested field to a tab-pane and reference it in the nav
|
98
|
+
tab_content.children('.fields:not(.tab-pane)').addClass('tab-pane').each ->
|
99
|
+
$(this).attr('id', 'unique-id-' + (new Date().getTime()) + Math.floor(Math.random() * 100000)) # some elements are created on the same ms
|
100
|
+
nav.append('<li><a data-toggle="tab" href="#' + this.id + '">' + $(this).children('.object-infos').data('object-label') + '</a></li>')
|
101
|
+
# only if no tab is set to active
|
102
|
+
if nav.find("> li.active").length == 0
|
103
|
+
# init first tab, toggler and tab_content/tabs visibility
|
104
|
+
nav.find("> li > a[data-toggle='tab']:first").tab('show')
|
105
|
+
if nav.children().length == 0
|
106
|
+
nav.hide()
|
107
|
+
tab_content.hide()
|
108
|
+
toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right')
|
109
|
+
else
|
110
|
+
if toggler.hasClass('active')
|
111
|
+
nav.show()
|
112
|
+
tab_content.show()
|
113
|
+
toggler.children('i').addClass('icon-chevron-down')
|
114
|
+
else
|
115
|
+
nav.hide()
|
116
|
+
tab_content.hide()
|
117
|
+
toggler.children('i').addClass('icon-chevron-right')
|
118
|
+
|
119
|
+
# nested-one
|
120
|
+
|
121
|
+
content.find('[data-nestedone]').each ->
|
122
|
+
field = $(this).parents('.control-group').first()
|
123
|
+
nav = field.find("> .controls > .nav")
|
124
|
+
tab_content = field.find("> .tab-content")
|
125
|
+
toggler = field.find('> .controls > .btn-group > .toggler')
|
126
|
+
tab_content.children(".fields:not(.tab-pane)").addClass('tab-pane active').each ->
|
127
|
+
# Convert the "add nested field" button to just showing the title of the new model
|
128
|
+
field.find('> .controls .add_nested_fields').removeClass('add_nested_fields').html($(this).children('.object-infos').data('object-label'))
|
129
|
+
nav.append('<li><a data-toggle="tab" href="#' + this.id + '">' + $(this).children('.object-infos').data('object-label') + '</a></li>')
|
130
|
+
first_tab = nav.find("> li > a[data-toggle='tab']:first")
|
131
|
+
first_tab.tab('show')
|
132
|
+
field.find("> .controls > [data-target]:first").html('<i class="icon-white"></i> ' + first_tab.html())
|
133
|
+
nav.hide()
|
134
|
+
if nav.children().length == 0
|
135
|
+
nav.hide()
|
136
|
+
tab_content.hide()
|
137
|
+
toggler.addClass('disabled').removeClass('active').children('i').addClass('icon-chevron-right')
|
138
|
+
else
|
139
|
+
if toggler.hasClass('active')
|
140
|
+
toggler.children('i').addClass('icon-chevron-down')
|
141
|
+
tab_content.show()
|
142
|
+
else
|
143
|
+
toggler.children('i').addClass('icon-chevron-right')
|
144
|
+
tab_content.hide()
|
145
|
+
|
146
|
+
# polymorphic-association
|
147
|
+
|
148
|
+
content.find('[data-polymorphic]').each ->
|
149
|
+
type_select = $(this)
|
150
|
+
field = type_select.parents('.control-group').first()
|
151
|
+
object_select = field.find('select').last()
|
152
|
+
urls = type_select.data('urls')
|
153
|
+
type_select.on 'change', (e) ->
|
154
|
+
if $(this).val() is ''
|
155
|
+
object_select.html('<option value=""></option>')
|
156
|
+
else
|
157
|
+
$.ajax
|
158
|
+
url: urls[type_select.val()]
|
159
|
+
data:
|
160
|
+
compact: true
|
161
|
+
all: true
|
162
|
+
beforeSend: (xhr) ->
|
163
|
+
xhr.setRequestHeader("Accept", "application/json")
|
164
|
+
success: (data, status, xhr) ->
|
165
|
+
html = $('<option></option>')
|
166
|
+
$(data).each (i, el) ->
|
167
|
+
option = $('<option></option>')
|
168
|
+
option.attr('value', el.id)
|
169
|
+
option.text(el.label)
|
170
|
+
html = html.add(option)
|
171
|
+
object_select.html(html)
|
172
|
+
|
173
|
+
# ckeditor
|
174
|
+
|
175
|
+
goCkeditors = ->
|
176
|
+
content.find('[data-richtext=ckeditor]').not('.ckeditored').each (index, domEle) ->
|
177
|
+
try
|
178
|
+
if instance = window.CKEDITOR.instances[this.id]
|
179
|
+
instance.destroy(true)
|
180
|
+
window.CKEDITOR.replace(this, $(this).data('options'))
|
181
|
+
$(this).addClass('ckeditored')
|
182
|
+
|
183
|
+
$editors = content.find('[data-richtext=ckeditor]').not('.ckeditored')
|
184
|
+
if $editors.length
|
185
|
+
if not window.CKEDITOR
|
186
|
+
options = $editors.first().data('options')
|
187
|
+
window.CKEDITOR_BASEPATH = options['base_location']
|
188
|
+
$.getScript options['jspath'], (script, textStatus, jqXHR) =>
|
189
|
+
goCkeditors()
|
190
|
+
else
|
191
|
+
goCkeditors()
|
192
|
+
|
193
|
+
#codemirror
|
194
|
+
|
195
|
+
goCodeMirrors = (array) =>
|
196
|
+
array.each (index, domEle) ->
|
197
|
+
options = $(this).data('options')
|
198
|
+
textarea = this
|
199
|
+
$.getScript options['locations']['mode'], (script, textStatus, jqXHR) ->
|
200
|
+
$('head').append('<link href="' + options['locations']['theme'] + '" rel="stylesheet" media="all" type="text\/css">')
|
201
|
+
CodeMirror.fromTextArea(textarea, options['options'])
|
202
|
+
$(textarea).addClass('codemirrored')
|
203
|
+
|
204
|
+
array = content.find('[data-richtext=codemirror]').not('.codemirrored')
|
205
|
+
if array.length
|
206
|
+
@array = array
|
207
|
+
if not window.CodeMirror
|
208
|
+
options = $(array[0]).data('options')
|
209
|
+
$('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
|
210
|
+
$.getScript options['jspath'], (script, textStatus, jqXHR) =>
|
211
|
+
goCodeMirrors(@array)
|
212
|
+
else
|
213
|
+
goCodeMirrors(@array)
|
214
|
+
|
215
|
+
# bootstrap_wysihtml5
|
216
|
+
|
217
|
+
goBootstrapWysihtml5s = (array, config_options) =>
|
218
|
+
array.each ->
|
219
|
+
$(@).addClass('bootstrap-wysihtml5ed')
|
220
|
+
$(@).closest('.controls').addClass('well')
|
221
|
+
$(@).wysihtml5(config_options)
|
222
|
+
|
223
|
+
array = content.find('[data-richtext=bootstrap-wysihtml5]').not('.bootstrap-wysihtml5ed')
|
224
|
+
if array.length
|
225
|
+
@array = array
|
226
|
+
options = $(array[0]).data('options')
|
227
|
+
config_options = $.parseJSON(options['config_options'])
|
228
|
+
if not window.wysihtml5
|
229
|
+
$('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
|
230
|
+
$.getScript options['jspath'], (script, textStatus, jqXHR) =>
|
231
|
+
goBootstrapWysihtml5s(@array, config_options)
|
232
|
+
else
|
233
|
+
goBootstrapWysihtml5s(@array, config_options)
|