Fossil SCM
Improvements to the /bigbloblist page. Fix the output_table_sorting_javascript() routine so that the sort is stable even when selecting a field that defaults to sorting in reverse order.
Commit
f982642315990886e7a9c2a4abd1928ca00f9695
Parent
483317fb0e99bf2…
2 files changed
+12
-7
+80
-31
+12
-7
| --- src/name.c | ||
| +++ src/name.c | ||
| @@ -1017,11 +1017,11 @@ | ||
| 1017 | 1017 | int rid = db_column_int(&q,0); |
| 1018 | 1018 | const char *zUuid = db_column_text(&q, 1); |
| 1019 | 1019 | const char *zDesc = db_column_text(&q, 2); |
| 1020 | 1020 | int isPriv = db_column_int(&q,3); |
| 1021 | 1021 | @ <tr><td align="right">%d(rid)</td> |
| 1022 | - @ <td> %z(href("%R/info/%!S",zUuid))%s(zUuid)</a> </td> | |
| 1022 | + @ <td> %z(href("%R/info/%!S",zUuid))%S(zUuid)</a> </td> | |
| 1023 | 1023 | @ <td align="left">%h(zDesc)</td> |
| 1024 | 1024 | if( isPriv ){ |
| 1025 | 1025 | @ <td>(unpublished)</td> |
| 1026 | 1026 | } |
| 1027 | 1027 | @ </tr> |
| @@ -1054,33 +1054,38 @@ | ||
| 1054 | 1054 | " LIMIT %d;", n |
| 1055 | 1055 | ); |
| 1056 | 1056 | describe_artifacts("IN toshow"); |
| 1057 | 1057 | db_prepare(&q, |
| 1058 | 1058 | "SELECT description.rid, description.uuid, description.summary," |
| 1059 | - " length(blob.content), coalesce(delta.srcid,'')" | |
| 1059 | + " length(blob.content), coalesce(delta.srcid,'')," | |
| 1060 | + " datetime(description.ctime)" | |
| 1060 | 1061 | " FROM description, blob LEFT JOIN delta ON delta.rid=blob.rid" |
| 1061 | 1062 | " WHERE description.rid=blob.rid" |
| 1062 | 1063 | " ORDER BY length(content) DESC" |
| 1063 | 1064 | ); |
| 1064 | - @ <table cellpadding="0" cellspacing="0" border="1"> | |
| 1065 | - @ <tr><th align="right">Size<th align="right">RID | |
| 1066 | - @ <th align="right">Delta From<th>SHA1<th>Description | |
| 1065 | + @ <table cellpadding="2" cellspacing="0" border="1" id="bigblobtab"> | |
| 1066 | + @ <thead><tr><th align="right">Size<th align="right">RID | |
| 1067 | + @ <th align="right">Delta From<th>SHA1<th>Description<th>Date</tr></thead> | |
| 1068 | + @ <tbody> | |
| 1067 | 1069 | while( db_step(&q)==SQLITE_ROW ){ |
| 1068 | 1070 | int rid = db_column_int(&q,0); |
| 1069 | 1071 | const char *zUuid = db_column_text(&q, 1); |
| 1070 | 1072 | const char *zDesc = db_column_text(&q, 2); |
| 1071 | 1073 | int sz = db_column_int(&q,3); |
| 1072 | 1074 | const char *zSrcId = db_column_text(&q,4); |
| 1075 | + const char *zDate = db_column_text(&q,5); | |
| 1073 | 1076 | @ <tr><td align="right">%d(sz)</td> |
| 1074 | 1077 | @ <td align="right">%d(rid)</td> |
| 1075 | 1078 | @ <td align="right">%s(zSrcId)</td> |
| 1076 | - @ <td> %z(href("%R/info/%!S",zUuid))%s(zUuid)</a> </td> | |
| 1079 | + @ <td> %z(href("%R/info/%!S",zUuid))%S(zUuid)</a> </td> | |
| 1077 | 1080 | @ <td align="left">%h(zDesc)</td> |
| 1081 | + @ <td align="left">%z(href("%R/timeline?c=%T",zDate))%s(zDate)</a></td> | |
| 1078 | 1082 | @ </tr> |
| 1079 | 1083 | } |
| 1080 | - @ </table> | |
| 1084 | + @ </tbody></table> | |
| 1081 | 1085 | db_finalize(&q); |
| 1086 | + output_table_sorting_javascript("bigblobtab", "NnnttT", -1); | |
| 1082 | 1087 | style_footer(); |
| 1083 | 1088 | } |
| 1084 | 1089 | |
| 1085 | 1090 | /* |
| 1086 | 1091 | ** COMMAND: test-unsent |
| 1087 | 1092 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -1017,11 +1017,11 @@ | |
| 1017 | int rid = db_column_int(&q,0); |
| 1018 | const char *zUuid = db_column_text(&q, 1); |
| 1019 | const char *zDesc = db_column_text(&q, 2); |
| 1020 | int isPriv = db_column_int(&q,3); |
| 1021 | @ <tr><td align="right">%d(rid)</td> |
| 1022 | @ <td> %z(href("%R/info/%!S",zUuid))%s(zUuid)</a> </td> |
| 1023 | @ <td align="left">%h(zDesc)</td> |
| 1024 | if( isPriv ){ |
| 1025 | @ <td>(unpublished)</td> |
| 1026 | } |
| 1027 | @ </tr> |
| @@ -1054,33 +1054,38 @@ | |
| 1054 | " LIMIT %d;", n |
| 1055 | ); |
| 1056 | describe_artifacts("IN toshow"); |
| 1057 | db_prepare(&q, |
| 1058 | "SELECT description.rid, description.uuid, description.summary," |
| 1059 | " length(blob.content), coalesce(delta.srcid,'')" |
| 1060 | " FROM description, blob LEFT JOIN delta ON delta.rid=blob.rid" |
| 1061 | " WHERE description.rid=blob.rid" |
| 1062 | " ORDER BY length(content) DESC" |
| 1063 | ); |
| 1064 | @ <table cellpadding="0" cellspacing="0" border="1"> |
| 1065 | @ <tr><th align="right">Size<th align="right">RID |
| 1066 | @ <th align="right">Delta From<th>SHA1<th>Description |
| 1067 | while( db_step(&q)==SQLITE_ROW ){ |
| 1068 | int rid = db_column_int(&q,0); |
| 1069 | const char *zUuid = db_column_text(&q, 1); |
| 1070 | const char *zDesc = db_column_text(&q, 2); |
| 1071 | int sz = db_column_int(&q,3); |
| 1072 | const char *zSrcId = db_column_text(&q,4); |
| 1073 | @ <tr><td align="right">%d(sz)</td> |
| 1074 | @ <td align="right">%d(rid)</td> |
| 1075 | @ <td align="right">%s(zSrcId)</td> |
| 1076 | @ <td> %z(href("%R/info/%!S",zUuid))%s(zUuid)</a> </td> |
| 1077 | @ <td align="left">%h(zDesc)</td> |
| 1078 | @ </tr> |
| 1079 | } |
| 1080 | @ </table> |
| 1081 | db_finalize(&q); |
| 1082 | style_footer(); |
| 1083 | } |
| 1084 | |
| 1085 | /* |
| 1086 | ** COMMAND: test-unsent |
| 1087 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -1017,11 +1017,11 @@ | |
| 1017 | int rid = db_column_int(&q,0); |
| 1018 | const char *zUuid = db_column_text(&q, 1); |
| 1019 | const char *zDesc = db_column_text(&q, 2); |
| 1020 | int isPriv = db_column_int(&q,3); |
| 1021 | @ <tr><td align="right">%d(rid)</td> |
| 1022 | @ <td> %z(href("%R/info/%!S",zUuid))%S(zUuid)</a> </td> |
| 1023 | @ <td align="left">%h(zDesc)</td> |
| 1024 | if( isPriv ){ |
| 1025 | @ <td>(unpublished)</td> |
| 1026 | } |
| 1027 | @ </tr> |
| @@ -1054,33 +1054,38 @@ | |
| 1054 | " LIMIT %d;", n |
| 1055 | ); |
| 1056 | describe_artifacts("IN toshow"); |
| 1057 | db_prepare(&q, |
| 1058 | "SELECT description.rid, description.uuid, description.summary," |
| 1059 | " length(blob.content), coalesce(delta.srcid,'')," |
| 1060 | " datetime(description.ctime)" |
| 1061 | " FROM description, blob LEFT JOIN delta ON delta.rid=blob.rid" |
| 1062 | " WHERE description.rid=blob.rid" |
| 1063 | " ORDER BY length(content) DESC" |
| 1064 | ); |
| 1065 | @ <table cellpadding="2" cellspacing="0" border="1" id="bigblobtab"> |
| 1066 | @ <thead><tr><th align="right">Size<th align="right">RID |
| 1067 | @ <th align="right">Delta From<th>SHA1<th>Description<th>Date</tr></thead> |
| 1068 | @ <tbody> |
| 1069 | while( db_step(&q)==SQLITE_ROW ){ |
| 1070 | int rid = db_column_int(&q,0); |
| 1071 | const char *zUuid = db_column_text(&q, 1); |
| 1072 | const char *zDesc = db_column_text(&q, 2); |
| 1073 | int sz = db_column_int(&q,3); |
| 1074 | const char *zSrcId = db_column_text(&q,4); |
| 1075 | const char *zDate = db_column_text(&q,5); |
| 1076 | @ <tr><td align="right">%d(sz)</td> |
| 1077 | @ <td align="right">%d(rid)</td> |
| 1078 | @ <td align="right">%s(zSrcId)</td> |
| 1079 | @ <td> %z(href("%R/info/%!S",zUuid))%S(zUuid)</a> </td> |
| 1080 | @ <td align="left">%h(zDesc)</td> |
| 1081 | @ <td align="left">%z(href("%R/timeline?c=%T",zDate))%s(zDate)</a></td> |
| 1082 | @ </tr> |
| 1083 | } |
| 1084 | @ </tbody></table> |
| 1085 | db_finalize(&q); |
| 1086 | output_table_sorting_javascript("bigblobtab", "NnnttT", -1); |
| 1087 | style_footer(); |
| 1088 | } |
| 1089 | |
| 1090 | /* |
| 1091 | ** COMMAND: test-unsent |
| 1092 |
+80
-31
| --- src/report.c | ||
| +++ src/report.c | ||
| @@ -977,13 +977,28 @@ | ||
| 977 | 977 | @ this.columnTypes = columnTypes; |
| 978 | 978 | @ this.sort = function (cell) { |
| 979 | 979 | @ var column = cell.cellIndex; |
| 980 | 980 | @ var sortFn; |
| 981 | 981 | @ switch( cell.sortType ){ |
| 982 | - @ case "N": case "n": sortFn = this.sortNumeric; break; | |
| 983 | - @ case "T": case "t": sortFn = this.sortText; break; | |
| 984 | - @ case "K": case "k": sortFn = this.sortKey; break; | |
| 982 | + if( strchr(zColumnTypes,'n') ){ | |
| 983 | + @ case "n": sortFn = this.sortNumeric; break; | |
| 984 | + } | |
| 985 | + if( strchr(zColumnTypes,'N') ){ | |
| 986 | + @ case "N": sortFn = this.sortReverseNumeric; break; | |
| 987 | + } | |
| 988 | + if( strchr(zColumnTypes,'t') ){ | |
| 989 | + @ case "t": sortFn = this.sortText; break; | |
| 990 | + } | |
| 991 | + if( strchr(zColumnTypes,'T') ){ | |
| 992 | + @ case "T": sortFn = this.sortReverseText; break; | |
| 993 | + } | |
| 994 | + if( strchr(zColumnTypes,'k') ){ | |
| 995 | + @ case "k": sortFn = this.sortKey; break; | |
| 996 | + } | |
| 997 | + if( strchr(zColumnTypes,'K') ){ | |
| 998 | + @ case "K": sortFn = this.sortReverseKey; break; | |
| 999 | + } | |
| 985 | 1000 | @ default: return; |
| 986 | 1001 | @ } |
| 987 | 1002 | @ this.sortIndex = column; |
| 988 | 1003 | @ var newRows = new Array(); |
| 989 | 1004 | @ for (j = 0; j < this.tbody[0].rows.length; j++) { |
| @@ -993,13 +1008,10 @@ | ||
| 993 | 1008 | @ newRows.reverse(); |
| 994 | 1009 | @ this.prevColumn = -this.prevColumn; |
| 995 | 1010 | @ }else{ |
| 996 | 1011 | @ newRows.sort(sortFn); |
| 997 | 1012 | @ this.prevColumn = this.sortIndex+1; |
| 998 | - @ if( cell.sortType>="A" && cell.sortType<="Z" ){ | |
| 999 | - @ newRows.reverse(); | |
| 1000 | - @ } | |
| 1001 | 1013 | @ } |
| 1002 | 1014 | @ for (i=0;i<newRows.length;i++) { |
| 1003 | 1015 | @ this.tbody[0].appendChild(newRows[i]); |
| 1004 | 1016 | @ } |
| 1005 | 1017 | @ this.setHdrIcons(); |
| @@ -1019,35 +1031,72 @@ | ||
| 1019 | 1031 | @ var clsName = hdrCell.className.replace(/\s*\bsort\s*\w+/, ''); |
| 1020 | 1032 | @ clsName += ' sort ' + sortType; |
| 1021 | 1033 | @ hdrCell.className = clsName; |
| 1022 | 1034 | @ } |
| 1023 | 1035 | @ } |
| 1024 | - @ this.sortText = function(a,b) { | |
| 1025 | - @ var i = thisObject.sortIndex; | |
| 1026 | - @ aa = a.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); | |
| 1027 | - @ bb = b.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); | |
| 1028 | - @ if(aa==bb) return a.rowIndex-b.rowIndex; | |
| 1029 | - @ if(aa<bb) return -1; | |
| 1030 | - @ return 1; | |
| 1031 | - @ } | |
| 1032 | - @ this.sortNumeric = function(a,b) { | |
| 1033 | - @ var i = thisObject.sortIndex; | |
| 1034 | - @ aa = parseFloat(a.cells[i].textContent); | |
| 1035 | - @ if (isNaN(aa)) aa = 0; | |
| 1036 | - @ bb = parseFloat(b.cells[i].textContent); | |
| 1037 | - @ if (isNaN(bb)) bb = 0; | |
| 1038 | - @ if(aa==bb) return a.rowIndex-b.rowIndex; | |
| 1039 | - @ return aa-bb; | |
| 1040 | - @ } | |
| 1041 | - @ this.sortKey = function(a,b) { | |
| 1042 | - @ var i = thisObject.sortIndex; | |
| 1043 | - @ aa = a.cells[i].getAttribute("data-sortkey"); | |
| 1044 | - @ bb = b.cells[i].getAttribute("data-sortkey"); | |
| 1045 | - @ if(aa==bb) return a.rowIndex-b.rowIndex; | |
| 1046 | - @ if(aa<bb) return -1; | |
| 1047 | - @ return 1; | |
| 1048 | - @ } | |
| 1036 | + if( strchr(zColumnTypes,'t') ){ | |
| 1037 | + @ this.sortText = function(a,b) { | |
| 1038 | + @ var i = thisObject.sortIndex; | |
| 1039 | + @ aa = a.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); | |
| 1040 | + @ bb = b.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); | |
| 1041 | + @ if(aa<bb) return -1; | |
| 1042 | + @ if(aa==bb) return a.rowIndex-b.rowIndex; | |
| 1043 | + @ return 1; | |
| 1044 | + @ } | |
| 1045 | + } | |
| 1046 | + if( strchr(zColumnTypes,'T') ){ | |
| 1047 | + @ this.sortReverseText = function(a,b) { | |
| 1048 | + @ var i = thisObject.sortIndex; | |
| 1049 | + @ aa = a.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); | |
| 1050 | + @ bb = b.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); | |
| 1051 | + @ if(aa<bb) return +1; | |
| 1052 | + @ if(aa==bb) return a.rowIndex-b.rowIndex; | |
| 1053 | + @ return -1; | |
| 1054 | + @ } | |
| 1055 | + } | |
| 1056 | + if( strchr(zColumnTypes,'n') ){ | |
| 1057 | + @ this.sortNumeric = function(a,b) { | |
| 1058 | + @ var i = thisObject.sortIndex; | |
| 1059 | + @ aa = parseFloat(a.cells[i].textContent); | |
| 1060 | + @ if (isNaN(aa)) aa = 0; | |
| 1061 | + @ bb = parseFloat(b.cells[i].textContent); | |
| 1062 | + @ if (isNaN(bb)) bb = 0; | |
| 1063 | + @ if(aa==bb) return a.rowIndex-b.rowIndex; | |
| 1064 | + @ return aa-bb; | |
| 1065 | + @ } | |
| 1066 | + } | |
| 1067 | + if( strchr(zColumnTypes,'N') ){ | |
| 1068 | + @ this.sortReverseNumeric = function(a,b) { | |
| 1069 | + @ var i = thisObject.sortIndex; | |
| 1070 | + @ aa = parseFloat(a.cells[i].textContent); | |
| 1071 | + @ if (isNaN(aa)) aa = 0; | |
| 1072 | + @ bb = parseFloat(b.cells[i].textContent); | |
| 1073 | + @ if (isNaN(bb)) bb = 0; | |
| 1074 | + @ if(aa==bb) return a.rowIndex-b.rowIndex; | |
| 1075 | + @ return bb-aa; | |
| 1076 | + @ } | |
| 1077 | + } | |
| 1078 | + if( strchr(zColumnTypes,'k') ){ | |
| 1079 | + @ this.sortKey = function(a,b) { | |
| 1080 | + @ var i = thisObject.sortIndex; | |
| 1081 | + @ aa = a.cells[i].getAttribute("data-sortkey"); | |
| 1082 | + @ bb = b.cells[i].getAttribute("data-sortkey"); | |
| 1083 | + @ if(aa<bb) return -1; | |
| 1084 | + @ if(aa==bb) return a.rowIndex-b.rowIndex; | |
| 1085 | + @ return 1; | |
| 1086 | + @ } | |
| 1087 | + } | |
| 1088 | + if( strchr(zColumnTypes,'K') ){ | |
| 1089 | + @ this.sortReverseKey = function(a,b) { | |
| 1090 | + @ var i = thisObject.sortIndex; | |
| 1091 | + @ aa = a.cells[i].getAttribute("data-sortkey"); | |
| 1092 | + @ bb = b.cells[i].getAttribute("data-sortkey"); | |
| 1093 | + @ if(aa<bb) return +1; | |
| 1094 | + @ if(aa==bb) return a.rowIndex-b.rowIndex; | |
| 1095 | + @ return -1; | |
| 1096 | + @ } | |
| 1097 | + } | |
| 1049 | 1098 | @ var x = tableEl.getElementsByTagName('thead'); |
| 1050 | 1099 | @ if(!(this.tbody && this.tbody[0].rows && this.tbody[0].rows.length>0)){ |
| 1051 | 1100 | @ return; |
| 1052 | 1101 | @ } |
| 1053 | 1102 | @ if(x && x[0].rows && x[0].rows.length > 0) { |
| 1054 | 1103 |
| --- src/report.c | |
| +++ src/report.c | |
| @@ -977,13 +977,28 @@ | |
| 977 | @ this.columnTypes = columnTypes; |
| 978 | @ this.sort = function (cell) { |
| 979 | @ var column = cell.cellIndex; |
| 980 | @ var sortFn; |
| 981 | @ switch( cell.sortType ){ |
| 982 | @ case "N": case "n": sortFn = this.sortNumeric; break; |
| 983 | @ case "T": case "t": sortFn = this.sortText; break; |
| 984 | @ case "K": case "k": sortFn = this.sortKey; break; |
| 985 | @ default: return; |
| 986 | @ } |
| 987 | @ this.sortIndex = column; |
| 988 | @ var newRows = new Array(); |
| 989 | @ for (j = 0; j < this.tbody[0].rows.length; j++) { |
| @@ -993,13 +1008,10 @@ | |
| 993 | @ newRows.reverse(); |
| 994 | @ this.prevColumn = -this.prevColumn; |
| 995 | @ }else{ |
| 996 | @ newRows.sort(sortFn); |
| 997 | @ this.prevColumn = this.sortIndex+1; |
| 998 | @ if( cell.sortType>="A" && cell.sortType<="Z" ){ |
| 999 | @ newRows.reverse(); |
| 1000 | @ } |
| 1001 | @ } |
| 1002 | @ for (i=0;i<newRows.length;i++) { |
| 1003 | @ this.tbody[0].appendChild(newRows[i]); |
| 1004 | @ } |
| 1005 | @ this.setHdrIcons(); |
| @@ -1019,35 +1031,72 @@ | |
| 1019 | @ var clsName = hdrCell.className.replace(/\s*\bsort\s*\w+/, ''); |
| 1020 | @ clsName += ' sort ' + sortType; |
| 1021 | @ hdrCell.className = clsName; |
| 1022 | @ } |
| 1023 | @ } |
| 1024 | @ this.sortText = function(a,b) { |
| 1025 | @ var i = thisObject.sortIndex; |
| 1026 | @ aa = a.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); |
| 1027 | @ bb = b.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); |
| 1028 | @ if(aa==bb) return a.rowIndex-b.rowIndex; |
| 1029 | @ if(aa<bb) return -1; |
| 1030 | @ return 1; |
| 1031 | @ } |
| 1032 | @ this.sortNumeric = function(a,b) { |
| 1033 | @ var i = thisObject.sortIndex; |
| 1034 | @ aa = parseFloat(a.cells[i].textContent); |
| 1035 | @ if (isNaN(aa)) aa = 0; |
| 1036 | @ bb = parseFloat(b.cells[i].textContent); |
| 1037 | @ if (isNaN(bb)) bb = 0; |
| 1038 | @ if(aa==bb) return a.rowIndex-b.rowIndex; |
| 1039 | @ return aa-bb; |
| 1040 | @ } |
| 1041 | @ this.sortKey = function(a,b) { |
| 1042 | @ var i = thisObject.sortIndex; |
| 1043 | @ aa = a.cells[i].getAttribute("data-sortkey"); |
| 1044 | @ bb = b.cells[i].getAttribute("data-sortkey"); |
| 1045 | @ if(aa==bb) return a.rowIndex-b.rowIndex; |
| 1046 | @ if(aa<bb) return -1; |
| 1047 | @ return 1; |
| 1048 | @ } |
| 1049 | @ var x = tableEl.getElementsByTagName('thead'); |
| 1050 | @ if(!(this.tbody && this.tbody[0].rows && this.tbody[0].rows.length>0)){ |
| 1051 | @ return; |
| 1052 | @ } |
| 1053 | @ if(x && x[0].rows && x[0].rows.length > 0) { |
| 1054 |
| --- src/report.c | |
| +++ src/report.c | |
| @@ -977,13 +977,28 @@ | |
| 977 | @ this.columnTypes = columnTypes; |
| 978 | @ this.sort = function (cell) { |
| 979 | @ var column = cell.cellIndex; |
| 980 | @ var sortFn; |
| 981 | @ switch( cell.sortType ){ |
| 982 | if( strchr(zColumnTypes,'n') ){ |
| 983 | @ case "n": sortFn = this.sortNumeric; break; |
| 984 | } |
| 985 | if( strchr(zColumnTypes,'N') ){ |
| 986 | @ case "N": sortFn = this.sortReverseNumeric; break; |
| 987 | } |
| 988 | if( strchr(zColumnTypes,'t') ){ |
| 989 | @ case "t": sortFn = this.sortText; break; |
| 990 | } |
| 991 | if( strchr(zColumnTypes,'T') ){ |
| 992 | @ case "T": sortFn = this.sortReverseText; break; |
| 993 | } |
| 994 | if( strchr(zColumnTypes,'k') ){ |
| 995 | @ case "k": sortFn = this.sortKey; break; |
| 996 | } |
| 997 | if( strchr(zColumnTypes,'K') ){ |
| 998 | @ case "K": sortFn = this.sortReverseKey; break; |
| 999 | } |
| 1000 | @ default: return; |
| 1001 | @ } |
| 1002 | @ this.sortIndex = column; |
| 1003 | @ var newRows = new Array(); |
| 1004 | @ for (j = 0; j < this.tbody[0].rows.length; j++) { |
| @@ -993,13 +1008,10 @@ | |
| 1008 | @ newRows.reverse(); |
| 1009 | @ this.prevColumn = -this.prevColumn; |
| 1010 | @ }else{ |
| 1011 | @ newRows.sort(sortFn); |
| 1012 | @ this.prevColumn = this.sortIndex+1; |
| 1013 | @ } |
| 1014 | @ for (i=0;i<newRows.length;i++) { |
| 1015 | @ this.tbody[0].appendChild(newRows[i]); |
| 1016 | @ } |
| 1017 | @ this.setHdrIcons(); |
| @@ -1019,35 +1031,72 @@ | |
| 1031 | @ var clsName = hdrCell.className.replace(/\s*\bsort\s*\w+/, ''); |
| 1032 | @ clsName += ' sort ' + sortType; |
| 1033 | @ hdrCell.className = clsName; |
| 1034 | @ } |
| 1035 | @ } |
| 1036 | if( strchr(zColumnTypes,'t') ){ |
| 1037 | @ this.sortText = function(a,b) { |
| 1038 | @ var i = thisObject.sortIndex; |
| 1039 | @ aa = a.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); |
| 1040 | @ bb = b.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); |
| 1041 | @ if(aa<bb) return -1; |
| 1042 | @ if(aa==bb) return a.rowIndex-b.rowIndex; |
| 1043 | @ return 1; |
| 1044 | @ } |
| 1045 | } |
| 1046 | if( strchr(zColumnTypes,'T') ){ |
| 1047 | @ this.sortReverseText = function(a,b) { |
| 1048 | @ var i = thisObject.sortIndex; |
| 1049 | @ aa = a.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); |
| 1050 | @ bb = b.cells[i].textContent.replace(/^\W+/,'').toLowerCase(); |
| 1051 | @ if(aa<bb) return +1; |
| 1052 | @ if(aa==bb) return a.rowIndex-b.rowIndex; |
| 1053 | @ return -1; |
| 1054 | @ } |
| 1055 | } |
| 1056 | if( strchr(zColumnTypes,'n') ){ |
| 1057 | @ this.sortNumeric = function(a,b) { |
| 1058 | @ var i = thisObject.sortIndex; |
| 1059 | @ aa = parseFloat(a.cells[i].textContent); |
| 1060 | @ if (isNaN(aa)) aa = 0; |
| 1061 | @ bb = parseFloat(b.cells[i].textContent); |
| 1062 | @ if (isNaN(bb)) bb = 0; |
| 1063 | @ if(aa==bb) return a.rowIndex-b.rowIndex; |
| 1064 | @ return aa-bb; |
| 1065 | @ } |
| 1066 | } |
| 1067 | if( strchr(zColumnTypes,'N') ){ |
| 1068 | @ this.sortReverseNumeric = function(a,b) { |
| 1069 | @ var i = thisObject.sortIndex; |
| 1070 | @ aa = parseFloat(a.cells[i].textContent); |
| 1071 | @ if (isNaN(aa)) aa = 0; |
| 1072 | @ bb = parseFloat(b.cells[i].textContent); |
| 1073 | @ if (isNaN(bb)) bb = 0; |
| 1074 | @ if(aa==bb) return a.rowIndex-b.rowIndex; |
| 1075 | @ return bb-aa; |
| 1076 | @ } |
| 1077 | } |
| 1078 | if( strchr(zColumnTypes,'k') ){ |
| 1079 | @ this.sortKey = function(a,b) { |
| 1080 | @ var i = thisObject.sortIndex; |
| 1081 | @ aa = a.cells[i].getAttribute("data-sortkey"); |
| 1082 | @ bb = b.cells[i].getAttribute("data-sortkey"); |
| 1083 | @ if(aa<bb) return -1; |
| 1084 | @ if(aa==bb) return a.rowIndex-b.rowIndex; |
| 1085 | @ return 1; |
| 1086 | @ } |
| 1087 | } |
| 1088 | if( strchr(zColumnTypes,'K') ){ |
| 1089 | @ this.sortReverseKey = function(a,b) { |
| 1090 | @ var i = thisObject.sortIndex; |
| 1091 | @ aa = a.cells[i].getAttribute("data-sortkey"); |
| 1092 | @ bb = b.cells[i].getAttribute("data-sortkey"); |
| 1093 | @ if(aa<bb) return +1; |
| 1094 | @ if(aa==bb) return a.rowIndex-b.rowIndex; |
| 1095 | @ return -1; |
| 1096 | @ } |
| 1097 | } |
| 1098 | @ var x = tableEl.getElementsByTagName('thead'); |
| 1099 | @ if(!(this.tbody && this.tbody[0].rows && this.tbody[0].rows.length>0)){ |
| 1100 | @ return; |
| 1101 | @ } |
| 1102 | @ if(x && x[0].rows && x[0].rows.length > 0) { |
| 1103 |