jquery-tablesorter 1.17.2 → 1.17.3
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 +4 -4
- data/README.md +1 -1
- data/lib/jquery-tablesorter/version.rb +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/addons/pager/jquery.tablesorter.pager.js +76 -71
- data/vendor/assets/javascripts/jquery-tablesorter/extras/jquery.dragtable.mod.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.combined.js +2647 -2576
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.js +174 -119
- data/vendor/assets/javascripts/jquery-tablesorter/jquery.tablesorter.widgets.js +2487 -2471
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-extract.js +15 -15
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-iso8601.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-month.js +4 -4
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-range.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-two-digit-year.js +12 -12
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date-weekday.js +4 -4
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-date.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-duration.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-feet-inch-fraction.js +6 -6
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-file-type.js +22 -22
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-globalize.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-ignore-articles.js +15 -15
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-image.js +3 -3
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-input-select.js +10 -3
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-metric.js +2 -2
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-named-numbers.js +3 -3
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-network.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/parsers/parser-roman.js +4 -4
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-alignChar.js +122 -121
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-build-table.js +13 -13
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-chart.js +2 -2
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-columnSelector.js +324 -324
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-columns.js +60 -60
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-editable.js +219 -219
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-html5.js +360 -361
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-jui.js +666 -666
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-formatter-select2.js +124 -124
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter-type-insideRange.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-filter.js +1448 -1433
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-formatter.js +1 -1
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-grouping.js +213 -213
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-headerTitles.js +3 -3
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-math.js +271 -216
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-output.js +339 -320
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-pager.js +1057 -1045
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-print.js +109 -109
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-reflow.js +114 -115
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-resizable.js +360 -359
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-saveSort.js +59 -59
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-scroller.js +818 -806
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-sort2Hash.js +128 -0
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-sortTbodies.js +195 -195
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-staticRow.js +90 -90
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-stickyHeaders.js +257 -257
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-storage.js +76 -76
- data/vendor/assets/javascripts/jquery-tablesorter/widgets/widget-uitheme.js +170 -170
- metadata +3 -3
- data/vendor/assets/javascripts/jquery-tablesorter/extras/jquery.quicksearch.js +0 -195
@@ -1,78 +1,78 @@
|
|
1
1
|
/*! Widget: columns */
|
2
2
|
;(function ($) {
|
3
|
-
'use strict';
|
4
|
-
var ts = $.tablesorter || {};
|
3
|
+
'use strict';
|
4
|
+
var ts = $.tablesorter || {};
|
5
5
|
|
6
|
-
ts.addWidget({
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
ts.addWidget({
|
7
|
+
id: 'columns',
|
8
|
+
priority: 30,
|
9
|
+
options : {
|
10
|
+
columns : [ 'primary', 'secondary', 'tertiary' ]
|
11
|
+
},
|
12
|
+
format: function(table, c, wo) {
|
13
|
+
var $tbody, tbodyIndex, $rows, rows, $row, $cells, remove, indx,
|
14
14
|
$table = c.$table,
|
15
15
|
$tbodies = c.$tbodies,
|
16
16
|
sortList = c.sortList,
|
17
17
|
len = sortList.length,
|
18
18
|
// removed c.widgetColumns support
|
19
|
-
css = wo && wo.columns || [
|
19
|
+
css = wo && wo.columns || [ 'primary', 'secondary', 'tertiary' ],
|
20
20
|
last = css.length - 1;
|
21
21
|
remove = css.join(' ');
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
22
|
+
// check if there is a sort (on initialization there may not be one)
|
23
|
+
for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
|
24
|
+
$tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // detach tbody
|
25
|
+
$rows = $tbody.children('tr');
|
26
|
+
// loop through the visible rows
|
27
|
+
$rows.each(function() {
|
28
|
+
$row = $(this);
|
29
|
+
if (this.style.display !== 'none') {
|
30
|
+
// remove all columns class names
|
31
|
+
$cells = $row.children().removeClass(remove);
|
32
|
+
// add appropriate column class names
|
33
|
+
if (sortList && sortList[0]) {
|
34
|
+
// primary sort column class
|
35
|
+
$cells.eq(sortList[0][0]).addClass(css[0]);
|
36
|
+
if (len > 1) {
|
37
|
+
for (indx = 1; indx < len; indx++) {
|
38
|
+
// secondary, tertiary, etc sort column classes
|
39
|
+
$cells.eq(sortList[indx][0]).addClass( css[indx] || css[last] );
|
40
|
+
}
|
40
41
|
}
|
41
42
|
}
|
42
43
|
}
|
43
|
-
}
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
44
|
+
});
|
45
|
+
ts.processTbody(table, $tbody, false);
|
46
|
+
}
|
47
|
+
// add classes to thead and tfoot
|
48
|
+
rows = wo.columns_thead !== false ? [ 'thead tr' ] : [];
|
49
|
+
if (wo.columns_tfoot !== false) {
|
50
|
+
rows.push('tfoot tr');
|
51
|
+
}
|
52
|
+
if (rows.length) {
|
53
|
+
$rows = $table.find( rows.join(',') ).children().removeClass(remove);
|
54
|
+
if (len) {
|
55
|
+
for (indx = 0; indx < len; indx++) {
|
56
|
+
// add primary. secondary, tertiary, etc sort column classes
|
57
|
+
$rows.filter('[data-column="' + sortList[indx][0] + '"]').addClass(css[indx] || css[last]);
|
58
|
+
}
|
58
59
|
}
|
59
60
|
}
|
61
|
+
},
|
62
|
+
remove: function(table, c, wo) {
|
63
|
+
var tbodyIndex, $tbody,
|
64
|
+
$tbodies = c.$tbodies,
|
65
|
+
remove = (wo.columns || [ 'primary', 'secondary', 'tertiary' ]).join(' ');
|
66
|
+
c.$headers.removeClass(remove);
|
67
|
+
c.$table.children('tfoot').children('tr').children('th, td').removeClass(remove);
|
68
|
+
for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
|
69
|
+
$tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // remove tbody
|
70
|
+
$tbody.children('tr').each(function() {
|
71
|
+
$(this).children().removeClass(remove);
|
72
|
+
});
|
73
|
+
ts.processTbody(table, $tbody, false); // restore tbody
|
74
|
+
}
|
60
75
|
}
|
61
|
-
}
|
62
|
-
remove: function(table, c, wo) {
|
63
|
-
var tbodyIndex, $tbody,
|
64
|
-
$tbodies = c.$tbodies,
|
65
|
-
remove = (wo.columns || [ "primary", "secondary", "tertiary" ]).join(' ');
|
66
|
-
c.$headers.removeClass(remove);
|
67
|
-
c.$table.children('tfoot').children('tr').children('th, td').removeClass(remove);
|
68
|
-
for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
|
69
|
-
$tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // remove tbody
|
70
|
-
$tbody.children('tr').each(function() {
|
71
|
-
$(this).children().removeClass(remove);
|
72
|
-
});
|
73
|
-
ts.processTbody(table, $tbody, false); // restore tbody
|
74
|
-
}
|
75
|
-
}
|
76
|
-
});
|
76
|
+
});
|
77
77
|
|
78
78
|
})(jQuery);
|
@@ -7,254 +7,254 @@
|
|
7
7
|
;( function( $ ){
|
8
8
|
'use strict';
|
9
9
|
|
10
|
-
var tse = $.tablesorter.editable = {
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
var tse = $.tablesorter.editable = {
|
11
|
+
namespace : '.tseditable',
|
12
|
+
// last edited class name
|
13
|
+
lastEdited: 'tseditable-last-edited-cell',
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
}
|
26
|
-
},
|
27
|
-
|
28
|
-
selectAll: function( cell ) {
|
29
|
-
setTimeout( function() {
|
30
|
-
// select all text in contenteditable
|
31
|
-
// see http://stackoverflow.com/a/6150060/145346
|
32
|
-
var range, selection;
|
33
|
-
if ( document.body.createTextRange ) {
|
34
|
-
range = document.body.createTextRange();
|
35
|
-
range.moveToElementText( cell );
|
36
|
-
range.select();
|
37
|
-
} else if ( window.getSelection ) {
|
38
|
-
selection = window.getSelection();
|
39
|
-
range = document.createRange();
|
40
|
-
range.selectNodeContents( cell );
|
41
|
-
selection.removeAllRanges();
|
42
|
-
selection.addRange( range );
|
15
|
+
editComplete: function( c, wo, $cell, refocus ) {
|
16
|
+
c.$table
|
17
|
+
.find( '.' + tse.lastEdited )
|
18
|
+
.removeClass( tse.lastEdited )
|
19
|
+
.trigger( wo.editable_editComplete, [ c ] );
|
20
|
+
// restore focus last cell after updating
|
21
|
+
if ( refocus ) {
|
22
|
+
setTimeout( function() {
|
23
|
+
$cell.focus();
|
24
|
+
}, 50 );
|
43
25
|
}
|
44
|
-
},
|
45
|
-
|
26
|
+
},
|
27
|
+
|
28
|
+
selectAll: function( cell ) {
|
29
|
+
setTimeout( function() {
|
30
|
+
// select all text in contenteditable
|
31
|
+
// see http://stackoverflow.com/a/6150060/145346
|
32
|
+
var range, selection;
|
33
|
+
if ( document.body.createTextRange ) {
|
34
|
+
range = document.body.createTextRange();
|
35
|
+
range.moveToElementText( cell );
|
36
|
+
range.select();
|
37
|
+
} else if ( window.getSelection ) {
|
38
|
+
selection = window.getSelection();
|
39
|
+
range = document.createRange();
|
40
|
+
range.selectNodeContents( cell );
|
41
|
+
selection.removeAllRanges();
|
42
|
+
selection.addRange( range );
|
43
|
+
}
|
44
|
+
}, 100 );
|
45
|
+
},
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
47
|
+
getColumns : function( c, wo ) {
|
48
|
+
var indx, tmp,
|
49
|
+
colIndex = [],
|
50
|
+
cols = [];
|
51
|
+
if ( !wo.editable_columnsArray && $.type( wo.editable_columns ) === 'string' && wo.editable_columns.indexOf( '-' ) >= 0 ) {
|
52
|
+
// editable_columns can contain a range string ( i.e. '2-4' )
|
53
|
+
tmp = wo.editable_columns.split( /\s*-\s*/ );
|
54
|
+
indx = parseInt( tmp[ 0 ], 10 ) || 0;
|
55
|
+
tmp = parseInt( tmp[ 1 ], 10 ) || ( c.columns - 1 );
|
56
|
+
if ( tmp > c.columns ) {
|
57
|
+
tmp = c.columns - 1;
|
58
|
+
}
|
59
|
+
for ( ; indx <= tmp; indx++ ) {
|
60
|
+
colIndex.push( indx );
|
61
|
+
cols.push( 'td:nth-child(' + ( indx + 1 ) + ')' );
|
62
|
+
}
|
63
|
+
} else if ( $.isArray( wo.editable_columns ) ) {
|
64
|
+
$.each( wo.editable_columnsArray || wo.editable_columns, function( i, col ) {
|
65
|
+
if ( col < c.columns ) {
|
66
|
+
colIndex.push( col );
|
67
|
+
cols.push( 'td:nth-child(' + ( col + 1 ) + ')' );
|
68
|
+
}
|
69
|
+
});
|
58
70
|
}
|
59
|
-
|
60
|
-
|
61
|
-
|
71
|
+
if ( !wo.editable_columnsArray ) {
|
72
|
+
wo.editable_columnsArray = colIndex;
|
73
|
+
wo.editable_columnsArray.sort(function(a, b){ return a - b; });
|
62
74
|
}
|
63
|
-
|
64
|
-
|
65
|
-
if ( col < c.columns ) {
|
66
|
-
colIndex.push( col );
|
67
|
-
cols.push( 'td:nth-child(' + ( col + 1 ) + ')' );
|
68
|
-
}
|
69
|
-
});
|
70
|
-
}
|
71
|
-
if ( !wo.editable_columnsArray ) {
|
72
|
-
wo.editable_columnsArray = colIndex;
|
73
|
-
wo.editable_columnsArray.sort(function(a,b){ return a - b; });
|
74
|
-
}
|
75
|
-
return cols;
|
76
|
-
},
|
75
|
+
return cols;
|
76
|
+
},
|
77
77
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
78
|
+
update: function( c, wo ) {
|
79
|
+
var $t,
|
80
|
+
tmp = $( '<div>' ).wrapInner( wo.editable_wrapContent ).children().length || $.isFunction( wo.editable_wrapContent ),
|
81
|
+
cols = tse.getColumns( c, wo ).join( ',' );
|
82
82
|
|
83
|
-
|
84
|
-
|
85
|
-
|
83
|
+
// turn off contenteditable to allow dynamically setting the wo.editable_noEdit
|
84
|
+
// class on table cells - see issue #900
|
85
|
+
c.$tbodies.find( cols ).find( '[contenteditable]' ).prop( 'contenteditable', false );
|
86
86
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
87
|
+
// IE does not allow making TR/TH/TD cells directly editable ( issue #404 )
|
88
|
+
// so add a div or span inside ( it's faster than using wrapInner() )
|
89
|
+
c.$tbodies.find( cols ).not( '.' + wo.editable_noEdit ).each( function() {
|
90
|
+
// test for children, if they exist, then make the children editable
|
91
|
+
$t = $( this );
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
93
|
+
if ( tmp && $t.children( 'div, span' ).length === 0 ) {
|
94
|
+
$t.wrapInner( wo.editable_wrapContent );
|
95
|
+
}
|
96
|
+
if ( $t.children( 'div, span' ).length ) {
|
97
|
+
// make div/span children content editable
|
98
|
+
$t.children( 'div, span' ).not( '.' + wo.editable_noEdit ).each( function() {
|
99
|
+
var $this = $( this );
|
100
|
+
if ( wo.editable_trimContent ) {
|
101
|
+
$this.html( function( i, txt ) {
|
102
|
+
return $.trim( txt );
|
103
|
+
});
|
104
|
+
}
|
105
|
+
$this.prop( 'contenteditable', true );
|
106
|
+
});
|
107
|
+
} else {
|
100
108
|
if ( wo.editable_trimContent ) {
|
101
|
-
$
|
109
|
+
$t.html( function( i, txt ) {
|
102
110
|
return $.trim( txt );
|
103
111
|
});
|
104
112
|
}
|
105
|
-
$
|
106
|
-
});
|
107
|
-
} else {
|
108
|
-
if ( wo.editable_trimContent ) {
|
109
|
-
$t.html( function( i, txt ) {
|
110
|
-
return $.trim( txt );
|
111
|
-
});
|
112
|
-
}
|
113
|
-
$t.prop( 'contenteditable', true );
|
114
|
-
}
|
115
|
-
});
|
116
|
-
},
|
117
|
-
|
118
|
-
bindEvents: function( c, wo ) {
|
119
|
-
var namespace = tse.namespace;
|
120
|
-
c.$table
|
121
|
-
.off( ( 'updateComplete pagerComplete '.split( ' ' ).join( namespace + ' ' ) ).replace( /\s+/g, ' ' ) )
|
122
|
-
.on( 'updateComplete pagerComplete '.split( ' ' ).join( namespace + ' ' ), function() {
|
123
|
-
tse.update( c, c.widgetOptions );
|
124
|
-
})
|
125
|
-
// prevent sort initialized by user click on the header from changing the row indexing before
|
126
|
-
// updateCell can finish processing the change
|
127
|
-
.children( 'thead' )
|
128
|
-
.add( $( c.namespace + '_extra_table' ).children( 'thead' ) )
|
129
|
-
.off( 'mouseenter' + namespace )
|
130
|
-
.on( 'mouseenter' + namespace, function() {
|
131
|
-
if ( c.$table.data( 'contentFocused' ) ) {
|
132
|
-
// change to 'true' instead of element to allow focusout to process
|
133
|
-
c.$table.data( 'contentFocused', true );
|
134
|
-
$( ':focus' ).trigger( 'focusout' );
|
113
|
+
$t.prop( 'contenteditable', true );
|
135
114
|
}
|
136
115
|
});
|
116
|
+
},
|
137
117
|
|
138
|
-
c
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
if ( wo.editable_enterToAccept && e.which === 13 && !e.shiftKey ) {
|
156
|
-
e.preventDefault();
|
157
|
-
}
|
158
|
-
});
|
159
|
-
$this.data({ before : txt, original: txt });
|
160
|
-
|
161
|
-
if ( typeof wo.editable_focused === 'function' ) {
|
162
|
-
wo.editable_focused( txt, column, $this );
|
163
|
-
}
|
164
|
-
|
165
|
-
if ( selAll ) {
|
166
|
-
if ( typeof selAll === 'function' ) {
|
167
|
-
if ( selAll( txt, column, $this ) ) {
|
168
|
-
tse.selectAll( $this[0] );
|
169
|
-
}
|
170
|
-
} else {
|
171
|
-
tse.selectAll( $this[0] );
|
118
|
+
bindEvents: function( c, wo ) {
|
119
|
+
var namespace = tse.namespace;
|
120
|
+
c.$table
|
121
|
+
.off( ( 'updateComplete pagerComplete '.split( ' ' ).join( namespace + ' ' ) ).replace( /\s+/g, ' ' ) )
|
122
|
+
.on( 'updateComplete pagerComplete '.split( ' ' ).join( namespace + ' ' ), function() {
|
123
|
+
tse.update( c, c.widgetOptions );
|
124
|
+
})
|
125
|
+
// prevent sort initialized by user click on the header from changing the row indexing before
|
126
|
+
// updateCell can finish processing the change
|
127
|
+
.children( 'thead' )
|
128
|
+
.add( $( c.namespace + '_extra_table' ).children( 'thead' ) )
|
129
|
+
.off( 'mouseenter' + namespace )
|
130
|
+
.on( 'mouseenter' + namespace, function() {
|
131
|
+
if ( c.$table.data( 'contentFocused' ) ) {
|
132
|
+
// change to 'true' instead of element to allow focusout to process
|
133
|
+
c.$table.data( 'contentFocused', true );
|
134
|
+
$( ':focus' ).trigger( 'focusout' );
|
172
135
|
}
|
173
|
-
}
|
174
|
-
})
|
175
|
-
.on( 'blur focusout keydown '.split( ' ' ).join( namespace + ' ' ), '[contenteditable]', function( e ) {
|
176
|
-
if ( !c.$table.data( 'contentFocused' ) ) { return; }
|
177
|
-
var t, validate,
|
178
|
-
valid = false,
|
179
|
-
$this = $( e.target ),
|
180
|
-
txt = $this.html(),
|
181
|
-
column = $this.closest( 'td' ).index();
|
182
|
-
if ( wo.editable_trimContent ) {
|
183
|
-
txt = $.trim( txt );
|
184
|
-
}
|
185
|
-
if ( e.which === 27 ) {
|
186
|
-
// user cancelled
|
187
|
-
$this.html( $this.data( 'original' ) ).trigger( 'blur' + namespace );
|
188
|
-
c.$table.data( 'contentFocused', false );
|
189
|
-
c.table.isUpdating = false;
|
190
|
-
return false;
|
191
|
-
}
|
192
|
-
// accept on enter ( if set ), alt-enter ( always ) or if autoAccept is set and element is blurred or unfocused
|
193
|
-
t = e.which === 13 && !e.shiftKey && ( wo.editable_enterToAccept || e.altKey ) || wo.editable_autoAccept && e.type !== 'keydown';
|
194
|
-
// change if new or user hits enter ( if option set )
|
195
|
-
if ( t && $this.data( 'before' ) !== txt ) {
|
136
|
+
});
|
196
137
|
|
197
|
-
|
198
|
-
|
138
|
+
c.$tbodies
|
139
|
+
.off( ( 'focus blur focusout keydown '.split( ' ' ).join( namespace + ' ' ) ).replace( /\s+/g, ' ' ) )
|
140
|
+
.on( 'focus' + namespace, '[contenteditable]', function( e ) {
|
141
|
+
clearTimeout( $( this ).data( 'timer' ) );
|
142
|
+
c.$table.data( 'contentFocused', e.target );
|
143
|
+
c.table.isUpdating = true; // prevent sorting while editing
|
144
|
+
var $this = $( this ),
|
145
|
+
selAll = wo.editable_selectAll,
|
146
|
+
column = $this.closest( 'td' ).index(),
|
147
|
+
txt = $this.html();
|
148
|
+
if ( wo.editable_trimContent ) {
|
149
|
+
txt = $.trim( txt );
|
150
|
+
}
|
151
|
+
// prevent enter from adding into the content
|
152
|
+
$this
|
153
|
+
.off( 'keydown' + namespace )
|
154
|
+
.on( 'keydown' + namespace, function( e ){
|
155
|
+
if ( wo.editable_enterToAccept && e.which === 13 && !e.shiftKey ) {
|
156
|
+
e.preventDefault();
|
157
|
+
}
|
158
|
+
});
|
159
|
+
$this.data({ before : txt, original: txt });
|
199
160
|
|
200
|
-
if ( typeof
|
201
|
-
|
202
|
-
} else if ( typeof ( validate = $.tablesorter.getColumnData( c.table, validate, column ) ) === 'function' ) {
|
203
|
-
valid = validate( txt, $this.data( 'original' ), column, $this );
|
161
|
+
if ( typeof wo.editable_focused === 'function' ) {
|
162
|
+
wo.editable_focused( txt, column, $this );
|
204
163
|
}
|
205
164
|
|
206
|
-
if (
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
.html( valid )
|
211
|
-
.data( 'before', valid )
|
212
|
-
.data( 'original', valid )
|
213
|
-
.trigger( 'change' );
|
214
|
-
c.$table.trigger( 'updateCell', [ $this.closest( 'td' ), false, function() {
|
215
|
-
if ( wo.editable_autoResort ) {
|
216
|
-
setTimeout( function() {
|
217
|
-
c.$table.trigger( 'sorton', [ c.sortList, function() {
|
218
|
-
tse.editComplete( c, wo, c.$table.data( 'contentFocused' ), true );
|
219
|
-
}, true ] );
|
220
|
-
}, 10 );
|
221
|
-
} else {
|
222
|
-
tse.editComplete( c, wo, c.$table.data( 'contentFocused' ) );
|
165
|
+
if ( selAll ) {
|
166
|
+
if ( typeof selAll === 'function' ) {
|
167
|
+
if ( selAll( txt, column, $this ) ) {
|
168
|
+
tse.selectAll( $this[0] );
|
223
169
|
}
|
224
|
-
}
|
170
|
+
} else {
|
171
|
+
tse.selectAll( $this[0] );
|
172
|
+
}
|
173
|
+
}
|
174
|
+
})
|
175
|
+
.on( 'blur focusout keydown '.split( ' ' ).join( namespace + ' ' ), '[contenteditable]', function( e ) {
|
176
|
+
if ( !c.$table.data( 'contentFocused' ) ) { return; }
|
177
|
+
var t, validate,
|
178
|
+
valid = false,
|
179
|
+
$this = $( e.target ),
|
180
|
+
txt = $this.html(),
|
181
|
+
column = $this.closest( 'td' ).index();
|
182
|
+
if ( wo.editable_trimContent ) {
|
183
|
+
txt = $.trim( txt );
|
184
|
+
}
|
185
|
+
if ( e.which === 27 ) {
|
186
|
+
// user cancelled
|
187
|
+
$this.html( $this.data( 'original' ) ).trigger( 'blur' + namespace );
|
188
|
+
c.$table.data( 'contentFocused', false );
|
189
|
+
c.table.isUpdating = false;
|
225
190
|
return false;
|
226
191
|
}
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
192
|
+
// accept on enter ( if set ), alt-enter ( always ) or if autoAccept is set and element is blurred or unfocused
|
193
|
+
t = e.which === 13 && !e.shiftKey && ( wo.editable_enterToAccept || e.altKey ) || wo.editable_autoAccept && e.type !== 'keydown';
|
194
|
+
// change if new or user hits enter ( if option set )
|
195
|
+
if ( t && $this.data( 'before' ) !== txt ) {
|
196
|
+
|
197
|
+
validate = wo.editable_validate;
|
198
|
+
valid = txt;
|
231
199
|
|
232
|
-
if (
|
233
|
-
|
234
|
-
|
200
|
+
if ( typeof validate === 'function' ) {
|
201
|
+
valid = validate( txt, $this.data( 'original' ), column, $this );
|
202
|
+
} else if ( typeof ( validate = $.tablesorter.getColumnData( c.table, validate, column ) ) === 'function' ) {
|
203
|
+
valid = validate( txt, $this.data( 'original' ), column, $this );
|
235
204
|
}
|
236
|
-
}, 100 ) );
|
237
|
-
// restore original content on blur
|
238
|
-
$this.html( $this.data( 'original' ) );
|
239
|
-
}
|
240
|
-
});
|
241
|
-
},
|
242
|
-
destroy : function( c, wo ) {
|
243
|
-
var namespace = tse.namespace,
|
244
|
-
cols = tse.getColumns( c, wo ),
|
245
205
|
|
246
|
-
|
247
|
-
|
206
|
+
if ( t && valid !== false ) {
|
207
|
+
c.$table.find( '.' + tse.lastEdited ).removeClass( tse.lastEdited );
|
208
|
+
$this
|
209
|
+
.addClass( tse.lastEdited )
|
210
|
+
.html( valid )
|
211
|
+
.data( 'before', valid )
|
212
|
+
.data( 'original', valid )
|
213
|
+
.trigger( 'change' );
|
214
|
+
c.$table.trigger( 'updateCell', [ $this.closest( 'td' ), false, function() {
|
215
|
+
if ( wo.editable_autoResort ) {
|
216
|
+
setTimeout( function() {
|
217
|
+
c.$table.trigger( 'sorton', [ c.sortList, function() {
|
218
|
+
tse.editComplete( c, wo, c.$table.data( 'contentFocused' ), true );
|
219
|
+
}, true ] );
|
220
|
+
}, 10 );
|
221
|
+
} else {
|
222
|
+
tse.editComplete( c, wo, c.$table.data( 'contentFocused' ) );
|
223
|
+
}
|
224
|
+
} ] );
|
225
|
+
return false;
|
226
|
+
}
|
227
|
+
} else if ( !valid && e.type !== 'keydown' ) {
|
228
|
+
clearTimeout( $this.data( 'timer' ) );
|
229
|
+
$this.data( 'timer', setTimeout( function() {
|
230
|
+
c.table.isUpdating = false; // clear flag or sorting will be disabled
|
231
|
+
|
232
|
+
if ( $.isFunction( wo.editable_blur ) ) {
|
233
|
+
txt = $this.html();
|
234
|
+
wo.editable_blur( wo.editable_trimContent ? $.trim( txt ) : txt, column, $this );
|
235
|
+
}
|
236
|
+
}, 100 ) );
|
237
|
+
// restore original content on blur
|
238
|
+
$this.html( $this.data( 'original' ) );
|
239
|
+
}
|
240
|
+
});
|
241
|
+
},
|
242
|
+
destroy : function( c, wo ) {
|
243
|
+
var namespace = tse.namespace,
|
244
|
+
cols = tse.getColumns( c, wo ),
|
245
|
+
|
246
|
+
tmp = ( 'updateComplete pagerComplete '.split( ' ' ).join( namespace + ' ' ) ).replace( /\s+/g, ' ' );
|
247
|
+
c.$table.off( tmp );
|
248
248
|
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
249
|
+
tmp = ( 'focus blur focusout keydown '.split( ' ' ).join( namespace + ' ' ) ).replace( /\s+/g, ' ' );
|
250
|
+
c.$tbodies
|
251
|
+
.off( tmp )
|
252
|
+
.find( cols.join( ',' ) )
|
253
|
+
.find( '[contenteditable]' )
|
254
|
+
.prop( 'contenteditable', false );
|
255
|
+
}
|
256
256
|
|
257
|
-
};
|
257
|
+
};
|
258
258
|
|
259
259
|
$.tablesorter.addWidget({
|
260
260
|
id: 'editable',
|