feat: 初始化导航网站项目
添加 Flask 导航站应用,包含 Docker 部署配置、SQLite 数据库、静态资源及 CI/CD 流水线。
这个提交包含在:
@@ -0,0 +1,132 @@
|
||||
/*
|
||||
A simple, lightweight jQuery plugin for creating sortable tables.
|
||||
https://github.com/kylefox/jquery-tablesort
|
||||
Version 0.0.11
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
$.tablesort = function ($table, settings) {
|
||||
var self = this;
|
||||
this.$table = $table;
|
||||
this.$thead = this.$table.find('thead');
|
||||
this.settings = $.extend({}, $.tablesort.defaults, settings);
|
||||
this.$sortCells = this.$thead.length > 0 ? this.$thead.find('th:not(.no-sort)') : this.$table.find('th:not(.no-sort)');
|
||||
this.$sortCells.on('click.tablesort', function() {
|
||||
self.sort($(this));
|
||||
});
|
||||
this.index = null;
|
||||
this.$th = null;
|
||||
this.direction = null;
|
||||
};
|
||||
|
||||
$.tablesort.prototype = {
|
||||
|
||||
sort: function(th, direction) {
|
||||
var start = new Date(),
|
||||
self = this,
|
||||
table = this.$table,
|
||||
rowsContainer = table.find('tbody').length > 0 ? table.find('tbody') : table,
|
||||
rows = rowsContainer.find('tr').has('td, th'),
|
||||
cells = rows.find(':nth-child(' + (th.index() + 1) + ')').filter('td, th'),
|
||||
sortBy = th.data().sortBy,
|
||||
sortedMap = [];
|
||||
|
||||
var unsortedValues = cells.map(function(idx, cell) {
|
||||
if (sortBy)
|
||||
return (typeof sortBy === 'function') ? sortBy($(th), $(cell), self) : sortBy;
|
||||
return ($(this).data().sortValue != null ? $(this).data().sortValue : $(this).text());
|
||||
});
|
||||
if (unsortedValues.length === 0) return;
|
||||
|
||||
//click on a different column
|
||||
if (this.index !== th.index()) {
|
||||
this.direction = 'asc';
|
||||
this.index = th.index();
|
||||
}
|
||||
else if (direction !== 'asc' && direction !== 'desc')
|
||||
this.direction = this.direction === 'asc' ? 'desc' : 'asc';
|
||||
else
|
||||
this.direction = direction;
|
||||
|
||||
direction = this.direction == 'asc' ? 1 : -1;
|
||||
|
||||
self.$table.trigger('tablesort:start', [self]);
|
||||
self.log("Sorting by " + this.index + ' ' + this.direction);
|
||||
|
||||
// Try to force a browser redraw
|
||||
self.$table.css("display");
|
||||
// Run sorting asynchronously on a timeout to force browser redraw after
|
||||
// `tablesort:start` callback. Also avoids locking up the browser too much.
|
||||
setTimeout(function() {
|
||||
self.$sortCells.removeClass(self.settings.asc + ' ' + self.settings.desc);
|
||||
for (var i = 0, length = unsortedValues.length; i < length; i++)
|
||||
{
|
||||
sortedMap.push({
|
||||
index: i,
|
||||
cell: cells[i],
|
||||
row: rows[i],
|
||||
value: unsortedValues[i]
|
||||
});
|
||||
}
|
||||
|
||||
sortedMap.sort(function(a, b) {
|
||||
return self.settings.compare(a.value, b.value) * direction;
|
||||
});
|
||||
|
||||
$.each(sortedMap, function(i, entry) {
|
||||
rowsContainer.append(entry.row);
|
||||
});
|
||||
|
||||
th.addClass(self.settings[self.direction]);
|
||||
|
||||
self.log('Sort finished in ' + ((new Date()).getTime() - start.getTime()) + 'ms');
|
||||
self.$table.trigger('tablesort:complete', [self]);
|
||||
//Try to force a browser redraw
|
||||
self.$table.css("display");
|
||||
}, unsortedValues.length > 2000 ? 200 : 10);
|
||||
},
|
||||
|
||||
log: function(msg) {
|
||||
if(($.tablesort.DEBUG || this.settings.debug) && console && console.log) {
|
||||
console.log('[tablesort] ' + msg);
|
||||
}
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
this.$sortCells.off('click.tablesort');
|
||||
this.$table.data('tablesort', null);
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$.tablesort.DEBUG = false;
|
||||
|
||||
$.tablesort.defaults = {
|
||||
debug: $.tablesort.DEBUG,
|
||||
asc: 'sorted ascending',
|
||||
desc: 'sorted descending',
|
||||
compare: function(a, b) {
|
||||
if (a > b) {
|
||||
return 1;
|
||||
} else if (a < b) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.tablesort = function(settings) {
|
||||
var table, sortable, previous;
|
||||
return this.each(function() {
|
||||
table = $(this);
|
||||
previous = table.data('tablesort');
|
||||
if(previous) {
|
||||
previous.destroy();
|
||||
}
|
||||
table.data('tablesort', new $.tablesort(table, settings));
|
||||
});
|
||||
};
|
||||
|
||||
})(window.Zepto || window.jQuery);
|
||||
在新工单中引用
屏蔽一个用户