rails_admin_ui_layout_taris 1.2.7

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: '037944e24a8e2f914c6ae9be252416426f5ada8b'
4
+ data.tar.gz: 72e336d615ec6e20af7b91c2305a2b06f6fa853c
5
+ SHA512:
6
+ metadata.gz: bfbef02842df1ba5caf983e0b8cbb7414c6125ad8575cba4fa00e947677d487cc64aa8f32dc8162f38d36db26f685eaac9d3b99da90c79278ac6608cbb032261
7
+ data.tar.gz: e94d732c4161c3b04324f872c039be2c5754325aee8769dd802a81d70474504e85f09a91780608592d40d5e64a3b5185b7a5813c995d67acf0129d11ddb90c74
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2016 Gabriele Tassoni
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # Credits
2
+ atom by James Christopher from the Noun Project
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'RailsAdminUiLayoutTaris'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ require 'bundler/gem_tasks'
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+
37
+ task default: :test
@@ -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,98 @@
1
+ //= require selectize
2
+ //= require timer
3
+ //= require_tree .
4
+
5
+ $(document).on('ready pjax:success', function(e) {
6
+ handleActiveBase();
7
+
8
+ function handleActiveBase() {
9
+ $('.sub-menu').each(function() {
10
+ if ($(this).hasClass('active')) {
11
+ $(this).parent().prev().addClass('active');
12
+ $(this).parent().prev().addClass('open');
13
+ $(this).parent().slideDown();
14
+ }
15
+ });
16
+ }
17
+ // home dashboard dark theme
18
+ if ((new RegExp('app/$').test(e.currentTarget.URL) || new RegExp('app$').test(e.currentTarget.URL)) && !new RegExp('app/app').test(e.currentTarget.URL)) {
19
+ $('.page-header, .content').addClass('dashboard');
20
+ } else {
21
+ $('.page-header, .content').removeClass('dashboard');
22
+ }
23
+
24
+ // $(document).ready(function () {
25
+ // Hide and show the sidebar
26
+ // Make the sidebar button shine a bit
27
+ // setTimeout(function() {
28
+ // $('#sidebar-collapse').addClass("flash");
29
+ // }, 500);
30
+ // setTimeout(function() {
31
+ // if (!$('#wrapper').hasClass('toggled'))
32
+ // $('#wrapper').addClass('toggled');
33
+ // }, 1200);
34
+ // });
35
+ });
36
+
37
+ $(function() {
38
+ var array_menu = [];
39
+ var lvl_1 = null;
40
+ var count = 0;
41
+
42
+ $('.sidebar-nav li').each(function(index, item) {
43
+ if ($(item).hasClass('dropdown-header')) {
44
+ lvl_1 = count++;
45
+ array_menu[lvl_1] = []
46
+ } else {
47
+ $(item).addClass('sub-menu sub-menu-' + lvl_1);
48
+ }
49
+ });
50
+
51
+ for (var i = 0; i <= array_menu.length; i++) {
52
+ $('.sub-menu-' + i).wrapAll("<div class='sub-menu-container' />");
53
+ }
54
+
55
+ $('.sub-menu-container').hide();
56
+
57
+ handleActiveBase();
58
+
59
+ function handleActiveBase() {
60
+ $('.sub-menu').each(function() {
61
+ if ($(this).hasClass('active')) {
62
+ $(this).parent().prev().addClass('active');
63
+ $(this).parent().slideDown();
64
+ }
65
+ });
66
+ }
67
+
68
+ $('.dropdown-header').bind('click', function() {
69
+ $('.dropdown-header').removeClass('open'); //Rimuove tutte le classi open
70
+ $(this).toggleClass('open'); // Apre la corrente
71
+ // Se la corrente è già aperta, allora la chiude
72
+
73
+ $('.dropdown-header').removeClass('active');
74
+ $('.sub-menu-container').stop().slideUp();
75
+ $(this).toggleClass('active');
76
+ $(this).next('.sub-menu-container').stop().slideDown();
77
+ });
78
+ });
79
+
80
+ $(document).ready(function () {
81
+ // All pjax in sidebar-nav make the menu disappear when clicked
82
+ $(".sidebar-nav a[class=pjax]").on("click", function(){
83
+ $('#wrapper').toggleClass('toggled');
84
+ });
85
+
86
+ $('#sidebar-collapse').on('click', function() {
87
+ $('#wrapper').toggleClass('toggled');
88
+ });
89
+ // // Hide and show the sidebar
90
+ // // Make the sidebar button shine a bit
91
+ // setTimeout(function() {
92
+ // $('#sidebar-collapse').addClass("flash");
93
+ // }, 500);
94
+ // setTimeout(function() {
95
+ // if (!$('#wrapper').hasClass('toggled'))
96
+ // $('#wrapper').addClass('toggled');
97
+ // }, 1200);
98
+ });
@@ -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-o'
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-o'
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)
@@ -0,0 +1,28 @@
1
+ .flash {
2
+ -moz-animation: flash 1s ease-out;
3
+ -moz-animation-iteration-count: 1;
4
+
5
+ -webkit-animation: flash 1s ease-out;
6
+ -webkit-animation-iteration-count: 1;
7
+
8
+ -ms-animation: flash 1s ease-out;
9
+ -ms-animation-iteration-count: 1;
10
+ }
11
+
12
+ @-webkit-keyframes flash {
13
+ 0% { background-color: none; }
14
+ 50% { background-color: #fbf8b2; }
15
+ 100% { background-color: none; }
16
+ }
17
+
18
+ @-moz-keyframes flash {
19
+ 0% { background-color: none; }
20
+ 50% { background-color: #fbf8b2; }
21
+ 100% { background-color: none; }
22
+ }
23
+
24
+ @-ms-keyframes flash {
25
+ 0% { background-color: none; }
26
+ 50% { background-color: #fbf8b2; }
27
+ 100% { background-color: none; }
28
+ }
@@ -0,0 +1,189 @@
1
+ @import "selectize";
2
+ @import "selectize.bootstrap3";
3
+ @import "togglable-sidebar";
4
+ @import "flashing";
5
+ @import 'font-awesome';
6
+ // @import 'rails_admin/bootstrap/_variables';
7
+ // @import "rails_admin/bootstrap-datetimepicker-build";
8
+
9
+ $RAprimary: #1c2c41;
10
+ $RAgreen: #37BC9B;
11
+ $RAblue: #3BAFDA;
12
+ $RAred: #E9573F;
13
+ $RAyellow: #F6BB42;
14
+
15
+ body {
16
+ background: rgb(59, 78, 89);
17
+ }
18
+
19
+ .page-header.dashboard {
20
+ border-color: $RAprimary;
21
+ }
22
+
23
+ .breadcrumb {
24
+ background: $RAblue;
25
+ .false a, .false:before {
26
+ color: darken($RAblue, 30%) !important;
27
+ }
28
+ .active, .active:before {
29
+ color: #FFF;
30
+ }
31
+ }
32
+
33
+ .table-striped {
34
+ border-top-color: $RAblue;
35
+ .links ul li {
36
+ padding-right: 0;
37
+ a {
38
+ border-radius: 50%;
39
+ }
40
+ }
41
+ }
42
+
43
+ .content {
44
+ margin: 0px 0 15px 0;
45
+ padding: 8px;
46
+ background: rgb(59, 78, 89);
47
+ &.dashboard {
48
+ background: rgb(59, 78, 89);
49
+ }
50
+ .page-header {
51
+ display: none;
52
+ }
53
+ }
54
+
55
+ a.delete {
56
+ color: #FFF;
57
+ }
58
+
59
+ .box {
60
+ padding: 15px;
61
+ margin-bottom: 30px;
62
+ border: 1px solid $RAprimary;
63
+ position: relative;
64
+ min-height: 170px;
65
+ transition: all 0.3s ease;
66
+ color: rgba(255,255,255,0.7);
67
+ overflow: hidden;
68
+ &:hover, &:focus {
69
+ border-color: #FFF;
70
+ .icon-bg {
71
+ transform: scale(1.5) rotate(20deg);
72
+ }
73
+ }
74
+ p {
75
+ min-height: 30px;
76
+ font-size: 15px;
77
+ font-weight: 600;
78
+ a.btn {
79
+ border-radius: 3px;
80
+ color: rgba(255,255,255,0.7) !important;
81
+ display: inline-block;
82
+ margin-bottom: 0;
83
+ font-weight: normal;
84
+ text-align: center;
85
+ vertical-align: middle;
86
+ cursor: pointer;
87
+ background-color: rgba(0, 0, 0, 0.19);
88
+ border: 1px solid transparent;
89
+ white-space: nowrap;
90
+ padding: 6px 12px;
91
+ font-size: 14px;
92
+ line-height: 1.42857143;
93
+ border-radius: 4px;
94
+ -webkit-user-select: none;
95
+ -moz-user-select: none;
96
+ -ms-user-select: none;
97
+ user-select: none;
98
+ }
99
+ }
100
+ strong {
101
+ font-size: 36px;
102
+ font-weight: 600;
103
+ }
104
+ .icon-bg {
105
+ position: absolute;
106
+ right: 0;
107
+ bottom: 0;
108
+ font-size: 100px;
109
+ color: #000;
110
+ opacity: 0.08;
111
+ filter: alpha(opacity=8);
112
+ transition: all 1s ease;
113
+ }
114
+ &.bg-info {
115
+ background-color: $RAblue;
116
+ }
117
+ &.bg-success {
118
+ background-color: $RAgreen;
119
+ }
120
+ &.bg-warning {
121
+ background-color: $RAyellow;
122
+ }
123
+ &.bg-danger {
124
+ background-color: $RAred;
125
+ }
126
+ }
127
+
128
+ /* User sign in and sign forms. */
129
+ .border-form-div {
130
+ max-width: 300px;
131
+ padding: 19px 29px 29px;
132
+ margin: 0 auto 20px;
133
+ background-color: #fff;
134
+ border: 1px solid #e5e5e5;
135
+ -webkit-border-radius: 5px;
136
+ -moz-border-radius: 5px;
137
+ border-radius: 5px;
138
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
139
+ -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
140
+ box-shadow: 0 1px 2px rgba(0,0,0,.05);
141
+ }
142
+ .border-form-div .form-signin-heading,
143
+ .border-form-div .checkbox {
144
+ margin-bottom: 10px;
145
+ }
146
+ .border-form-div input[type="text"],
147
+ .border-form-div input[type="email"],
148
+ .border-form-div input[type="password"] {
149
+ font-size: 16px;
150
+ height: auto;
151
+ margin-bottom: 15px;
152
+ padding: 7px 9px;
153
+ }
154
+
155
+ #sidebar-collapse {
156
+ background-color: transparent;
157
+ background-image: none;
158
+ border: 1px solid transparent;
159
+ color: #888;
160
+ }
161
+ #sidebar-collapse:focus {
162
+ outline: 0;
163
+ }
164
+ #sidebar-collapse:hover {
165
+ color: white;
166
+ }
167
+
168
+ .exit-button {
169
+ padding-top: 9px;
170
+ padding-bottom: 9px;
171
+ margin-top: 8px;
172
+ margin-bottom: 8px;
173
+ margin-right: 7px;
174
+ }
175
+
176
+ #app-name {
177
+ font-size: 2em;
178
+ color: #888;
179
+ font-family: 'Raleway', sans-serif;
180
+ word-wrap: normal;
181
+ }
182
+ #app-name:hover {
183
+ color: white;
184
+ text-decoration: none;
185
+ }
186
+
187
+ body.rails_admin {
188
+ padding-top: 0px;
189
+ }
@@ -0,0 +1,112 @@
1
+ /* Toggle Styles */
2
+
3
+ #wrapper {
4
+ padding-left: 0;
5
+ -webkit-transition: all 0.5s ease;
6
+ -moz-transition: all 0.5s ease;
7
+ -o-transition: all 0.5s ease;
8
+ transition: all 0.5s ease;
9
+ }
10
+ #wrapper.toggled {
11
+ padding-left: 250px;
12
+ }
13
+ #sidebar-wrapper {
14
+ z-index: 100;
15
+ position: fixed;
16
+ left: 250px;
17
+ width: 0;
18
+ height: 100%;
19
+ margin-left: -250px;
20
+ overflow-y: auto;
21
+ background: #000;
22
+ -webkit-transition: all 0.5s ease;
23
+ -moz-transition: all 0.5s ease;
24
+ -o-transition: all 0.5s ease;
25
+ transition: all 0.5s ease;
26
+ }
27
+ #wrapper.toggled #sidebar-wrapper {
28
+ width: 250px;
29
+ }
30
+ #page-content-wrapper {
31
+ z-index: 150;
32
+ width: 100%;
33
+ position: absolute;
34
+ padding: 15px;
35
+ background-color: rgb(59,78,89);
36
+ min-height: 100vh;
37
+ }
38
+ #wrapper.toggled #page-content-wrapper {
39
+ position: absolute;
40
+ margin-right: -250px;
41
+ background-color: rgb(59,78,89);
42
+ }
43
+ /* Sidebar Styles */
44
+
45
+ .sidebar-nav {
46
+ position: absolute;
47
+ top: 0;
48
+ width: 250px;
49
+ margin: 0;
50
+ padding: 0;
51
+ list-style: none;
52
+ }
53
+ .sidebar-nav li {
54
+ text-indent: 20px;
55
+ line-height: 40px;
56
+ }
57
+ .sidebar-nav li a {
58
+ display: block;
59
+ text-decoration: none;
60
+ color: #999999;
61
+ }
62
+ .sidebar-nav li a:hover {
63
+ text-decoration: none;
64
+ color: #fff;
65
+ background: rgba(255, 255, 255, 0.2);
66
+ }
67
+ .sidebar-nav li a:active,
68
+ .sidebar-nav li a:focus {
69
+ text-decoration: none;
70
+ }
71
+ .sidebar-nav > .sidebar-brand {
72
+ height: 65px;
73
+ font-size: 18px;
74
+ line-height: 60px;
75
+ }
76
+ .sidebar-nav > .sidebar-brand a {
77
+ color: #999999;
78
+ }
79
+ .sidebar-nav > .sidebar-brand a:hover {
80
+ color: #fff;
81
+ background: none;
82
+ }
83
+
84
+ body.rails_admin .sidebar-nav {
85
+ top: 0px;
86
+ }
87
+ // @media(min-width:768px) {
88
+ // #wrapper {
89
+ // padding-left: 250px;
90
+ // }
91
+ // #wrapper.toggled {
92
+ // padding-left: 0;
93
+ // }
94
+ // #sidebar-wrapper {
95
+ // width: 250px;
96
+ // z-index: 10000;
97
+ // }
98
+ // #wrapper.toggled #sidebar-wrapper {
99
+ // width: 0;
100
+ // z-index: 10000;
101
+ // }
102
+ // #page-content-wrapper {
103
+ // padding: 20px;
104
+ // position: absolute;
105
+ // z-index: 20000;
106
+ // }
107
+ // #wrapper.toggled #page-content-wrapper {
108
+ // position: absolute;
109
+ // margin-right: 0;
110
+ // z-index: 20000;
111
+ // }
112
+ // }
@@ -0,0 +1,13 @@
1
+ -# .container-fluid
2
+ -# .navbar-header
3
+ -# %button.navbar-toggle.collapsed{ type: 'button', data: { toggle: 'collapse', target: '#secondary-navigation' }, aria: {expanded: 'false', controls: 'navbar'} }
4
+ -# %span.sr-only= t('admin.toggle_navigation')
5
+ -# %span.icon-bar
6
+ -# %span.icon-bar
7
+ -# %span.icon-bar
8
+ -# - # Added support for app name setting (falling back if not existing to standard rails_admin behaviour)
9
+ -# %a.navbar-brand.pjax{href: dashboard_path}
10
+ -# = Settings.app_name rescue (_get_plugin_name[0] || 'Rails')
11
+ -# %small= _get_plugin_name[1] || 'Admin'
12
+ -# .navbar-collapse.collapse#secondary-navigation
13
+ -# = render partial: 'layouts/rails_admin/secondary_navigation'
@@ -0,0 +1,3 @@
1
+ -# %ul.sidebar-nav
2
+ - actions(:root).each do |action|
3
+ %li= link_to wording_for(:menu, action), { action: action.action_name, controller: 'rails_admin/main' }, class: action.pjax? ? "pjax" : "", style: "padding-left: 0px;"
@@ -0,0 +1,4 @@
1
+ -# %ul.sidebar-nav
2
+ = main_navigation
3
+ -# %ul.sidebar-nav
4
+ = static_navigation
@@ -0,0 +1,7 @@
1
+ - if _current_user
2
+ -# %ul.sidebar-nav
3
+ %li.dropdown-header=t :current_user
4
+ - if user_link = edit_user_link
5
+ %li.edit_user_root_link= user_link
6
+ - if logout_path.present?
7
+ %li=link_to content_tag('span', t('admin.misc.log_out'), class: 'label label-danger'), logout_path, method: logout_method
@@ -0,0 +1,59 @@
1
+ !!! 5
2
+ %html{lang: I18n.locale}
3
+ %head
4
+ %meta{content: "IE=edge", "http-equiv" => "X-UA-Compatible"}
5
+ %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
6
+ %meta{name: "viewport", content: "width=device-width, initial-scale=1"}
7
+ %meta{content: "NONE,NOARCHIVE", name: "robots"}
8
+ = csrf_meta_tag
9
+ %style{media: "screen"}
10
+ div#sidebar-wrapper div.sidebar-nav li.dropdown-header { padding-left: 0px }
11
+ div.sub-menu-container li.sub-menu a.pjax { padding-left: 0px }
12
+ div#wrapper div#sidebar-wrapper { overflow: hidden }
13
+
14
+ = stylesheet_link_tag "rails_admin/rails_admin.css", media: :all
15
+ = javascript_include_tag "rails_admin/rails_admin.js"
16
+
17
+ = favicon_link_tag 'apple-touch-icon.png', rel: 'apple-touch-icon', sizes: "180x180"
18
+ = favicon_link_tag 'favicon-32x32.png', rel: 'icon', sizes: "32x32"
19
+ = favicon_link_tag 'favicon-16x16.png', rel: 'icon', sizes: "16x16"
20
+ = favicon_link_tag 'safari-pinned-tab.svg', rel: 'mask-icon', color: "#5bbad5"
21
+ %body.rails_admin
22
+ #admin-js{:'data-i18n-options' => I18n.t("admin.js").to_json}
23
+ -# Initialize JS simple i18n
24
+ :javascript
25
+ RailsAdmin.I18n.init('#{I18n.locale}', document.getElementById("admin-js").dataset.i18nOptions);
26
+ #loading.label.label-warning{style: 'display:none; position:fixed; right:20px; bottom:20px; z-index:100000'}= t('admin.loading')
27
+ -# %nav.navbar.navbar-default.navbar-fixed-top
28
+ -# = render "layouts/rails_admin/navigation"
29
+ #wrapper
30
+ #sidebar-wrapper
31
+ .sidebar-nav
32
+ = render "layouts/rails_admin/secondary_navigation"
33
+ = render "layouts/rails_admin/sidebar_navigation"
34
+ = render "layouts/rails_admin/user_navigation"
35
+ #page-content-wrapper
36
+ .container-fluid
37
+ .row
38
+ .col-lg-12
39
+ %button#sidebar-collapse{href: "#menu-toggle"}
40
+ %i.fa.fa-bars.fa-2x
41
+ -# %a#app-name.pjax{href: dashboard_path}
42
+ %span#app-name
43
+ = Settings.app_name rescue "Thecore"
44
+ .content{:'data-pjax-container' => true}
45
+ = render template: 'layouts/rails_admin/pjax'
46
+ = render "rails_admin/main/modal_interaction"
47
+ -# -# Initialize JS simple i18n
48
+ -# :javascript
49
+ -# RailsAdmin.I18n.init('#{I18n.locale}', JSON.parse("#{j I18n.t("admin.js").to_json}"))
50
+ -# %body.rails_admin
51
+ -# #loading.label.label-warning{style: 'display:none; position:fixed; right:20px; bottom:20px; z-index:100000'}= t('admin.loading')
52
+ -# %nav.navbar.navbar-default.navbar-fixed-top
53
+ -# = render "layouts/rails_admin/navigation"
54
+ -# .container-fluid
55
+ -# .row
56
+ -# .col-sm-3.col-md-2.sidebar-nav
57
+ -# = render "layouts/rails_admin/sidebar_navigation"
58
+ -# .col-sm-9.col-sm-offset-3.col-md-10.col-md-offset-2
59
+ -# .content{:'data-pjax-container' => true}= render template: 'layouts/rails_admin/pjax'
@@ -0,0 +1,24 @@
1
+ :javascript
2
+ $('.nav.nav-pills li.active').removeClass('active');
3
+ $('.nav.nav-pills li[data-model="#{@abstract_model.to_param}"]').addClass('active');
4
+
5
+ - # Integration of the rails_admin_settings gem, if not available, it rescues to the normal naming
6
+ %title= "#{(@abstract_model.try(:pretty_name) || @page_name)} | #{Settings.app_name rescue ([_get_plugin_name[0] || 'Rails', _get_plugin_name[1] || 'Admin'].join(' '))}"
7
+ .page-header
8
+ %h1= @page_name
9
+ - flash && flash.each do |key, value|
10
+ .alert.alert-dismissible{class: flash_alert_class(key)}
11
+ %button.close{type: 'button', :'data-dismiss' => "alert"} &times;
12
+ = value
13
+ - # if it's and abstract model, then is not a root model for sure (like the dashboard)
14
+ - # these actions (root ones) are the actions listed at the same level as the dashboard (not related to a model)
15
+ - if @abstract_model
16
+ = breadcrumb
17
+ .well.well-sm
18
+ %ul.nav.nav-pills
19
+ = menu_for((@abstract_model ? (@object.try(:persisted?) ? :member : :collection) : :root), @abstract_model, @object)
20
+ = content_for :contextual_tabs
21
+ .well.well-sm
22
+ = yield
23
+ - else
24
+ = yield
@@ -0,0 +1,53 @@
1
+ <div id="modal-interaction" class="modal fade" tabindex="-1" role="dialog">
2
+ <div class="modal-dialog" role="document">
3
+ <div class="modal-content">
4
+ <div class="modal-header">
5
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
6
+ <span aria-hidden="true">&times;</span>
7
+ </button>
8
+ <h4 class="modal-title" id="modal-interaction-label">&nbsp;</h4>
9
+ </div>
10
+ <div class="modal-body" id="modal-interaction-body">
11
+ &nbsp;
12
+ </div>
13
+ <div class="modal-footer" id="modal-interaction-footer">
14
+ <button type="button" class="btn btn-default" data-dismiss="modal" id="modal-interaction-secondary">&nbsp;</button>
15
+ <button type="button" class="btn btn-primary" id="modal-interaction-primary">&nbsp;</button>
16
+ </div>
17
+ </div>
18
+ <!-- /.modal-content -->
19
+ </div>
20
+ <!-- /.modal-dialog -->
21
+ </div>
22
+ <!-- /.modal -->
23
+
24
+ <script>
25
+ function openModal(title, message, buttonPrimary, buttonSecondary) {
26
+ $('#modal-interaction-label').html(title);
27
+ $('#modal-interaction-body').html(message);
28
+ if (buttonPrimary != null) {
29
+ $('#modal-interaction-primary').html(buttonPrimary.lbl);
30
+ $('#modal-interaction-primary').on('click', buttonPrimary.func);
31
+ $('#modal-interaction-primary').show();
32
+ }
33
+ if (buttonSecondary != null) {
34
+ $('#modal-interaction-secondary').html(buttonSecondary.lbl);
35
+ $('#modal-interaction-secondary').on('click', buttonSecondary.func);
36
+ $('#modal-interaction-secondary').show();
37
+ }
38
+ (buttonPrimary != null || buttonSecondary != null) ? $("#modal-interaction-footer").show() : $("#modal-interaction-footer").hide();
39
+ $('#modal-interaction').modal('show');
40
+ }
41
+ function closeModal() {
42
+ $('#modal-interaction').modal('hide');
43
+ $('#modal-interaction-label').html("&nbsp;");
44
+ $('#modal-interaction-body').html("&nbsp;");
45
+ $('#modal-interaction-primary').html("&nbsp;");
46
+ $('#modal-interaction-secondary').html("&nbsp;");
47
+ $('#modal-interaction-primary').hide();
48
+ $('#modal-interaction-secondary').hide();
49
+ $("#modal-interaction-footer").hide();
50
+ $('#modal-interaction-primary').off();
51
+ $('#modal-interaction-secondary').off();
52
+ }
53
+ </script>
@@ -0,0 +1,27 @@
1
+ it:
2
+ yes: Yes
3
+ no: Cancel
4
+ error: Error
5
+ question: Question
6
+ root_actions: Root Actions
7
+ admin:
8
+ js:
9
+ true: True
10
+ false: False
11
+ is_present: Is present
12
+ is_blank: Is blank
13
+ date: Date ...
14
+ between_and_: Between ... and ...
15
+ today: Today
16
+ yesterday: Yesterday
17
+ this_week: This week
18
+ last_week: Last week
19
+ number: Number ...
20
+ contains: Contains
21
+ is_exactly: Is exactly
22
+ starts_with: Starts with
23
+ ends_with: Ends with
24
+ too_many_objects: "Too many objects, use search box above"
25
+ no_objects: "No objects found"
26
+ loading: "Loading..."
27
+ toggle_navigation: Toggle navigation
@@ -0,0 +1,27 @@
1
+ it:
2
+ yes: Si
3
+ no: Annulla
4
+ error: Errore
5
+ question: Domanda
6
+ root_actions: "Operazioni"
7
+ admin:
8
+ js:
9
+ true: Vero
10
+ false: Falso
11
+ is_present: Is present
12
+ is_blank: Is blank
13
+ date: Date ...
14
+ between_and_: Between ... and ...
15
+ today: Today
16
+ yesterday: Yesterday
17
+ this_week: This week
18
+ last_week: Last week
19
+ number: Number ...
20
+ contains: Contains
21
+ is_exactly: Is exactly
22
+ starts_with: Starts with
23
+ ends_with: Ends with
24
+ too_many_objects: "Too many objects, use search box above"
25
+ no_objects: "No objects found"
26
+ loading: "Loading..."
27
+ toggle_navigation: Toggle navigation
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ Rails.application.routes.draw do
2
+ end
@@ -0,0 +1,6 @@
1
+ require "rails_admin_ui_layout_taris/engine"
2
+ require "selectize-rails"
3
+
4
+ module RailsAdminUiLayoutTaris
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,6 @@
1
+ module RailsAdminUiLayoutTaris
2
+ class Engine < ::Rails::Engine
3
+ initializer "thecore.configure_rails_initialization", :group => :all do |app|
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module RailsAdminUiLayoutTaris
2
+ VERSION = '1.2.7'
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :rails_admin_ui_layout_taris do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails_admin_ui_layout_taris
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.7
5
+ platform: ruby
6
+ authors:
7
+ - Gabriele Tassoni
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-01-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thecore
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: selectize-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.11'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.11'
41
+ description: Custom layouts.
42
+ email:
43
+ - gabrieletassoni@taris.it
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - MIT-LICENSE
49
+ - README.md
50
+ - Rakefile
51
+ - app/assets/javascripts/rails_admin/custom/timer.js
52
+ - app/assets/javascripts/rails_admin/custom/ui.js
53
+ - app/assets/javascripts/rails_admin/ra.widgets.coffee
54
+ - app/assets/stylesheets/rails_admin/custom/flashing.scss
55
+ - app/assets/stylesheets/rails_admin/custom/theming.scss
56
+ - app/assets/stylesheets/rails_admin/custom/togglable-sidebar.scss
57
+ - app/views/layouts/rails_admin/_navigation.html.haml
58
+ - app/views/layouts/rails_admin/_secondary_navigation.html.haml
59
+ - app/views/layouts/rails_admin/_sidebar_navigation.html.haml
60
+ - app/views/layouts/rails_admin/_user_navigation.html.haml
61
+ - app/views/layouts/rails_admin/application.html.haml
62
+ - app/views/layouts/rails_admin/pjax.html.haml
63
+ - app/views/rails_admin/main/_modal_interaction.html.erb
64
+ - config/locales/en.main.yml
65
+ - config/locales/it.main.yml
66
+ - config/routes.rb
67
+ - lib/rails_admin_ui_layout_taris.rb
68
+ - lib/rails_admin_ui_layout_taris/engine.rb
69
+ - lib/rails_admin_ui_layout_taris/version.rb
70
+ - lib/tasks/rails_admin_ui_layout_taris_tasks.rake
71
+ homepage: https://www.taris.it
72
+ licenses:
73
+ - MIT
74
+ metadata: {}
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 2.6.14
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: Layout for Rails Admin customized by Taris.
95
+ test_files: []