govuk_admin_template 1.1.7 → 1.2.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.
- data/CHANGELOG.md +4 -0
- data/JAVASCRIPT.md +0 -1
- data/app/assets/stylesheets/govuk_admin_template/_tables.css.scss +0 -50
- data/app/views/govuk_admin_template/style_guide/index.html.erb +0 -43
- data/lib/govuk_admin_template/version.rb +1 -1
- metadata +3 -4
- data/app/assets/javascripts/govuk-admin-template/modules/selectable_table.js +0 -154
data/CHANGELOG.md
CHANGED
data/JAVASCRIPT.md
CHANGED
@@ -102,5 +102,4 @@ auto_show_modal.js | `AutoShowModal` | `auto-show-modal` | Initialise a Bootstra
|
|
102
102
|
auto_track_event.js | `AutoTrackEvent` | `auto-track-event` | Use data attributes to track events in Google Analytics on page load
|
103
103
|
filterable_table.js | `FilterableTable` | `filterable-table` | Filter the contents of a table, showing only matching rows
|
104
104
|
fixed_table_header.js | `FixedTableHeader` | `fixed-table-header` | Fix the `<thead>` portion of a table when scrolling offscreen
|
105
|
-
selectable_table.js | `SelectableTable` | `selectable-table` | Select rows in a table and perform an action on them
|
106
105
|
toggle.js | `Toggle` | `toggle` | A simple toggle
|
@@ -26,53 +26,3 @@ thead .table-header-secondary td {
|
|
26
26
|
box-shadow: 0 3px 10px -5px rgba(0, 0, 0, 0.3);
|
27
27
|
}
|
28
28
|
}
|
29
|
-
|
30
|
-
/* Selectable rows
|
31
|
-
==========================================================================
|
32
|
-
Fill table cell with label to make the whole cell clickable.
|
33
|
-
This is achieved with a bit of a hack, the label is set to a height always
|
34
|
-
guaranteed to be larger than the cell height, and the cell has its overflow
|
35
|
-
hidden.
|
36
|
-
*/
|
37
|
-
|
38
|
-
.selectable-row {
|
39
|
-
padding: 0 !important;
|
40
|
-
overflow: hidden;
|
41
|
-
width: 40px;
|
42
|
-
|
43
|
-
tbody & {
|
44
|
-
background-color: #ccc;
|
45
|
-
}
|
46
|
-
|
47
|
-
label {
|
48
|
-
height: 300px;
|
49
|
-
width: 100%;
|
50
|
-
margin-bottom: 0;
|
51
|
-
position: absolute;
|
52
|
-
text-align: center;
|
53
|
-
}
|
54
|
-
|
55
|
-
input {
|
56
|
-
margin-top: 12px;
|
57
|
-
cursor: pointer;
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
.selectable-row-helper {
|
62
|
-
border-bottom: 1px dotted #999;
|
63
|
-
cursor: help;
|
64
|
-
}
|
65
|
-
|
66
|
-
/* Slightly different spacing for table headers */
|
67
|
-
.table-header-secondary .selectable-row {
|
68
|
-
vertical-align: top;
|
69
|
-
|
70
|
-
input {
|
71
|
-
margin-top: 18px;
|
72
|
-
}
|
73
|
-
}
|
74
|
-
|
75
|
-
.selected-row td,
|
76
|
-
.table-hover .selected-row:hover td {
|
77
|
-
background-color: #fffbcc; /* yellow highlight */
|
78
|
-
}
|
@@ -185,8 +185,6 @@
|
|
185
185
|
<div class="row">
|
186
186
|
<div class="col-md-6 lead">
|
187
187
|
<p>When using a table with two layers of headings, usually for interacting with table content, <code>table-header</code> and <code>table-header-secondary</code> classes are used.</p>
|
188
|
-
|
189
|
-
<p>The second example shows a table with selectable rows. Selected rows highlight in yellow. The checkbox in the header selects all rows.</p>
|
190
188
|
</div>
|
191
189
|
<div class="col-md-6">
|
192
190
|
<table class="table table-bordered table-hover">
|
@@ -207,47 +205,6 @@
|
|
207
205
|
</tr>
|
208
206
|
</tbody>
|
209
207
|
</table>
|
210
|
-
|
211
|
-
<table class="table table-bordered" data-module="selectable-table">
|
212
|
-
<thead>
|
213
|
-
<tr class="table-header">
|
214
|
-
<th></th>
|
215
|
-
<th>Primary header</th>
|
216
|
-
</tr>
|
217
|
-
<tr class="table-header-secondary">
|
218
|
-
<th class="selectable-row">
|
219
|
-
<div class="relative">
|
220
|
-
<label>
|
221
|
-
<input type="checkbox" class="js-toggle-all" />
|
222
|
-
</label>
|
223
|
-
</div>
|
224
|
-
</th>
|
225
|
-
<th><a href="<%= @normal_link_href %>" class="btn btn-default">Action</a></th>
|
226
|
-
</tr>
|
227
|
-
</thead>
|
228
|
-
<tbody>
|
229
|
-
<tr class="selected-row">
|
230
|
-
<td class="selectable-row">
|
231
|
-
<div class="relative">
|
232
|
-
<label>
|
233
|
-
<input type="checkbox" checked="checked" class="js-toggle-row" />
|
234
|
-
</label>
|
235
|
-
</div>
|
236
|
-
</td>
|
237
|
-
<td>Selected row</td>
|
238
|
-
</tr>
|
239
|
-
<tr>
|
240
|
-
<td class="selectable-row">
|
241
|
-
<div class="relative">
|
242
|
-
<label>
|
243
|
-
<input type="checkbox" class="js-toggle-row" />
|
244
|
-
</label>
|
245
|
-
</div>
|
246
|
-
</td>
|
247
|
-
<td>Typical row</td>
|
248
|
-
</tr>
|
249
|
-
</tbody>
|
250
|
-
</table>
|
251
208
|
</div>
|
252
209
|
</div>
|
253
210
|
<div class="row">
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_admin_template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-11-
|
12
|
+
date: 2014-11-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -170,7 +170,6 @@ files:
|
|
170
170
|
- app/assets/javascripts/govuk-admin-template/vendor/html5.js
|
171
171
|
- app/assets/javascripts/govuk-admin-template/vendor/respond.min.js
|
172
172
|
- app/assets/javascripts/govuk-admin-template/govuk-admin.js
|
173
|
-
- app/assets/javascripts/govuk-admin-template/modules/selectable_table.js
|
174
173
|
- app/assets/javascripts/govuk-admin-template/modules/filterable_table.js
|
175
174
|
- app/assets/javascripts/govuk-admin-template/modules/fixed_table_header.js
|
176
175
|
- app/assets/javascripts/govuk-admin-template/modules/auto_track_event.js
|
@@ -209,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
209
208
|
version: '0'
|
210
209
|
segments:
|
211
210
|
- 0
|
212
|
-
hash:
|
211
|
+
hash: -4369990551354532832
|
213
212
|
requirements: []
|
214
213
|
rubyforge_project:
|
215
214
|
rubygems_version: 1.8.23.2
|
@@ -1,154 +0,0 @@
|
|
1
|
-
(function(Modules) {
|
2
|
-
"use strict";
|
3
|
-
|
4
|
-
Modules.SelectableTable = function() {
|
5
|
-
|
6
|
-
var that = this;
|
7
|
-
|
8
|
-
that.start = function(element) {
|
9
|
-
|
10
|
-
var tableRows = element.find('tbody tr'),
|
11
|
-
SELECTED_ROW_CLASS = 'selected-row',
|
12
|
-
RECENTLY_CHANGED_CLASS = 'js-most-recently-changed';
|
13
|
-
|
14
|
-
element.on('click', '.js-toggle-row', toggleRow);
|
15
|
-
element.on('click', '.js-toggle-all', toggleAllRows);
|
16
|
-
element.on('click', '.js-submit-form', submitForm);
|
17
|
-
|
18
|
-
element.on('ajax:success', 'form', createModal);
|
19
|
-
element.on('ajax:error', 'form', handleModalError);
|
20
|
-
element.on('ajax:complete','form', resetSubmitButtons);
|
21
|
-
|
22
|
-
onLoadMarkSelectedRowsWithClass();
|
23
|
-
updateHeaderToggleState();
|
24
|
-
|
25
|
-
function onLoadMarkSelectedRowsWithClass() {
|
26
|
-
|
27
|
-
var selectedRows = tableRows.find('.js-toggle-row:checked').parents('tr');
|
28
|
-
selectedRows.addClass(SELECTED_ROW_CLASS);
|
29
|
-
|
30
|
-
}
|
31
|
-
|
32
|
-
function toggleRow(event) {
|
33
|
-
|
34
|
-
var row = $(event.target).parents('tr');
|
35
|
-
|
36
|
-
event.shiftKey ? shiftToggleRow(row) : row.toggleClass(SELECTED_ROW_CLASS);
|
37
|
-
|
38
|
-
markRowAsRecentlyChanged(row);
|
39
|
-
updateHeaderToggleState();
|
40
|
-
}
|
41
|
-
|
42
|
-
function updateHeaderToggleState() {
|
43
|
-
|
44
|
-
var selectedRowsCount = tableRows.filter('.' + SELECTED_ROW_CLASS).length,
|
45
|
-
inputHeader = element.find('.js-toggle-all');
|
46
|
-
|
47
|
-
if (selectedRowsCount > 0 && selectedRowsCount < tableRows.length) {
|
48
|
-
inputHeader.prop('indeterminate', true);
|
49
|
-
inputHeader.prop('checked', false);
|
50
|
-
resetSubmitButtons();
|
51
|
-
} else if (selectedRowsCount === 0) {
|
52
|
-
inputHeader.prop('checked', false);
|
53
|
-
inputHeader.prop('indeterminate', false);
|
54
|
-
disableSubmitButtons();
|
55
|
-
} else {
|
56
|
-
inputHeader.prop('checked', true);
|
57
|
-
inputHeader.prop('indeterminate', false);
|
58
|
-
resetSubmitButtons();
|
59
|
-
}
|
60
|
-
|
61
|
-
}
|
62
|
-
|
63
|
-
function markRowAsRecentlyChanged(row) {
|
64
|
-
tableRows.removeClass(RECENTLY_CHANGED_CLASS);
|
65
|
-
row.addClass(RECENTLY_CHANGED_CLASS);
|
66
|
-
}
|
67
|
-
|
68
|
-
function shiftToggleRow(targetRow) {
|
69
|
-
|
70
|
-
var targetIndex = tableRows.index(targetRow),
|
71
|
-
targetState = targetRow.is('.' + SELECTED_ROW_CLASS),
|
72
|
-
mostRecentlyChanged = tableRows.filter('.' + RECENTLY_CHANGED_CLASS),
|
73
|
-
mostRecentlyChangedIndex = tableRows.index(mostRecentlyChanged),
|
74
|
-
rows, range;
|
75
|
-
|
76
|
-
// If we don't have a most recently changed, only toggle the current row
|
77
|
-
if (mostRecentlyChangedIndex < 0) {
|
78
|
-
mostRecentlyChangedIndex = targetIndex;
|
79
|
-
}
|
80
|
-
|
81
|
-
range = mostRecentlyChangedIndex < targetIndex ? [mostRecentlyChangedIndex, targetIndex + 1] : [targetIndex, mostRecentlyChangedIndex + 1];
|
82
|
-
rows = tableRows.slice.apply(tableRows, range);
|
83
|
-
toggleRows(rows, ! targetState);
|
84
|
-
|
85
|
-
}
|
86
|
-
|
87
|
-
function toggleAllRows(event) {
|
88
|
-
|
89
|
-
var rows = element.find('tbody tr');
|
90
|
-
|
91
|
-
// If everything selected
|
92
|
-
if (tableRows.length == element.find('.' + SELECTED_ROW_CLASS).length) {
|
93
|
-
toggleRows(rows, false);
|
94
|
-
} else {
|
95
|
-
toggleRows(rows, true);
|
96
|
-
}
|
97
|
-
|
98
|
-
updateHeaderToggleState();
|
99
|
-
}
|
100
|
-
|
101
|
-
function toggleRows(rows, select) {
|
102
|
-
if (select) {
|
103
|
-
rows.addClass(SELECTED_ROW_CLASS)
|
104
|
-
} else {
|
105
|
-
rows.removeClass(SELECTED_ROW_CLASS)
|
106
|
-
}
|
107
|
-
rows.find('input').prop('checked', select);
|
108
|
-
}
|
109
|
-
|
110
|
-
function submitForm(event) {
|
111
|
-
var target = $(event.target),
|
112
|
-
type = target.data('type');
|
113
|
-
|
114
|
-
if (target.is('.disabled')) {
|
115
|
-
event.preventDefault();
|
116
|
-
return;
|
117
|
-
}
|
118
|
-
|
119
|
-
disableSubmitButtons();
|
120
|
-
target.button('loading');
|
121
|
-
|
122
|
-
element.find('input[type="radio"][value="' + type + '"]').prop('checked', true);
|
123
|
-
element.find('form').submit();
|
124
|
-
event.preventDefault();
|
125
|
-
}
|
126
|
-
|
127
|
-
function createModal(event, html, status) {
|
128
|
-
var modal = $(html);
|
129
|
-
|
130
|
-
$('body').append(modal);
|
131
|
-
|
132
|
-
modal.modal('show').on('hidden.bs.modal', function () {
|
133
|
-
modal.remove();
|
134
|
-
});
|
135
|
-
|
136
|
-
GOVUKAdmin.start(modal);
|
137
|
-
}
|
138
|
-
|
139
|
-
function handleModalError(xhr, status, error) {
|
140
|
-
alert('There was a problem loading this. Please try again.');
|
141
|
-
}
|
142
|
-
|
143
|
-
function resetSubmitButtons() {
|
144
|
-
element.find('.js-submit-form').removeClass('disabled').button('reset');
|
145
|
-
element.find('.js-submit-container').addClass('buttons-enabled');
|
146
|
-
}
|
147
|
-
|
148
|
-
function disableSubmitButtons() {
|
149
|
-
element.find('.js-submit-form').addClass('disabled');
|
150
|
-
element.find('.js-submit-container').removeClass('buttons-enabled');
|
151
|
-
}
|
152
|
-
}
|
153
|
-
};
|
154
|
-
})(window.GOVUKAdmin.Modules);
|