Feature #1718 » 0001-Support-table-column-sorting.patch
app/helpers/application_helper.rb | ||
---|---|---|
1631 | 1631 | |
1632 | 1632 |
# Returns the javascript tags that are included in the html layout head |
1633 | 1633 |
def javascript_heads |
1634 |
tags = javascript_include_tag('jquery-3.5.1-ui-1.12.1-ujs-5.2.3', 'tribute-5.1.3.min', 'application', 'responsive') |
|
1634 |
tags = javascript_include_tag( |
|
1635 |
'jquery-3.5.1-ui-1.12.1-ujs-5.2.3', |
|
1636 |
'tribute-5.1.3.min', |
|
1637 |
'tablesort-5.2.1.min.js', |
|
1638 |
'tablesort-5.2.1.number.min.js', |
|
1639 |
'application', |
|
1640 |
'responsive') |
|
1635 | 1641 |
unless User.current.pref.warn_on_leaving_unsaved == '0' |
1636 | 1642 |
tags << "\n".html_safe + javascript_tag("$(window).on('load', function(){ warnLeavingUnsaved('#{escape_javascript l(:text_warn_on_leaving_unsaved)}'); });") |
1637 | 1643 |
end |
app/views/journals/update.js.erb | ||
---|---|---|
7 | 7 |
$("#journal-<%= @journal.id %>-notes").replaceWith('<%= escape_javascript(render_notes(@journal.issue, @journal, :reply_links => authorize_for('issues', 'edit'))) %>'); |
8 | 8 |
$("#journal-<%= @journal.id %>-notes").show(); |
9 | 9 |
$("#journal-<%= @journal.id %>-form").remove(); |
10 |
setupWikiTableSortableHeader(); |
|
10 | 11 |
<% end %> |
11 | 12 | |
12 | 13 |
<%= call_hook(:view_journals_update_js_bottom, { :journal => @journal }) %> |
public/javascripts/application.js | ||
---|---|---|
969 | 969 |
data: "text=" + element + '&' + attachments, |
970 | 970 |
success: function(data){ |
971 | 971 |
jstBlock.find('.wiki-preview').html(data); |
972 |
setupWikiTableSortableHeader(); |
|
972 | 973 |
} |
973 | 974 |
}); |
974 | 975 |
}); |
... | ... | |
1010 | 1011 |
$(window).resize(setFilecontentContainerHeight); |
1011 | 1012 |
} |
1012 | 1013 | |
1014 |
function setupWikiTableSortableHeader() { |
|
1015 |
$('div.wiki table').each(function(i, table){ |
|
1016 |
if (table.rows.length < 3) return true; |
|
1017 |
var tr = $(table.rows).first(); |
|
1018 |
if (tr.find("TH").length > 0) { |
|
1019 |
tr.attr('data-sort-method', 'none'); |
|
1020 |
tr.find("TD").attr('data-sort-method', 'none'); |
|
1021 |
new Tablesort(table); |
|
1022 |
} |
|
1023 |
}); |
|
1024 |
} |
|
1013 | 1025 | |
1014 | 1026 |
$(function () { |
1015 | 1027 |
$('[title]').tooltip({ |
... | ... | |
1080 | 1092 |
$(document).ready(setupAttachmentDetail); |
1081 | 1093 |
$(document).ready(setupTabs); |
1082 | 1094 |
$(document).ready(setupFilePreviewNavigation); |
1095 |
$(document).ready(setupWikiTableSortableHeader); |
|
1083 | 1096 |
$(document).on('focus', '[data-auto-complete=true]', function(event) { |
1084 | 1097 |
inlineAutoComplete(event.target); |
1085 | 1098 |
}); |
public/javascripts/tablesort-5.2.1.min.js | ||
---|---|---|
1 |
/*! |
|
2 |
* tablesort v5.2.1 (2020-06-02) |
|
3 |
* http://tristen.ca/tablesort/demo/ |
|
4 |
* Copyright (c) 2020 ; Licensed MIT |
|
5 |
*/ |
|
6 |
!function(){function a(b,c){if(!(this instanceof a))return new a(b,c);if(!b||"TABLE"!==b.tagName)throw new Error("Element must be a table");this.init(b,c||{})}var b=[],c=function(a){var b;return window.CustomEvent&&"function"==typeof window.CustomEvent?b=new CustomEvent(a):(b=document.createEvent("CustomEvent"),b.initCustomEvent(a,!1,!1,void 0)),b},d=function(a){return a.getAttribute("data-sort")||a.textContent||a.innerText||""},e=function(a,b){return a=a.trim().toLowerCase(),b=b.trim().toLowerCase(),a===b?0:a<b?1:-1},f=function(a,b){return[].slice.call(a).find(function(a){return a.getAttribute("data-sort-column-key")===b})},g=function(a,b){return function(c,d){var e=a(c.td,d.td);return 0===e?b?d.index-c.index:c.index-d.index:e}};a.extend=function(a,c,d){if("function"!=typeof c||"function"!=typeof d)throw new Error("Pattern and sort must be a function");b.push({name:a,pattern:c,sort:d})},a.prototype={init:function(a,b){var c,d,e,f,g=this;if(g.table=a,g.thead=!1,g.options=b,a.rows&&a.rows.length>0)if(a.tHead&&a.tHead.rows.length>0){for(e=0;e<a.tHead.rows.length;e++)if("thead"===a.tHead.rows[e].getAttribute("data-sort-method")){c=a.tHead.rows[e];break}c||(c=a.tHead.rows[a.tHead.rows.length-1]),g.thead=!0}else c=a.rows[0];if(c){var h=function(){g.current&&g.current!==this&&g.current.removeAttribute("aria-sort"),g.current=this,g.sortTable(this)};for(e=0;e<c.cells.length;e++)f=c.cells[e],f.setAttribute("role","columnheader"),"none"!==f.getAttribute("data-sort-method")&&(f.tabindex=0,f.addEventListener("click",h,!1),null!==f.getAttribute("data-sort-default")&&(d=f));d&&(g.current=d,g.sortTable(d))}},sortTable:function(a,h){var i=this,j=a.getAttribute("data-sort-column-key"),k=a.cellIndex,l=e,m="",n=[],o=i.thead?0:1,p=a.getAttribute("data-sort-method"),q=a.getAttribute("aria-sort");if(i.table.dispatchEvent(c("beforeSort")),h||(q="ascending"===q?"descending":"descending"===q?"ascending":i.options.descending?"descending":"ascending",a.setAttribute("aria-sort",q)),!(i.table.rows.length<2)){if(!p){for(var r;n.length<3&&o<i.table.tBodies[0].rows.length;)r=j?f(i.table.tBodies[0].rows[o].cells,j):i.table.tBodies[0].rows[o].cells[k],m=r?d(r):"",m=m.trim(),m.length>0&&n.push(m),o++;if(!n)return}for(o=0;o<b.length;o++)if(m=b[o],p){if(m.name===p){l=m.sort;break}}else if(n.every(m.pattern)){l=m.sort;break}for(i.col=k,o=0;o<i.table.tBodies.length;o++){var s,t=[],u={},v=0,w=0;if(!(i.table.tBodies[o].rows.length<2)){for(s=0;s<i.table.tBodies[o].rows.length;s++){var r;m=i.table.tBodies[o].rows[s],"none"===m.getAttribute("data-sort-method")?u[v]=m:(r=j?f(m.cells,j):m.cells[i.col],t.push({tr:m,td:r?d(r):"",index:v})),v++}for("descending"===q?t.sort(g(l,!0)):(t.sort(g(l,!1)),t.reverse()),s=0;s<v;s++)u[s]?(m=u[s],w++):m=t[s-w].tr,i.table.tBodies[o].appendChild(m)}}i.table.dispatchEvent(c("afterSort"))}},refresh:function(){void 0!==this.current&&this.sortTable(this.current,!0)}},"undefined"!=typeof module&&module.exports?module.exports=a:window.Tablesort=a}(); |
public/javascripts/tablesort-5.2.1.number.min.js | ||
---|---|---|
1 |
/*! |
|
2 |
* tablesort v5.2.1 (2020-06-02) |
|
3 |
* http://tristen.ca/tablesort/demo/ |
|
4 |
* Copyright (c) 2020 ; Licensed MIT |
|
5 |
*/ |
|
6 |
!function(){var a=function(a){return a.replace(/[^\-?0-9.]/g,"")},b=function(a,b){return a=parseFloat(a),b=parseFloat(b),a=isNaN(a)?0:a,b=isNaN(b)?0:b,a-b};Tablesort.extend("number",function(a){return a.match(/^[-+]?[£\x24Û¢´€]?\d+\s*([,\.]\d{0,2})/)||a.match(/^[-+]?\d+\s*([,\.]\d{0,2})?[£\x24Û¢´€]/)||a.match(/^[-+]?(\d)*-?([,\.]){0,1}-?(\d)+([E,e][\-+][\d]+)?%?$/)},function(c,d){return c=a(c),d=a(d),b(d,c)})}(); |
public/stylesheets/application.css | ||
---|---|---|
1780 | 1780 |
} |
1781 | 1781 |
select[multiple=multiple] {padding-right: 0;} |
1782 | 1782 |
} |
1783 | ||
1784 |
/* tablesort */ |
|
1785 |
th[role=columnheader]:not(.no-sort) { |
|
1786 |
cursor: pointer; |
|
1787 |
} |
|
1788 | ||
1789 |
th[role=columnheader]:not(.no-sort):after { |
|
1790 |
content: ''; |
|
1791 |
float: right; |
|
1792 |
margin-top: 7px; |
|
1793 |
border-width: 0 4px 4px; |
|
1794 |
border-style: solid; |
|
1795 |
border-color: #404040 transparent; |
|
1796 |
display: none; |
|
1797 |
opacity: 0; |
|
1798 |
-ms-user-select: none; |
|
1799 |
-webkit-user-select: none; |
|
1800 |
-moz-user-select: none; |
|
1801 |
user-select: none; |
|
1802 |
} |
|
1803 | ||
1804 |
th[aria-sort=ascending]:not(.no-sort):after { |
|
1805 |
border-bottom: none; |
|
1806 |
border-width: 4px 4px 0; |
|
1807 |
} |
|
1808 | ||
1809 |
th[aria-sort]:not(.no-sort):after { |
|
1810 |
display: inline; |
|
1811 |
opacity: 0.4; |
|
1812 |
} |
|
1813 | ||
1814 |
th[role=columnheader]:not(.no-sort):hover:after { |
|
1815 |
display: inline; |
|
1816 |
opacity: 1; |
|
1817 |
} |