init commit
BIN
public/ZeroClipboard.swf
Normal file
BIN
public/favicon.ico
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/images/ErrorBack.jpg
Normal file
|
After Width: | Height: | Size: 188 KiB |
BIN
public/images/header-profile.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
public/images/s1.jpg
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
public/images/s2.jpg
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
public/images/s3.jpg
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
public/images/zhr.jpg
Normal file
|
After Width: | Height: | Size: 52 KiB |
9
public/images/全部分类.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg style="width:308px;height:308px;" version="1.1" id="图形" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve">
|
||||
<path class="svgpath" data-index="path_0" fill="#ea8010" d="M301.919842 115.317399 122.285602 115.317399l0 179.63424c0 0 0 179.63424 179.63424 179.63424l179.63424 0L481.554082 294.951639C481.554082 115.317399 301.919842 115.317399 301.919842 115.317399L301.919842 115.317399zM421.674297 414.706093" />
|
||||
<path class="svgpath" data-index="path_1" fill="#ea8010" d="M721.068108 115.317399c0 0-179.63424 0-179.63424 179.63424l0 179.63424 179.63424 0c179.63424 0 179.63424-179.63424 179.63424-179.63424L900.702348 115.317399 721.068108 115.317399 721.068108 115.317399zM840.822562 294.951639" />
|
||||
<path class="svgpath" data-index="path_2" fill="#ea8010" d="M721.068108 534.464641 541.433868 534.464641l0 179.63424c0 179.63424 179.63424 179.63424 179.63424 179.63424l179.63424 0L900.702348 714.098881C900.701325 714.098881 900.701325 534.464641 721.068108 534.464641L721.068108 534.464641z" />
|
||||
<path class="svgpath" data-index="path_3" fill="#ea8010" d="M122.285602 714.098881l0 179.63424L301.919842 893.733121c0 0 179.63424 0 179.63424-179.63424L481.554082 534.464641 301.919842 534.464641C122.285602 534.464641 122.285602 714.098881 122.285602 714.098881L122.285602 714.098881zM421.674297 714.098881" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
9
public/images/未分类.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg style="width:308px;height:308px;" version="1.1" id="图形" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve">
|
||||
<path class="svgpath" data-index="path_0" fill="#ea8010" d="M301.919842 115.317399 122.285602 115.317399l0 179.63424c0 0 0 179.63424 179.63424 179.63424l179.63424 0L481.554082 294.951639C481.554082 115.317399 301.919842 115.317399 301.919842 115.317399L301.919842 115.317399zM421.674297 414.706093 301.919842 414.706093c-109.37813 0-119.319549-92.009554-119.754454-119.755478L182.165388 175.196161 301.919842 175.196161c19.998473 0 119.754454 5.78782 119.754454 119.754454L421.674297 414.706093 421.674297 414.706093zM421.674297 414.706093" />
|
||||
<path class="svgpath" data-index="path_1" fill="#ea8010" d="M721.068108 115.317399c0 0-179.63424 0-179.63424 179.63424l0 179.63424 179.63424 0c179.63424 0 179.63424-179.63424 179.63424-179.63424L900.702348 115.317399 721.068108 115.317399 721.068108 115.317399zM840.822562 294.951639c0 19.998473-5.78782 119.755478-119.754454 119.755478L601.308537 414.707117 601.308537 294.951639c0-109.377106 92.009554-119.318526 119.758548-119.754454l119.754454 0L840.821539 294.951639 840.822562 294.951639zM840.822562 294.951639" />
|
||||
<path class="svgpath" data-index="path_2" fill="#ea8010" d="M721.068108 534.464641 541.433868 534.464641l0 179.63424c0 179.63424 179.63424 179.63424 179.63424 179.63424l179.63424 0L900.702348 714.098881C900.701325 714.098881 900.701325 534.464641 721.068108 534.464641L721.068108 534.464641zM840.822562 833.854359 721.068108 833.854359c-19.998473 0-119.758548-5.78782-119.758548-119.754454L601.30956 594.340333l119.758548 0c109.374036 0 119.315456 92.009554 119.754454 119.758548L840.822562 833.854359 840.822562 833.854359zM840.822562 833.854359" />
|
||||
<path class="svgpath" data-index="path_3" fill="#ea8010" d="M122.285602 714.098881l0 179.63424L301.919842 893.733121c0 0 179.63424 0 179.63424-179.63424L481.554082 534.464641 301.919842 534.464641C122.285602 534.464641 122.285602 714.098881 122.285602 714.098881L122.285602 714.098881zM421.674297 714.098881c0 109.374036-92.010577 119.315456-119.754454 119.754454L182.165388 833.853335 182.165388 714.098881c0-19.998473 5.78782-119.758548 119.754454-119.758548l119.754454 0L421.674297 714.098881 421.674297 714.098881zM421.674297 714.098881" />
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
15
public/javascripts/about.js
Normal file
@@ -0,0 +1,15 @@
|
||||
$(function () {
|
||||
$(".my-nav-pills li:contains('关于')").addClass("active").siblings().removeClass("active");
|
||||
|
||||
$("#job-title").cycleText();
|
||||
|
||||
$(".fa-qrcode").mouseenter(function () {
|
||||
$(".profile-img").hide();
|
||||
$(".wechat-img").show();
|
||||
});
|
||||
|
||||
$(".fa-qrcode").mouseleave(function () {
|
||||
$(".wechat-img").hide();
|
||||
$(".profile-img").show();
|
||||
});
|
||||
});
|
||||
36
public/javascripts/aboutmanage.js
Normal file
@@ -0,0 +1,36 @@
|
||||
$(function () {
|
||||
$("#side-menu>li:eq(5)").addClass("active");
|
||||
|
||||
$(".fileupload").fileupload({
|
||||
url: "/admin/uploadimg",
|
||||
dataType: "json",
|
||||
done: function (e, data) {
|
||||
$(this).prev("img").attr("src", data.result.files[0].url);
|
||||
$(this).next(":hidden").val('/images/' + data.result.files[0].name);
|
||||
}
|
||||
});
|
||||
|
||||
$('#btnSave').on('click', function () {
|
||||
$.ajax({
|
||||
url: $('#formAbout')[0].action,
|
||||
type: $('#formAbout')[0].method,
|
||||
data: $('#formAbout').serialize(),
|
||||
success: function () {
|
||||
swal({
|
||||
title: "保存成功!",
|
||||
type: "success",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
},
|
||||
error: function () {
|
||||
swal({
|
||||
title: "保存失败!",
|
||||
type: "error",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
75
public/javascripts/account.js
Normal file
@@ -0,0 +1,75 @@
|
||||
$(function () {
|
||||
$.supersized({
|
||||
slide_interval: 3000, // Length between transitions
|
||||
transition: 1, // 0-None, 1-Fade, 2-Slide Top, 3-Slide Right, 4-Slide Bottom, 5-Slide Left, 6-Carousel Right, 7-Carousel Left
|
||||
transition_speed: 3000, // Speed of transition
|
||||
performance: 1, // 0-Normal, 1-Hybrid speed/quality, 2-Optimizes image quality, 3-Optimizes transition speed // (Only works for Firefox/IE, not Webkit)
|
||||
// Size & Position
|
||||
min_width: 0, // Min width allowed (in pixels)
|
||||
min_height: 0, // Min height allowed (in pixels)
|
||||
vertical_center: 1, // Vertically center background
|
||||
horizontal_center: 1, // Horizontally center background
|
||||
fit_always: 0, // Image will never exceed browser width or height (Ignores min. dimensions)
|
||||
fit_portrait: 1, // Portrait images will not exceed browser height
|
||||
fit_landscape: 0, // Landscape images will not exceed browser width
|
||||
// Components
|
||||
slide_links: 'blank', // Individual links for each slide (Options: false, 'num', 'name', 'blank')
|
||||
thumbnail_navigation: 0, // Thumbnail navigation
|
||||
slides: [ // Slideshow Images
|
||||
{image: "/images/s1.jpg"},
|
||||
{image: "/images/s2.jpg"},
|
||||
{image: "/images/s3.jpg"}
|
||||
],
|
||||
progress_bar: 1 // Timer for each slide
|
||||
});
|
||||
|
||||
$("#txtUserName").focus();
|
||||
|
||||
$("#btnLogin").on("click", function () {
|
||||
verify();
|
||||
});
|
||||
|
||||
$(document).on({
|
||||
keypress: function (e) {
|
||||
if (e.which === 13 || e.which === 10) {
|
||||
verify();
|
||||
}
|
||||
}
|
||||
}, "#txtUserName, #txtPwd");
|
||||
});
|
||||
|
||||
function verify() {
|
||||
var userName = $("#txtUserName").val();
|
||||
var password = $("#txtPwd").val();
|
||||
if (!userName) {
|
||||
$("#txtUserName").focus();
|
||||
return;
|
||||
}
|
||||
if (!password) {
|
||||
$("#txtPwd").focus();
|
||||
return;
|
||||
}
|
||||
password = md5(password);
|
||||
var $btn = $("#btnLogin");
|
||||
$btn.find("i").removeClass("fa-sign-in").addClass("fa-circle-o-notch fa-spin");
|
||||
$btn.attr("disabled", "disabled");
|
||||
$.ajax({
|
||||
url: "/login",
|
||||
type: "Post",
|
||||
data: {UserName: userName, Password: password},
|
||||
success: function (data) {
|
||||
if (data.valid === true) {
|
||||
window.location.href = data.returnTo;
|
||||
} else {
|
||||
swal({
|
||||
title: data.message,
|
||||
type: "error",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
$btn.find("i").removeClass("fa-circle-o-notch fa-spin").addClass("fa-sign-in");
|
||||
$btn.removeAttr("disabled");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
140
public/javascripts/admin.js
Normal file
@@ -0,0 +1,140 @@
|
||||
// Custom scripts
|
||||
$(document).ready(function () {
|
||||
|
||||
// MetsiMenu
|
||||
$('#side-menu').metisMenu();
|
||||
|
||||
// Collapse ibox function
|
||||
$('.collapse-link').click(function () {
|
||||
var ibox = $(this).closest('div.ibox');
|
||||
var button = $(this).find('i');
|
||||
var content = ibox.find('div.ibox-content');
|
||||
content.slideToggle(200);
|
||||
button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');
|
||||
ibox.toggleClass('').toggleClass('border-bottom');
|
||||
setTimeout(function () {
|
||||
ibox.resize();
|
||||
ibox.find('[id^=map-]').resize();
|
||||
}, 50);
|
||||
});
|
||||
|
||||
// Close ibox function
|
||||
$('.close-link').click(function () {
|
||||
var content = $(this).closest('div.ibox');
|
||||
content.remove();
|
||||
});
|
||||
|
||||
// Small todo handler
|
||||
$('.check-link').click(function () {
|
||||
var button = $(this).find('i');
|
||||
var label = $(this).next('span');
|
||||
button.toggleClass('fa-check-square').toggleClass('fa-square-o');
|
||||
label.toggleClass('todo-completed');
|
||||
return false;
|
||||
});
|
||||
|
||||
// Append config box / Only for demo purpose
|
||||
//$.get("skin-config.html", function (data) {
|
||||
// $('body').append(data);
|
||||
//});
|
||||
|
||||
// minimalize menu
|
||||
$('.navbar-minimalize').click(function () {
|
||||
$("body").toggleClass("mini-navbar");
|
||||
SmoothlyMenu();
|
||||
})
|
||||
|
||||
// tooltips
|
||||
$('.tooltip-demo').tooltip({
|
||||
selector: "[data-toggle=tooltip]",
|
||||
container: "body"
|
||||
})
|
||||
|
||||
// Move modal to body
|
||||
// Fix Bootstrap backdrop issu with animation.css
|
||||
$('.modal').appendTo("body")
|
||||
|
||||
// Full height of sidebar
|
||||
function fix_height() {
|
||||
var heightWithoutNavbar = $("body > #wrapper").height() - 61;
|
||||
$(".sidebard-panel").css("min-height", heightWithoutNavbar + "px");
|
||||
}
|
||||
|
||||
fix_height();
|
||||
|
||||
// Fixed Sidebar
|
||||
// unComment this only whe you have a fixed-sidebar
|
||||
// $(window).bind("load", function() {
|
||||
// if($("body").hasClass('fixed-sidebar')) {
|
||||
// $('.sidebar-collapse').slimScroll({
|
||||
// height: 'auto',
|
||||
// railOpacity: 0.9,
|
||||
// });
|
||||
// }
|
||||
// })
|
||||
|
||||
$(window).bind("load resize click scroll", function () {
|
||||
if (!$("body").hasClass('body-small')) {
|
||||
fix_height();
|
||||
}
|
||||
})
|
||||
|
||||
$("[data-toggle=popover]")
|
||||
.popover();
|
||||
|
||||
var innerli = $('#side-menu a[href="' + window.location.pathname + '"]').parent();
|
||||
innerli.addClass("active");
|
||||
if (innerli.parent('ul.nav-second-level').length > 0) {
|
||||
innerli.parent('ul.nav-second-level').addClass('in').parent().addClass('active');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// For demo purpose - animation css script
|
||||
function animationHover(element, animation) {
|
||||
element = $(element);
|
||||
element.hover(
|
||||
function () {
|
||||
element.addClass('animated ' + animation);
|
||||
},
|
||||
function () {
|
||||
//wait for animation to finish before removing classes
|
||||
window.setTimeout(function () {
|
||||
element.removeClass('animated ' + animation);
|
||||
}, 2000);
|
||||
});
|
||||
};
|
||||
|
||||
// Minimalize menu when screen is less than 768px
|
||||
$(function () {
|
||||
$(window).bind("load resize", function () {
|
||||
if ($(this).width() < 769) {
|
||||
$('body').addClass('body-small')
|
||||
} else {
|
||||
$('body').removeClass('body-small')
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
function SmoothlyMenu() {
|
||||
if (!$('body').hasClass('mini-navbar') || $('body').hasClass('body-small')) {
|
||||
// Hide menu in order to smoothly turn on when maximize menu
|
||||
$('#side-menu').hide();
|
||||
// For smoothly turn on menu
|
||||
setTimeout(
|
||||
function () {
|
||||
$('#side-menu').fadeIn(500);
|
||||
}, 100);
|
||||
} else if ($('body').hasClass('fixed-sidebar')) {
|
||||
$('#side-menu').hide();
|
||||
setTimeout(
|
||||
function () {
|
||||
$('#side-menu').fadeIn(500);
|
||||
}, 300);
|
||||
} else {
|
||||
// Remove all inline style from jquery fadeIn function to reset menu state
|
||||
$('#side-menu').removeAttr('style');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
61
public/javascripts/article.js
Normal file
@@ -0,0 +1,61 @@
|
||||
$(function () {
|
||||
$(".my-nav-pills li:eq(0)").addClass("active").siblings().removeClass("active");
|
||||
|
||||
//如果目录默认为收起状态,则重新计算显示目录按钮的位置
|
||||
if (expandMenu === 'false') {
|
||||
$(".btn-menu").css("margin-left", $(".post-content").width() + 31 + "px");
|
||||
$(".btn-menu").show();
|
||||
}
|
||||
|
||||
//代码高亮
|
||||
var pres = $('#main-context pre');
|
||||
pres.each(function (i, pre) {
|
||||
$(pre).html($('<code></code>').html($(pre).html()))
|
||||
});
|
||||
hljs.initHighlightingOnLoad();
|
||||
|
||||
//将img套上a标签,以使用lightbox显示图片
|
||||
$("#main-context").find("img").wrap(function (i) {
|
||||
return "<a href=\"" + this.src + "\" data-lightbox=\"" + i + "\"></a>"
|
||||
});
|
||||
|
||||
//正常目录
|
||||
$("#main-context").scrollNav({
|
||||
sections: "h2", //一级目录的元素
|
||||
subSections: "h3", //二级目录的元素
|
||||
showHeadline: true,
|
||||
headlineText: "文章目录",
|
||||
showTopLink: false,
|
||||
scrollOffset: 70,
|
||||
arrowKeys: true,
|
||||
insertTarget: "#control-wrap",
|
||||
insertLocation: "prependTo"
|
||||
});
|
||||
|
||||
//收起目录
|
||||
$(".close-menu").on("click", function () {
|
||||
$("#control-wrap").hide();
|
||||
$(".post-content").removeClass("col-md-9").addClass("col-md-12");
|
||||
//CSS动画完成后再执行
|
||||
$(".post-content").on('transitionend webkitTransitionEnd oTransitionEnd', function () {
|
||||
$(".btn-menu").css("margin-left", $(".post-content").width() + 31 + "px");
|
||||
$(".btn-menu").show();
|
||||
});
|
||||
});
|
||||
|
||||
//显示目录
|
||||
$(".btn-menu").on("click", function () {
|
||||
$(".btn-menu").hide();
|
||||
$(".post-content").removeClass("col-md-12").addClass("col-md-9");
|
||||
//CSS动画完成后再执行
|
||||
$(".post-content").on('transitionend webkitTransitionEnd oTransitionEnd', function () {
|
||||
$(".btn-menu").hide(); //TODO:需隐藏2次,否则显示不正常,待研究~
|
||||
$("#control-wrap").show();
|
||||
});
|
||||
});
|
||||
|
||||
//改变窗口大小后,重置目录,以修正各标题的定位
|
||||
$(window).on("resize", function () {
|
||||
$.fn.scrollNav("resetPos");
|
||||
});
|
||||
});
|
||||
251
public/javascripts/articlemanage.js
Normal file
@@ -0,0 +1,251 @@
|
||||
var $table = $("#articles"),
|
||||
$remove = $("#remove"),
|
||||
selections = [];
|
||||
|
||||
$(function () {
|
||||
$("#side-menu>li:eq(2)").addClass("active").find("ul").addClass("in").find("li:eq(2)").addClass("active");
|
||||
|
||||
if (selections.length == 0) {
|
||||
$remove.attr("disabled", "disabled");
|
||||
}
|
||||
|
||||
$table.bootstrapTable({
|
||||
url: "/admin/getArticles",
|
||||
method: "post",
|
||||
pagination: true,
|
||||
paginationFirstText: "<i class=\"fa fa-angle-double-left\"></i>",
|
||||
paginationPreText: "<i class=\"fa fa-angle-left\"></i>",
|
||||
paginationNextText: "<i class=\"fa fa-angle-right\"></i>",
|
||||
paginationLastText: "<i class=\"fa fa-angle-double-right\"></i>",
|
||||
queryParamsType: "pageIndex",
|
||||
sidePagination: "server",
|
||||
pageList: [10, 25, 50, 100, "All"],
|
||||
search: true,
|
||||
sortName: "CreateTime",
|
||||
sortOrder: "desc",
|
||||
toolbar: "#toolbar",
|
||||
showRefresh: true,
|
||||
showColumns: true,
|
||||
iconsPrefix: "fa",
|
||||
icons: {
|
||||
refresh: "fa-refresh",
|
||||
columns: "fa-th-list"
|
||||
},
|
||||
idField: "UniqueId",
|
||||
filterControl: true,
|
||||
responseHandler: responseHandler,
|
||||
columns: [{
|
||||
field: "state",
|
||||
checkbox: true,
|
||||
align: "center",
|
||||
valign: "middle"
|
||||
}, {
|
||||
field: "CateName",
|
||||
title: "分类",
|
||||
halign: "center",
|
||||
valign: "middle",
|
||||
width: "140px",
|
||||
filterControl: "select",
|
||||
filterData: "url:/admin/getCateFilter",
|
||||
formatter: function (value, row) {
|
||||
if (row.CategoryAlias) {
|
||||
return "<a href=\"/blog/" + row.CategoryAlias + "\" target=\"_blank\">" + value + "</a>";
|
||||
}
|
||||
}
|
||||
}, {
|
||||
field: "UniqueId",
|
||||
title: "ID",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
width: "180px",
|
||||
filterControl: "input",
|
||||
visible: false
|
||||
}, {
|
||||
field: "Title",
|
||||
title: "标题",
|
||||
halign: "center",
|
||||
valign: "middle",
|
||||
formatter: function (value, row) {
|
||||
var link = !row.IsActive ? '<span class="label label-danger" title="该文章已删除">已删除</span> ' : '';
|
||||
link += row.IsDraft ? '<span class="label label-primary" title="这是一篇草稿">草稿</span> ' : '';
|
||||
if (row.Source === '1') {
|
||||
link += "<a href=\"" + row.Url + "\" target=\"_blank\"><i class=\"fa fa-link\"></i> " + value + "</a>";
|
||||
} else {
|
||||
if (row.CategoryAlias) {
|
||||
link += "<a href=\"/blog/" + row.CategoryAlias + "/" + row.Alias + "\" target=\"_blank\">" + value + "</a>";
|
||||
}
|
||||
}
|
||||
return link;
|
||||
},
|
||||
filterControl: "input"
|
||||
}, {
|
||||
field: "CreateTime",
|
||||
title: "发布时间",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
width: "180px",
|
||||
sortable: true
|
||||
}, {
|
||||
field: "ModifyTime",
|
||||
title: "修改时间",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
width: "180px",
|
||||
sortable: true
|
||||
}, {
|
||||
field: "ViewCount",
|
||||
title: "浏览次数",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
width: "120px",
|
||||
sortable: true,
|
||||
formatter: function (value, row) {
|
||||
if (row.Source == 1) {
|
||||
return "-";
|
||||
} else {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}, {
|
||||
field: "operate",
|
||||
title: "操作",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
width: "120px",
|
||||
events: {
|
||||
"click .remove": function (e, value, row, index) {
|
||||
swal({
|
||||
title: "确定要删除该文章吗?",
|
||||
text: "文章标题:" + row.Title,
|
||||
html: true,
|
||||
type: "warning",
|
||||
allowOutsideClick: true,
|
||||
showCancelButton: true,
|
||||
cancelButtonText: "取消",
|
||||
confirmButtonColor: "#d9534f",
|
||||
confirmButtonText: "确认删除",
|
||||
closeOnConfirm: false
|
||||
},
|
||||
function () {
|
||||
$(".sweet-alert .confirm").text("提交中...");
|
||||
$(".sweet-alert .confirm").attr("disabled", "disabled");
|
||||
deleteArticle(row.UniqueId);
|
||||
});
|
||||
},
|
||||
"click .undo": function (e, value, row, index) {
|
||||
swal({
|
||||
title: "确定要恢复该文章吗?",
|
||||
text: "文章标题:" + row.Title,
|
||||
html: true,
|
||||
type: "warning",
|
||||
allowOutsideClick: true,
|
||||
showCancelButton: true,
|
||||
cancelButtonText: "取消",
|
||||
confirmButtonText: "确认恢复",
|
||||
closeOnConfirm: false
|
||||
},
|
||||
function () {
|
||||
$(".sweet-alert .confirm").text("提交中...");
|
||||
$(".sweet-alert .confirm").attr("disabled", "disabled");
|
||||
undoArticle(row.UniqueId);
|
||||
});
|
||||
}
|
||||
},
|
||||
formatter: function (value, row) {
|
||||
if (row.IsActive) {
|
||||
return "<a class=\"edit btn btn-white\" title=\"编辑\" href=\"/admin/editarticle/" + row.UniqueId + "\"><i class=\"fa fa-pencil\"></i></a> "
|
||||
+ "<button type=\"button\" class=\"remove btn btn-white\" title=\"删除\"><i class=\"fa fa-trash-o\"></i></button>";
|
||||
} else {
|
||||
return "<a class=\"edit btn btn-white\" title=\"编辑\" href=\"/admin/editarticle/" + row.UniqueId + "\"><i class=\"fa fa-pencil\"></i></a> "
|
||||
+ "<button type=\"button\" class=\"undo btn btn-white\" title=\"恢复\"><i class=\"fa fa-undo\"></i></button>";
|
||||
}
|
||||
}
|
||||
}]
|
||||
});
|
||||
|
||||
$table.on('check.bs.table check-all.bs.table ' +
|
||||
'uncheck.bs.table uncheck-all.bs.table', function (e, rows) {
|
||||
var ids = $.map(!$.isArray(rows) ? [rows] : rows, function (row) {
|
||||
if (row.IsActive) {
|
||||
return row.UniqueId;
|
||||
}
|
||||
}),
|
||||
func = $.inArray(e.type, ['check', 'check-all']) > -1 ? 'union' : 'difference';
|
||||
selections = _[func](selections, ids);
|
||||
var selectionLength = selections.length;
|
||||
if (selectionLength > 0) {
|
||||
$remove.find(".badge").html(selectionLength);
|
||||
$remove.find(".badge").show();
|
||||
} else {
|
||||
$remove.find(".badge").html("");
|
||||
$remove.find(".badge").hide();
|
||||
}
|
||||
$remove.prop('disabled', !selectionLength);
|
||||
});
|
||||
|
||||
$remove.click(function () {
|
||||
swal({
|
||||
title: "确定要删除这 " + selections.length + " 篇文章吗?",
|
||||
html: true,
|
||||
type: "warning",
|
||||
allowOutsideClick: true,
|
||||
showCancelButton: true,
|
||||
cancelButtonText: "取消",
|
||||
confirmButtonColor: "#d9534f",
|
||||
confirmButtonText: "确认删除",
|
||||
closeOnConfirm: false
|
||||
},
|
||||
function () {
|
||||
$(".sweet-alert .confirm").text("提交中...");
|
||||
$(".sweet-alert .confirm").attr("disabled", "disabled");
|
||||
deleteArticle(selections.join(","));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function deleteArticle(ids) {
|
||||
$remove.prop("disabled", true);
|
||||
$.ajax({
|
||||
url: "/admin/deleteArticles",
|
||||
type: "post",
|
||||
data: "ids=" + ids,
|
||||
complete: function () {
|
||||
selections = [];
|
||||
$table.bootstrapTable('selectPage', 1);
|
||||
$remove.find(".badge").html("");
|
||||
$remove.find(".badge").hide();
|
||||
$(".sweet-alert .confirm").removeAttr("disabled");
|
||||
swal({
|
||||
title: "删除成功!",
|
||||
type: "success",
|
||||
showConfirmButton: false,
|
||||
timer: 1000
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function undoArticle(id){
|
||||
$.ajax({
|
||||
url: "/admin/undoArticle",
|
||||
type: "post",
|
||||
data: "id=" + id,
|
||||
complete: function () {
|
||||
$table.bootstrapTable('selectPage', 1);
|
||||
$(".sweet-alert .confirm").removeAttr("disabled");
|
||||
swal({
|
||||
title: "恢复成功!",
|
||||
type: "success",
|
||||
showConfirmButton: false,
|
||||
timer: 1000
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function responseHandler(res) {
|
||||
$.each(res.rows, function (i, row) {
|
||||
row.state = $.inArray(row.UniqueId, selections) !== -1;
|
||||
});
|
||||
return res;
|
||||
}
|
||||
66
public/javascripts/cachemanage.js
Normal file
@@ -0,0 +1,66 @@
|
||||
$(function () {
|
||||
$("#side-menu>li:eq(6)").addClass("active");
|
||||
|
||||
$('#keyinput').on('changed.fu.combobox', function (evt, data) {
|
||||
if (data.value) {
|
||||
$('#cacheKey').val(data.value);
|
||||
}
|
||||
});
|
||||
|
||||
$("#btnQuery").on("click", function () {
|
||||
var key = $("#cacheKey").val();
|
||||
if (key) {
|
||||
$.ajax({
|
||||
url: "/admin/getcache",
|
||||
type: "Post",
|
||||
data: {
|
||||
key: key
|
||||
},
|
||||
success: function (data) {
|
||||
var json = data ? JSON.stringify(data, null, 2) : '';
|
||||
$("#cacheContent").html(json);
|
||||
$("#cacheContent").focus();
|
||||
},
|
||||
error: function () {
|
||||
swal({
|
||||
title: "获取失败!",
|
||||
type: "error",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$("#btnClear").on("click", function () {
|
||||
var key = $("#cacheKey").val();
|
||||
if (key) {
|
||||
$.ajax({
|
||||
url: "/admin/clearcache",
|
||||
type: "Post",
|
||||
data: {
|
||||
key: key
|
||||
},
|
||||
success: function () {
|
||||
swal({
|
||||
title: "成功清除!",
|
||||
type: "success",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
$("#cacheContent").html("");
|
||||
$("#cacheContent").focus();
|
||||
},
|
||||
error: function () {
|
||||
swal({
|
||||
title: "清除失败!",
|
||||
type: "error",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
378
public/javascripts/category.js
Normal file
@@ -0,0 +1,378 @@
|
||||
var home_loading_timeout = 2000;
|
||||
var isLoading = false;
|
||||
var timeout = 1000;
|
||||
var contentTimeout = 1500;
|
||||
var begin = new Date();
|
||||
var contentBegin = new Date();
|
||||
var pageCount;
|
||||
var tooltip_timeout = 1500;
|
||||
$(function () {
|
||||
$(".my-nav-pills li:eq(0)").addClass("active").siblings().removeClass("active");
|
||||
$("#load-list").show();
|
||||
$("#PageIndex").val(1);
|
||||
requestData();
|
||||
|
||||
$(".category-list").mCustomScrollbar({
|
||||
axis: "y",
|
||||
theme: "dark-3"
|
||||
});
|
||||
|
||||
$(window).scroll(function () {
|
||||
$("[data-toggle='tooltip']").tooltip("hide");
|
||||
});
|
||||
|
||||
$("[data-toggle='tooltip']").tooltip({
|
||||
container: "body"
|
||||
});
|
||||
|
||||
$(document).on({
|
||||
click: function () {
|
||||
$(this).remove();
|
||||
begin = new Date();
|
||||
$("#load-list").show();
|
||||
isLoading = true;
|
||||
$("#PageIndex").val(parseInt($("#PageIndex").val()) + 1);
|
||||
requestData();
|
||||
}
|
||||
}, "#btn-load");
|
||||
|
||||
$(document).on({
|
||||
click: function () {
|
||||
var index = $(this).attr("page");
|
||||
var pageItem = $("#page" + index);
|
||||
$("html,body").animate({scrollTop: $(pageItem).offset().top - 90}, 1000);
|
||||
}
|
||||
}, "#page-nav a");
|
||||
|
||||
$(document).on({
|
||||
click: function () {
|
||||
$(".bd_weixin_popup").hide();
|
||||
$(".bd_weixin_popup_bg").hide();
|
||||
$(".post-cover").fadeIn();
|
||||
$("body").addClass("modal-open");
|
||||
var title = $(this).siblings("h4").children("a").html();
|
||||
var uid = $(this).parent().attr("uid");
|
||||
$(".post-modal .modal-header h4").html(title);
|
||||
$("#btnFullMode").attr("href", "/" + uid);
|
||||
$(".sk-cube-grid").show();
|
||||
$(".post-content div").hide();
|
||||
var comments = $(this).parent().find(".cy_cmt_count").text();
|
||||
$("#modal-comments").text(comments);
|
||||
$(".post-modal").css("right", 0);
|
||||
contentBegin = new Date();
|
||||
$.ajax({
|
||||
url: "/blog/getPreviewContent",
|
||||
type: "Post",
|
||||
data: {alias: uid},
|
||||
success: function (data) {
|
||||
var end = new Date();
|
||||
if (end - contentBegin > contentTimeout) {
|
||||
appendContent(data);
|
||||
} else {
|
||||
var timespan = contentTimeout - (end - contentBegin);
|
||||
setTimeout(function () {
|
||||
appendContent(data);
|
||||
}, timespan);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}, ".preview-link");
|
||||
|
||||
$(".post-modal .modal-body").mCustomScrollbar({
|
||||
theme: "dark-3",
|
||||
scrollButtons: {
|
||||
enable: true
|
||||
}
|
||||
});
|
||||
|
||||
$(".post-cover").on("click", function () {
|
||||
closeModal();
|
||||
});
|
||||
|
||||
$("#btnCloseModal").on("click", function () {
|
||||
closeModal();
|
||||
});
|
||||
|
||||
$("#btnFullMode").on("click", function () {
|
||||
setTimeout(closeModal, 800);
|
||||
});
|
||||
|
||||
$(".list-top-left a").on("click", function () {
|
||||
if (!$(this).hasClass("current")) {
|
||||
$(this).addClass("current").siblings().removeClass("current");
|
||||
$(".list-wrap ol").html("");
|
||||
$("[data-toggle='tooltip']").tooltip("hide");
|
||||
$("#page-nav").html("");
|
||||
$("#btn-load").remove();
|
||||
$("#no-more").remove();
|
||||
begin = new Date();
|
||||
$("#load-list").show();
|
||||
$("#SortBy").val($(this).attr("sort"));
|
||||
$("#PageIndex").val(1);
|
||||
requestData();
|
||||
}
|
||||
});
|
||||
|
||||
$("#Keyword").on("keypress", function (e) {
|
||||
if (e.which == 13 || e.which == 10) {
|
||||
searchPost();
|
||||
}
|
||||
});
|
||||
|
||||
$("#btnFilter").on("click", function () {
|
||||
searchPost();
|
||||
});
|
||||
|
||||
$(".selectlist").on("changed.fu.selectlist", function (e, data) {
|
||||
$(this).find("li").removeClass("active");
|
||||
$(this).find("li[data-value=" + data.value + "]").addClass("active");
|
||||
});
|
||||
});
|
||||
|
||||
function requestData() {
|
||||
$.ajax({
|
||||
url: $('#filterForm')[0].action,
|
||||
type: $('#filterForm')[0].method,
|
||||
data: $('#filterForm').serialize(),
|
||||
success: function (result) {
|
||||
var end = new Date();
|
||||
var data = result.posts;
|
||||
pageCount = result.pageCount;
|
||||
if (end - begin > timeout) {
|
||||
addPage($("#PageIndex").val(), data);
|
||||
} else {
|
||||
var timespan = timeout - (end - begin);
|
||||
setTimeout(function () {
|
||||
addPage($("#PageIndex").val(), data);
|
||||
}, timespan);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function appendContent(data) {
|
||||
$(".sk-cube-grid").hide();
|
||||
$(".post-content div").html(data.Content);
|
||||
|
||||
var labels = JSON.parse(data.Labels);
|
||||
$.each(labels, function (key, value) {
|
||||
$("#label-foot").append("<span title=\"" + value.text + "\" class=\"post-label\">" + value.text + "</span>");
|
||||
});
|
||||
$(".post-modal .modal-body").mCustomScrollbar("scrollTo", "top", {
|
||||
scrollInertia: 0
|
||||
});
|
||||
$(".post-content div").fadeIn();
|
||||
}
|
||||
|
||||
function closeModal() {
|
||||
$(".post-modal").css("right", "-1200px");
|
||||
$(".post-cover").fadeOut();
|
||||
$("body").removeClass("modal-open");
|
||||
resetModal();
|
||||
}
|
||||
|
||||
function resetModal() {
|
||||
$(".post-modal .modal-header h4").empty();
|
||||
$(".post-content div").empty();
|
||||
$("#label-foot").empty();
|
||||
}
|
||||
|
||||
function searchPost() {
|
||||
$(".list-wrap ol").html("");
|
||||
$("[data-toggle='tooltip']").tooltip("hide");
|
||||
$("#page-nav").html("");
|
||||
$("#btn-load").remove();
|
||||
$("#no-more").remove();
|
||||
begin = new Date();
|
||||
$("#load-list").show();
|
||||
$("#PageIndex").val(1);
|
||||
requestData();
|
||||
}
|
||||
|
||||
function addPage(index, data) {
|
||||
$("#load-list").hide();
|
||||
if (data.length > 0) {
|
||||
$(".list-wrap ol").append("<li id=\"page" + index + "\"></li>");
|
||||
$.each(data, function (key, value) {
|
||||
var itemHtml;
|
||||
if (value.Source == "1") {
|
||||
itemHtml = "<div uid=\""
|
||||
+ value.Alias
|
||||
+ "\" class=\"blog-item " + ($(".home-loading").length > 0 ? "" : "animated fadeIn") + "\">"
|
||||
+ " <h4>"
|
||||
+ " <a title=\""
|
||||
+ value.Title
|
||||
+ "\" target=\"_blank\" href=\""
|
||||
+ value.Url
|
||||
+ "\">"
|
||||
+ "<i class=\"fa fa-link\"></i> " + value.Title
|
||||
+ " <\/a>"
|
||||
+ " <\/h4>"
|
||||
+ " <span title=\"文章分类\">"
|
||||
+ " <i class=\"fa fa-tasks\">"
|
||||
+ " <\/i>"
|
||||
+ " "
|
||||
+ "<a href=\"/blog/category/" + value.CategoryAlias + "\" target=\"_blank\">" + value.CateName + "</a>"
|
||||
+ " <\/span>"
|
||||
+ " <span title=\"发布时间\" class=\"margin-left-20\">"
|
||||
+ " <i class=\"fa fa-clock-o\">"
|
||||
+ " <\/i>"
|
||||
+ " "
|
||||
+ value.PublishDate
|
||||
+ " <\/span>"
|
||||
+ " <a title=\""
|
||||
+ value.Host
|
||||
+ "\" target=\"_blank\" href=\""
|
||||
+ value.Url.substring(0, value.Url.indexOf("://") + 3) + value.Host
|
||||
+ "\" class=\"pull-right margin-left-20 hidden-xs\">"
|
||||
+ " "
|
||||
+ "<i class=\"fa fa-globe\"></i> " + value.Host
|
||||
+ " <\/a>"
|
||||
+ " <div class=\"clearfix\">"
|
||||
+ " <\/div>"
|
||||
+ " <p>"
|
||||
+ " "
|
||||
+ encodeHtml(value.Summary)
|
||||
+ " <\/p>"
|
||||
+ "<\/div>"
|
||||
+ "<div class=\"hr-line-dashed\"></div>";
|
||||
} else {
|
||||
itemHtml = "<div class=\"blog-item " + ($(".home-loading").length > 0 ? "" : "animated fadeIn") + "\" uid=\"" + value.Alias + "\"><a class=\"preview-link\"></a><h4><a href=\"/blog/" + value.CategoryAlias + "/" + value.Alias + "\" target=\"_blank\" title=\"" + value.Title + "\">" + value.Title + "</a></h4><span title=\"文章分类\"><i class=\"fa fa-tasks\"></i> " + "<a href=\"/blog/" + value.CategoryAlias + "\" target=\"_blank\">" + value.CateName + "</a>" + "</span> <span class=\"margin-left-20\" title=\"发布时间\"><i class=\"fa fa-clock-o\"></i> " + value.PublishDate + "</span><span class=\"pull-right margin-left-20 hidden-xs\" title=\"评论人数\"><i class=\"fa fa-comments-o\"></i> <span id = \"sourceId::" + value.UniqueId + "\" class = \"cy_cmt_count\" ></span></span><span class=\"pull-right hidden-xs\" title=\"浏览次数\"><i class=\"fa fa-eye\"></i> " + value.ViewCount + "</span><div class=\"clearfix\"></div><p>" + encodeHtml(value.Summary) + "</p></div><div class=\"hr-line-dashed\"></div>";
|
||||
}
|
||||
$("#page" + index).append(itemHtml);
|
||||
});
|
||||
$("body").append("<script id=\"cy_cmt_num\" src=\"http://changyan.sohu.com/upload/plugins/plugins.list.count.js?clientId=cyrUoGjWj\"><\/script>");
|
||||
var item = $("<li><a href=\"javascript:void(0)\" page=\"" + index + "\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"第" + index + "页\"></a></li>");
|
||||
item.appendTo($("#page-nav"));
|
||||
var percent = 100 / index;
|
||||
$("#page-nav li").css("height", percent + "%");
|
||||
$("[data-toggle='tooltip']:visible").tooltip({
|
||||
container: "body"
|
||||
});
|
||||
item.find("a").tooltip("show");
|
||||
setTimeout(function () {
|
||||
item.find("a").tooltip("hide");
|
||||
}, tooltip_timeout);
|
||||
if ($("#PageIndex").val() == pageCount) {
|
||||
if (pageCount != 1) {
|
||||
$(".list-wrap").append("<div id=\"no-more\" class=\"text-muted text-center\">没有更多数据<\/div>");
|
||||
}
|
||||
} else {
|
||||
$(".list-wrap").append("<button id=\"btn-load\" class=\"btn btn-white btn-block\">下一页</button>");
|
||||
}
|
||||
} else {
|
||||
$(".list-wrap ol").append("<li id=\"page" + index + "\"></li>");
|
||||
$("#page" + index).append("<div class=\"text-center text-muted\">暂无数据</div>");
|
||||
}
|
||||
isLoading = false;
|
||||
if ($(".home-loading").length > 0) {
|
||||
var home_loading_end = new Date();
|
||||
$("[data-toggle='tooltip']").tooltip("hide");
|
||||
if (home_loading_end - home_loading_begin > home_loading_timeout) {
|
||||
$(".home-loading").remove();
|
||||
document.body.style.overflow = "auto";
|
||||
} else {
|
||||
var home_loading_timespan = home_loading_timeout - (home_loading_end - home_loading_begin);
|
||||
setTimeout(function () {
|
||||
$(".home-loading").remove();
|
||||
document.body.style.overflow = "auto";
|
||||
}, home_loading_timespan);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function encodeHtml(s) {
|
||||
return (typeof s != "string") ? s :
|
||||
s.replace(/"|&|'|<|>|[\x00-\x20]|[\x7F-\xFF]|[\u0100-\u2700]/g,
|
||||
function ($0) {
|
||||
var c = $0.charCodeAt(0), r = ["&#"];
|
||||
c = (c == 0x20) ? 0xA0 : c;
|
||||
r.push(c);
|
||||
r.push(";");
|
||||
return r.join("");
|
||||
});
|
||||
};
|
||||
|
||||
//Fixed Tool
|
||||
$(function () {
|
||||
$(window).scroll(function () {
|
||||
var scrollTop = $(window).scrollTop();
|
||||
if (scrollTop > 0) {
|
||||
$("#scrollTop").show();
|
||||
$(".qrcontain").css("top", "-57px");
|
||||
$(".qrcontain .arrow").css("top", "52%");
|
||||
} else {
|
||||
$("#scrollTop").hide();
|
||||
$(".qrcontain").css("top", "-107px");
|
||||
$(".qrcontain .arrow").css("top", "86%");
|
||||
}
|
||||
});
|
||||
|
||||
$("#qrBtn").on("click", function () {
|
||||
if ($("#ss_toggle").hasClass("close")) {
|
||||
$("#share-menu").css("transition", "none");
|
||||
$("#ss_toggle").click();
|
||||
}
|
||||
if ($(".qrcontain").is(":hidden")) {
|
||||
$(".qrcontain").removeClass("fadeOutLeft").addClass("fadeInLeft");
|
||||
$(".qrcontain").show();
|
||||
$("#qrBtn").addClass("opened");
|
||||
} else {
|
||||
$(".qrcontain").removeClass("fadeInLeft").addClass("fadeOutLeft");
|
||||
$(".qrcontain").one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend", function () {
|
||||
$(".qrcontain").hide();
|
||||
});
|
||||
$("#qrBtn").removeClass("opened");
|
||||
}
|
||||
$("#share-menu").css("transition", "all 1s ease 0s");
|
||||
});
|
||||
|
||||
$("#scrollTop a").on("click", function () {
|
||||
$("html,body").animate({scrollTop: 0}, 1000);
|
||||
});
|
||||
|
||||
var toggle = $('#ss_toggle');
|
||||
var menu = $('#share-menu');
|
||||
var rot;
|
||||
$('#ss_toggle').on('click', function (ev) {
|
||||
if (!$(".qrcontain").is(":hidden")) {
|
||||
$(".qrcontain").hide();
|
||||
$("#qrBtn").removeClass("opened");
|
||||
}
|
||||
rot = parseInt($(this).data('rot')) - 180;
|
||||
if (rot / 180 % 2 == 0) {
|
||||
menu.css('transform', 'rotate(' + rot + 'deg)');
|
||||
menu.css('webkitTransform', 'rotate(' + rot + 'deg)');
|
||||
toggle.parent().addClass('ss_active');
|
||||
toggle.addClass('close');
|
||||
} else {
|
||||
menu.css('transform', 'rotate(' + parseInt(rot - 30) + 'deg)');
|
||||
menu.css('webkitTransform', 'rotate(' + parseInt(rot - 30) + 'deg)');
|
||||
toggle.parent().removeClass('ss_active');
|
||||
toggle.removeClass('close');
|
||||
}
|
||||
$(this).data('rot', rot);
|
||||
});
|
||||
menu.on('transitionend webkitTransitionEnd oTransitionEnd', function () {
|
||||
if (rot / 180 % 2 == 0) {
|
||||
$("#share-menu i.fa").addClass('bounce');
|
||||
} else {
|
||||
$("#share-menu i.fa").removeClass('bounce');
|
||||
}
|
||||
});
|
||||
|
||||
var img = document.createElement("img");
|
||||
img.src = logoPath;
|
||||
img.onload = function () {
|
||||
$("#qrcode").qrcode({
|
||||
text: window.location.href,
|
||||
size: "100",
|
||||
ecLevel: 'H',
|
||||
minVersion: 4,
|
||||
mode: 4,
|
||||
image: img,
|
||||
mSize: 0.3
|
||||
});
|
||||
}
|
||||
});
|
||||
245
public/javascripts/categorymanage.js
Normal file
@@ -0,0 +1,245 @@
|
||||
$(function () {
|
||||
getData();
|
||||
|
||||
var adjustment;
|
||||
var group = $("#cate-list").sortable({
|
||||
group: 'cate-list',
|
||||
handle: 'i.fa-arrows',
|
||||
pullPlaceholder: false,
|
||||
onDrop: function ($item, container, _super) {
|
||||
var $clonedItem = $('<li/>').css({height: 0});
|
||||
$item.before($clonedItem);
|
||||
$clonedItem.animate({'height': $item.height()});
|
||||
|
||||
$item.animate($clonedItem.position(), function () {
|
||||
$clonedItem.detach();
|
||||
_super($item, container);
|
||||
});
|
||||
},
|
||||
onDragStart: function ($item, container, _super) {
|
||||
var offset = $item.offset(),
|
||||
pointer = container.rootGroup.pointer;
|
||||
|
||||
adjustment = {
|
||||
left: pointer.left - offset.left,
|
||||
top: pointer.top - offset.top
|
||||
};
|
||||
|
||||
_super($item, container);
|
||||
},
|
||||
onDrag: function ($item, position) {
|
||||
$item.css({
|
||||
left: position.left - adjustment.left,
|
||||
top: position.top - adjustment.top
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on({
|
||||
change: function () {
|
||||
var $input = $(this).parent().parent().next("input");
|
||||
if ($(this).prop("checked")) {
|
||||
$input.removeAttr("disabled");
|
||||
$(this).parents(".list-group-item").data("link", $input.val());
|
||||
} else {
|
||||
$input.attr("disabled", "disabled");
|
||||
$(this).parents(".list-group-item").data("link", "");
|
||||
}
|
||||
}
|
||||
}, "input:checkbox");
|
||||
|
||||
$(document).on({
|
||||
change: function (event) {
|
||||
var val = $(this).val();
|
||||
if ($(event.target).hasClass("txtName")) {
|
||||
$(this).parents(".list-group-item").data("catename", val);
|
||||
$(this).parents(".list-group-item").attr("data-catename", val);
|
||||
} else if ($(event.target).hasClass("txtAlias")) {
|
||||
$(this).parents(".list-group-item").data("alias", val);
|
||||
$(this).parents(".list-group-item").attr("data-alias", val);
|
||||
} else {
|
||||
$(this).parents(".list-group-item").data("link", val);
|
||||
$(this).parents(".list-group-item").attr("data-link", val);
|
||||
}
|
||||
}
|
||||
}, ".txtName, .txtAlias, .txtLink");
|
||||
|
||||
$(document).on({
|
||||
click: function () {
|
||||
$(this).parents(".list-group-item").slideUp("normal", function () {
|
||||
$(this).remove();
|
||||
});
|
||||
}
|
||||
}, ".btn-del-cate");
|
||||
|
||||
$(document).on({
|
||||
click: function () {
|
||||
var cate = $("<li class=\"list-group-item\" data-uniqueid=\"" + "" + "\" data-catename=\"" + "" + "\" data-alias=\"" + "" + "\" data-img=\"" + "" + "\" data-link=\"" + "" + "\">"
|
||||
+ "<div class=\"row\">"
|
||||
+ "<div class=\"col-md-2\">"
|
||||
+ "<i class=\"fa fa-arrows\"></i> "
|
||||
+ "<span class=\"fileinput-button\">"
|
||||
+ "<img src=\"" + "" + "\"/>"
|
||||
+ "<input type=\"file\" class=\"fileupload\" name=\"file\">"
|
||||
+ "</span>"
|
||||
+ "</div>"
|
||||
+ "<div class=\"col-md-2\">"
|
||||
+ "<input class=\"form-control txtName\" type=\"text\" value=\"" + "" + "\" placeholder=\"分类名称\"/>"
|
||||
+ "</div>"
|
||||
+ "<div class=\"col-md-2\">"
|
||||
+ "<input class=\"form-control txtAlias\" type=\"text\" value=\"" + "" + "\" placeholder=\"分类alias\"/>"
|
||||
+ "</div>"
|
||||
+ "<div class=\"col-md-5\">"
|
||||
+ "<div class=\"input-group cate-link\">"
|
||||
+ "<span class=\"input-group-addon\"><label>"
|
||||
+ "<input type=\"checkbox\"/> 链接"
|
||||
+ "</label></span>"
|
||||
+ "<input type=\"text\" class=\"form-control txtLink\" value=\"" + "" + "\" disabled=\"disabled\">"
|
||||
+ "</div>"
|
||||
+ "</div>"
|
||||
+ "<div class=\"col-md-1\">"
|
||||
+ "<button class=\"btn btn-link btn-del-cate\" title=\"移除分类\"><i class=\"fa fa-times\"></i></button>"
|
||||
+ "</div>"
|
||||
+ "</div>"
|
||||
+ "</li>");
|
||||
cate.appendTo($("#cate-list"));
|
||||
bindFileUpload();
|
||||
}
|
||||
}, "#btnNew");
|
||||
|
||||
$(document).on({
|
||||
click: function () {
|
||||
if (isValidData()) {
|
||||
var $this = $(this);
|
||||
$this.attr("disabled", "disabled");
|
||||
$this.find(".fa").removeClass("fa-cloud-upload").addClass("fa-circle-o-notch fa-spin");
|
||||
var gdata = group.sortable("serialize").get();
|
||||
var json = JSON.stringify(gdata);
|
||||
$.ajax({
|
||||
url: "/admin/saveCategories",
|
||||
type: "Post",
|
||||
data: {json: json},
|
||||
success: function () {
|
||||
swal({
|
||||
title: "保存成功!",
|
||||
type: "success",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
},
|
||||
error: function () {
|
||||
swal({
|
||||
title: "操作失败!",
|
||||
type: "error",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
},
|
||||
complete: function () {
|
||||
$this.removeAttr("disabled");
|
||||
$this.find(".fa").removeClass("fa-circle-o-notch fa-spin").addClass("fa-cloud-upload");
|
||||
getData();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}, "#btnSave");
|
||||
});
|
||||
|
||||
function getData() {
|
||||
$.ajax({
|
||||
url: "/admin/getCategories",
|
||||
type: "Post",
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
$("#cate-list").empty();
|
||||
$.each(data, function (key, value) {
|
||||
var cate = $("<li class=\"list-group-item\" data-uniqueid=\"" + value._id + "\" data-catename=\"" + value.CateName + "\" data-alias=\"" + value.Alias + "\" data-img=\"" + value.Img + "\" data-link=\"" + value.Link + "\">"
|
||||
+ "<div class=\"row\">"
|
||||
+ "<div class=\"col-md-2\">"
|
||||
+ "<i class=\"fa fa-arrows\"></i> "
|
||||
+ "<span class=\"fileinput-button\">"
|
||||
+ "<img src=\"" + value.Img + "\"/>"
|
||||
+ "<input type=\"file\" class=\"fileupload\" name=\"file\">"
|
||||
+ "</span>"
|
||||
+ "</div>"
|
||||
+ "<div class=\"col-md-2\">"
|
||||
+ "<input class=\"form-control txtName\" type=\"text\" value=\"" + value.CateName + "\" placeholder=\"分类名称\"/>"
|
||||
+ "</div>"
|
||||
+ "<div class=\"col-md-2\">"
|
||||
+ "<input class=\"form-control txtAlias\" type=\"text\" value=\"" + value.Alias + "\" placeholder=\"分类alias\"/>"
|
||||
+ "</div>"
|
||||
+ "<div class=\"col-md-5\">"
|
||||
+ "<div class=\"input-group cate-link\">"
|
||||
+ "<span class=\"input-group-addon\"><label>"
|
||||
+ "<input type=\"checkbox\" " + (value.Link != "" ? "checked=\"checked\"" : "") + "/> 链接"
|
||||
+ "</label></span>"
|
||||
+ "<input type=\"text\" class=\"form-control txtLink\" value=\"" + value.Link + "\" " + (value.Link == "" ? "disabled=\"disabled\"" : "") + ">"
|
||||
+ "</div>"
|
||||
+ "</div>"
|
||||
+ "<div class=\"col-md-1\">"
|
||||
+ "<button class=\"btn btn-link btn-del-cate\" title=\"移除分类\"><i class=\"fa fa-times\"></i></button>"
|
||||
+ "</div>"
|
||||
+ "</div>"
|
||||
+ "</li>");
|
||||
cate.appendTo($("#cate-list"));
|
||||
});
|
||||
},
|
||||
complete: function () {
|
||||
bindFileUpload();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function bindFileUpload() {
|
||||
$(".fileupload").fileupload({
|
||||
url: "/admin/uploadimg",
|
||||
dataType: "text",
|
||||
done: function (e, data) {
|
||||
$(this).prev().attr("src", '/images/' + data.files[0].name);
|
||||
$(this).parent().parent().parent().parent().data("img", '/images/' + data.files[0].name);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function isValidData() {
|
||||
var result = true;
|
||||
var items = $("#cate-list li");
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
var cateName = $(items[i]).data("catename");
|
||||
var cateAlias = $(items[i]).data("alias");
|
||||
if (cateName === "" || cateAlias === "") {
|
||||
swal({
|
||||
title: "分类名称、分类alias都不能为空!",
|
||||
type: "warning",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if ($("#cate-list li[data-catename='" + cateName + "']").length > 1) {
|
||||
swal({
|
||||
title: "分类名称 \"" + cateName + "\" 不唯一!",
|
||||
type: "warning",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if ($("#cate-list li[data-alias='" + cateAlias + "']").length > 1) {
|
||||
swal({
|
||||
title: "分类alias \"" + cateAlias + "\" 不唯一!",
|
||||
type: "warning",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
26
public/javascripts/dateFormat.js
Normal file
@@ -0,0 +1,26 @@
|
||||
Date.prototype.dateFormat = function (fmt) {
|
||||
return getDateStr(this, fmt);
|
||||
};
|
||||
|
||||
String.prototype.jsonDateFormat = function (fmt) {
|
||||
var date = new Date(parseInt(this.replace("/Date(", "").replace(")/", ""), 10));
|
||||
return getDateStr(date, fmt);
|
||||
};
|
||||
|
||||
function getDateStr(date, fmt) {
|
||||
var o = {
|
||||
"M+": date.getMonth() + 1, //月份
|
||||
"d+": date.getDate(), //日
|
||||
"H+": date.getHours(), //小时
|
||||
"m+": date.getMinutes(), //分
|
||||
"s+": date.getSeconds(), //秒
|
||||
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
|
||||
"S": date.getMilliseconds() //毫秒
|
||||
};
|
||||
if (/(y+)/.test(fmt))
|
||||
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
|
||||
for (var k in o)
|
||||
if (new RegExp("(" + k + ")").test(fmt))
|
||||
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
||||
return fmt;
|
||||
}
|
||||
248
public/javascripts/editarticle.js
Normal file
@@ -0,0 +1,248 @@
|
||||
$(function () {
|
||||
$("#side-menu>li:eq(2)").addClass("active").find("ul").addClass("in").find("li:eq(2)").addClass("active");
|
||||
|
||||
refreshCate();
|
||||
|
||||
if (source == "1") {
|
||||
$("#soruceLink").radio("check")
|
||||
} else {
|
||||
$("#soruceLocal").radio("check")
|
||||
}
|
||||
$("#myPillbox").pillbox("addItems", 0, JSON.parse($('#Labels').val()));
|
||||
|
||||
var editor = UE.getEditor("editor", {
|
||||
allowDivTransToP: false,
|
||||
initialFrameHeight: 300,
|
||||
textarea: "Content"
|
||||
});
|
||||
|
||||
editor.ready(function () {
|
||||
$("[data-toggle=tooltip]").tooltip({
|
||||
container: "body"
|
||||
});
|
||||
});
|
||||
|
||||
$(".btn-alias").on("click", function () {
|
||||
var appid,
|
||||
key,
|
||||
salt,
|
||||
query = $("#Title").val(),
|
||||
from,
|
||||
to,
|
||||
str1,
|
||||
sign;
|
||||
if (query) {
|
||||
var that = this;
|
||||
$(that).addClass("disabled");
|
||||
appid = '20151219000008011';
|
||||
key = translateKey;
|
||||
salt = (new Date).getTime();
|
||||
from = 'zh';
|
||||
to = 'en';
|
||||
str1 = appid + query + salt + key;
|
||||
sign = md5(str1);
|
||||
$.ajax({
|
||||
url: 'http://api.fanyi.baidu.com/api/trans/vip/translate',
|
||||
type: 'get',
|
||||
dataType: 'jsonp',
|
||||
data: {
|
||||
q: query,
|
||||
appid: appid,
|
||||
salt: salt,
|
||||
from: from,
|
||||
to: to,
|
||||
sign: sign
|
||||
},
|
||||
success: function (data) {
|
||||
var en = data.trans_result[0].dst;
|
||||
var result = en.trim().toLowerCase().split(' ').join('-');
|
||||
$("#Alias").val(result).focus();
|
||||
$('#postForm').formValidation('revalidateField', 'Alias');
|
||||
},
|
||||
complete: function () {
|
||||
$(that).removeClass("disabled");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$("#postForm").on('init.field.fv', function (e, data) {
|
||||
var $parent = data.element.parents('.form-group'),
|
||||
$icon = $parent.find('.form-control-feedback[data-fv-icon-for="' + data.field + '"]');
|
||||
$icon.on('click.clearing', function () {
|
||||
if ($icon.hasClass('fa-remove')) {
|
||||
data.fv.resetField(data.element);
|
||||
}
|
||||
});
|
||||
}).formValidation({
|
||||
framework: 'bootstrap',
|
||||
icon: {
|
||||
valid: 'fa fa-check',
|
||||
invalid: 'fa fa-remove',
|
||||
validating: 'fa fa-refresh'
|
||||
},
|
||||
err: {
|
||||
container: 'tooltip'
|
||||
},
|
||||
fields: {
|
||||
Title: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: '标题不能为空'
|
||||
}
|
||||
}
|
||||
},
|
||||
Alias: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'Alias不能为空'
|
||||
},
|
||||
remote: {
|
||||
url: '/admin/checkArticleAlias',
|
||||
type: 'POST',
|
||||
data: '{"uid":"' + $('#UniqueId').val() + '"}',
|
||||
delay: 1000,
|
||||
message: 'Alias不唯一'
|
||||
}
|
||||
}
|
||||
},
|
||||
Summary: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: '摘要不能为空'
|
||||
}
|
||||
}
|
||||
},
|
||||
Url: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'Url不能为空'
|
||||
},
|
||||
uri: {
|
||||
message: 'Url地址不正确'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.on('err.field.fv', function (e, data) {
|
||||
data.fv.disableSubmitButtons(false);
|
||||
})
|
||||
.on('success.field.fv', function (e, data) {
|
||||
data.fv.disableSubmitButtons(false);
|
||||
})
|
||||
.on('success.form.fv', function (e) {
|
||||
var isPublish = $('#btnPublish').length > 0;
|
||||
e.preventDefault();
|
||||
$("#Labels").val(JSON.stringify($("#myPillbox").pillbox("items")));
|
||||
$('#IsDraft').val('False');
|
||||
swal({
|
||||
title: isPublish ? '确定要发布该文章吗?' : '确定提交更新吗?',
|
||||
text: $("#CategoryId").val() === "other" ? "<span style='color:#d9534f;'>注意:当前选择的文章分类为\"未分类\"</span>" : null,
|
||||
html: true,
|
||||
type: "warning",
|
||||
allowOutsideClick: true,
|
||||
showCancelButton: true,
|
||||
cancelButtonText: "取消",
|
||||
confirmButtonColor: "#d9534f",
|
||||
confirmButtonText: isPublish ? '确定发布' : '确定提交',
|
||||
closeOnConfirm: false
|
||||
},
|
||||
function () {
|
||||
$(".sweet-alert .confirm").text(isPublish ? '发布中...' : '提交中...');
|
||||
$(".sweet-alert .confirm").attr("disabled", "disabled");
|
||||
$.ajax({
|
||||
url: $("#postForm")[0].action,
|
||||
type: $("#postForm")[0].method,
|
||||
data: $("#postForm").serialize(),
|
||||
success: function () {
|
||||
if (isPublish) {
|
||||
swal({
|
||||
title: '发布成功!',
|
||||
type: "success",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
}, function () {
|
||||
window.location.href = "/admin/articlemanage";
|
||||
});
|
||||
} else {
|
||||
swal({
|
||||
title: '更新成功!',
|
||||
type: "success",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
swal({
|
||||
title: isPublish ? '发布失败!' : '更新失败!',
|
||||
type: "error",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
},
|
||||
complete: function () {
|
||||
$(".sweet-alert .confirm").removeAttr("disabled");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('#btnSave').on('click', function () {
|
||||
var $this = $(this);
|
||||
$("#Labels").val(JSON.stringify($("#myPillbox").pillbox("items")));
|
||||
$('#IsDraft').val('True');
|
||||
$this.attr('disabled', 'disabled');
|
||||
$.ajax({
|
||||
url: $("#postForm")[0].action,
|
||||
type: $("#postForm")[0].method,
|
||||
data: $("#postForm").serialize(),
|
||||
success: function () {
|
||||
swal({
|
||||
title: '草稿保存成功!',
|
||||
type: 'success',
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
},
|
||||
error: function () {
|
||||
swal({
|
||||
title: "草稿保存失败!",
|
||||
type: "error",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
},
|
||||
complete: function () {
|
||||
$this.removeAttr("disabled");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(".selectlist").on("changed.fu.selectlist", function (e, data) {
|
||||
$(this).find("li").removeClass("active");
|
||||
$(this).find("li[data-value=" + data.value + "]").addClass("active");
|
||||
});
|
||||
});
|
||||
|
||||
function refreshCate() {
|
||||
$.ajax({
|
||||
url: "/admin/getCategories",
|
||||
type: "Post",
|
||||
success: function (data) {
|
||||
$("#Categorylist ul").html("");
|
||||
$.each(data, function (key, value) {
|
||||
if (!value.Link) {
|
||||
$("#Categorylist ul").append("<li data-value=\"" + value._id + "\">"
|
||||
+ "<a href=\"#\">" + value.CateName + "</a>"
|
||||
+ "</li>");
|
||||
}
|
||||
});
|
||||
$("#Categorylist ul").append("<li data-value=\"other\"><a href=\"#\">未分类</a></li>");
|
||||
$("#Categorylist").selectlist("enable");
|
||||
$("#Categorylist").selectlist("selectByValue", categoryId);
|
||||
$("#Categorylist li[data-value=" + categoryId + "]").addClass("active");
|
||||
}
|
||||
});
|
||||
}
|
||||
67
public/javascripts/exception.js
Normal file
@@ -0,0 +1,67 @@
|
||||
var $table = $("#exceptions");
|
||||
|
||||
$(function () {
|
||||
$("#side-menu>li:eq(7)").addClass("active");
|
||||
|
||||
$table.bootstrapTable({
|
||||
url: "/admin/getExceptions",
|
||||
method: "post",
|
||||
pagination: true,
|
||||
paginationFirstText: "<i class=\"fa fa-angle-double-left\"></i>",
|
||||
paginationPreText: "<i class=\"fa fa-angle-left\"></i>",
|
||||
paginationNextText: "<i class=\"fa fa-angle-right\"></i>",
|
||||
paginationLastText: "<i class=\"fa fa-angle-double-right\"></i>",
|
||||
queryParamsType: "pageIndex",
|
||||
sidePagination: "server",
|
||||
pageList: [10, 25, 50, 100, "All"],
|
||||
sortName: "timestamp",
|
||||
sortOrder: "desc",
|
||||
showRefresh: true,
|
||||
showColumns: true,
|
||||
iconsPrefix: "fa",
|
||||
icons: {
|
||||
refresh: "fa-refresh",
|
||||
columns: "fa-th-list",
|
||||
detailOpen: "fa-plus",
|
||||
detailClose: "fa-minus"
|
||||
},
|
||||
idField: "_id",
|
||||
detailView: true,
|
||||
detailFormatter: function (index, row) {
|
||||
return '<div style="white-space:pre-wrap;">' + JSON.stringify(row.meta, null, 2) + '</div>';
|
||||
},
|
||||
columns: [{
|
||||
field: "meta.os.hostname",
|
||||
title: "主机名",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
width: "120px",
|
||||
}, {
|
||||
field: "meta.code",
|
||||
title: "Code",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
width: "80px",
|
||||
}, {
|
||||
field: "message",
|
||||
title: "异常信息",
|
||||
halign: "center",
|
||||
valign: "middle"
|
||||
}, {
|
||||
field: "time",
|
||||
title: "记录时间",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
width: "200px",
|
||||
sortable: true
|
||||
}, {
|
||||
field: "level",
|
||||
title: "等级",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
width: "120px",
|
||||
sortable: true
|
||||
}]
|
||||
})
|
||||
;
|
||||
});
|
||||
3
public/javascripts/guestbook.js
Normal file
@@ -0,0 +1,3 @@
|
||||
$(function () {
|
||||
$(".my-nav-pills li:contains('留言')").addClass("active").siblings().removeClass("active");
|
||||
});
|
||||
2
public/javascripts/highlight.pack.js
Normal file
309
public/javascripts/index.js
Normal file
@@ -0,0 +1,309 @@
|
||||
var home_loading_timeout = 2000;
|
||||
var isLoading = false;
|
||||
var timeout = 1000;
|
||||
var contentTimeout = 1500;
|
||||
var begin = new Date();
|
||||
var contentBegin = new Date();
|
||||
var pageCount;
|
||||
var tooltip_timeout = 1500;
|
||||
$(function () {
|
||||
$(".my-nav-pills li:eq(0)").addClass("active").siblings().removeClass("active");
|
||||
$("#load-list").show();
|
||||
$("#PageIndex").val(1);
|
||||
requestData();
|
||||
|
||||
$(".category-list").mCustomScrollbar({
|
||||
axis: "y",
|
||||
theme: "dark-3"
|
||||
});
|
||||
|
||||
$(window).scroll(function () {
|
||||
$("[data-toggle='tooltip']").tooltip("hide");
|
||||
});
|
||||
|
||||
$("[data-toggle='tooltip']").tooltip({
|
||||
container: "body"
|
||||
});
|
||||
|
||||
$(document).on({
|
||||
click: function () {
|
||||
$(this).remove();
|
||||
begin = new Date();
|
||||
$("#load-list").show();
|
||||
isLoading = true;
|
||||
$("#PageIndex").val(parseInt($("#PageIndex").val()) + 1);
|
||||
requestData();
|
||||
}
|
||||
}, "#btn-load");
|
||||
|
||||
$(document).on({
|
||||
click: function () {
|
||||
var index = $(this).attr("page");
|
||||
var pageItem = $("#page" + index);
|
||||
$("html,body").animate({scrollTop: $(pageItem).offset().top - 90}, 1000);
|
||||
}
|
||||
}, "#page-nav a");
|
||||
|
||||
$(document).on({
|
||||
click: function () {
|
||||
var $this = $(this);
|
||||
$(".bd_weixin_popup").hide();
|
||||
$(".bd_weixin_popup_bg").hide();
|
||||
$(".post-cover").fadeIn();
|
||||
$("body").addClass("modal-open");
|
||||
$(".post-modal").css("right", 0);
|
||||
var alias = $(this).parent().attr("uid");
|
||||
if ($('body').data('preview') === alias) {
|
||||
return;
|
||||
}
|
||||
resetModal();
|
||||
var title = $(this).siblings("h4").children("a").html();
|
||||
$(".post-modal .modal-header h4").html(title);
|
||||
$("#btnFullMode").attr("href", $(this).next('h4').children('a').attr('href'));
|
||||
$(".post-content div").hide();
|
||||
var previewData = $this.data('preview-data');
|
||||
if (previewData) {
|
||||
appendContent(previewData);
|
||||
return;
|
||||
}
|
||||
$(".sk-cube-grid").show();
|
||||
contentBegin = new Date();
|
||||
$.ajax({
|
||||
url: "/blog/getPreviewContent",
|
||||
type: "Post",
|
||||
data: {alias: alias},
|
||||
success: function (data) {
|
||||
var end = new Date();
|
||||
$this.data('preview-data', data);
|
||||
if (end - contentBegin > contentTimeout) {
|
||||
appendContent(data);
|
||||
} else {
|
||||
var timespan = contentTimeout - (end - contentBegin);
|
||||
setTimeout(function () {
|
||||
appendContent(data);
|
||||
}, timespan);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}, ".preview-link");
|
||||
|
||||
$(".post-modal .modal-body").mCustomScrollbar({
|
||||
theme: "dark-3",
|
||||
scrollButtons: {
|
||||
enable: true
|
||||
}
|
||||
});
|
||||
|
||||
$(".post-cover").on("click", function () {
|
||||
closeModal();
|
||||
});
|
||||
|
||||
$("#btnCloseModal").on("click", function () {
|
||||
closeModal();
|
||||
});
|
||||
|
||||
$("#btnFullMode").on("click", function () {
|
||||
setTimeout(closeModal, 800);
|
||||
});
|
||||
|
||||
$(".list-top-left a").on("click", function () {
|
||||
if (!$(this).hasClass("current")) {
|
||||
$(this).addClass("current").siblings().removeClass("current");
|
||||
$(".list-wrap ol").html("");
|
||||
$("[data-toggle='tooltip']").tooltip("hide");
|
||||
$("#page-nav").html("");
|
||||
$("#btn-load").remove();
|
||||
$("#no-more").remove();
|
||||
begin = new Date();
|
||||
$("#load-list").show();
|
||||
$("#SortBy").val($(this).attr("sort"));
|
||||
$("#PageIndex").val(1);
|
||||
requestData();
|
||||
}
|
||||
});
|
||||
|
||||
$("#Keyword").on("keypress", function (e) {
|
||||
if (e.which == 13 || e.which == 10) {
|
||||
searchPost();
|
||||
}
|
||||
});
|
||||
|
||||
$("#btnFilter").on("click", function () {
|
||||
searchPost();
|
||||
});
|
||||
|
||||
$(".selectlist").on("changed.fu.selectlist", function (e, data) {
|
||||
$(this).find("li").removeClass("active");
|
||||
$(this).find("li[data-value=" + data.value + "]").addClass("active");
|
||||
});
|
||||
});
|
||||
|
||||
function requestData() {
|
||||
$.ajax({
|
||||
url: $('#filterForm')[0].action,
|
||||
type: $('#filterForm')[0].method,
|
||||
data: $('#filterForm').serialize(),
|
||||
success: function (result) {
|
||||
var end = new Date();
|
||||
var data = result.posts;
|
||||
pageCount = result.pageCount;
|
||||
if (end - begin > timeout) {
|
||||
addPage($("#PageIndex").val(), data);
|
||||
} else {
|
||||
var timespan = timeout - (end - begin);
|
||||
setTimeout(function () {
|
||||
addPage($("#PageIndex").val(), data);
|
||||
}, timespan);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function appendContent(data) {
|
||||
$(".sk-cube-grid").hide();
|
||||
$(".post-content div").html(data.Content);
|
||||
|
||||
var labels = JSON.parse(data.Labels);
|
||||
$.each(labels, function (key, value) {
|
||||
$("#label-foot").append("<span title=\"" + value.text + "\" class=\"post-label\">" + value.text + "</span>");
|
||||
});
|
||||
$(".post-modal .modal-body").mCustomScrollbar("scrollTo", "top", {
|
||||
scrollInertia: 0
|
||||
});
|
||||
$(".post-content div").fadeIn();
|
||||
var pres = $('.post-content pre');
|
||||
pres.each(function (i, pre) {
|
||||
$(pre).html($('<code></code>').html($(pre).html()));
|
||||
hljs.highlightBlock($(pre).children('code')[0]);
|
||||
});
|
||||
}
|
||||
|
||||
function closeModal() {
|
||||
$(".post-modal").css("right", "-1200px");
|
||||
$(".post-cover").fadeOut();
|
||||
$("body").removeClass("modal-open");
|
||||
}
|
||||
|
||||
function resetModal() {
|
||||
$(".post-modal .modal-header h4").empty();
|
||||
$(".post-content div").empty();
|
||||
$("#label-foot").empty();
|
||||
}
|
||||
|
||||
function searchPost() {
|
||||
$(".list-wrap ol").html("");
|
||||
$("[data-toggle='tooltip']").tooltip("hide");
|
||||
$("#page-nav").html("");
|
||||
$("#btn-load").remove();
|
||||
$("#no-more").remove();
|
||||
begin = new Date();
|
||||
$("#load-list").show();
|
||||
$("#PageIndex").val(1);
|
||||
requestData();
|
||||
}
|
||||
|
||||
function addPage(index, data) {
|
||||
$("#load-list").hide();
|
||||
if (data.length > 0) {
|
||||
$(".list-wrap ol").append("<li id=\"page" + index + "\"></li>");
|
||||
$.each(data, function (key, value) {
|
||||
var itemHtml;
|
||||
if (value.Source == "1") {
|
||||
itemHtml = "<div uid=\""
|
||||
+ value.Alias
|
||||
+ "\" class=\"blog-item " + ($(".home-loading").length > 0 ? "" : "animated fadeIn") + "\">"
|
||||
+ " <h4>"
|
||||
+ " <a title=\""
|
||||
+ value.Title
|
||||
+ "\" target=\"_blank\" href=\""
|
||||
+ value.Url
|
||||
+ "\">"
|
||||
+ "<i class=\"fa fa-link\"></i> " + value.Title
|
||||
+ " <\/a>"
|
||||
+ " <\/h4>"
|
||||
+ " <span title=\"文章分类\">"
|
||||
+ " <i class=\"fa fa-map-signs\">"
|
||||
+ " <\/i>"
|
||||
+ " "
|
||||
+ "<a href=\"/blog/" + value.CategoryAlias + "\" target=\"_blank\">" + value.CateName + "</a>"
|
||||
+ " <\/span>"
|
||||
+ " <span title=\"发布时间\" class=\"margin-left-20\">"
|
||||
+ " <i class=\"fa fa-clock-o\">"
|
||||
+ " <\/i>"
|
||||
+ " "
|
||||
+ value.PublishDate
|
||||
+ " <\/span>"
|
||||
+ " <a title=\""
|
||||
+ value.Host
|
||||
+ "\" target=\"_blank\" href=\""
|
||||
+ value.Url.substring(0, value.Url.indexOf("://") + 3) + value.Host
|
||||
+ "\" class=\"pull-right margin-left-20 hidden-xs\">"
|
||||
+ " "
|
||||
+ "<i class=\"fa fa-globe\"></i> " + value.Host
|
||||
+ " <\/a>"
|
||||
+ " <div class=\"clearfix\">"
|
||||
+ " <\/div>"
|
||||
+ " <p>"
|
||||
+ " "
|
||||
+ encodeHtml(value.Summary)
|
||||
+ " <\/p>"
|
||||
+ "<\/div>"
|
||||
+ "<div class=\"hr-line-dashed\"></div>";
|
||||
} else {
|
||||
itemHtml = "<div class=\"blog-item " + ($(".home-loading").length > 0 ? "" : "animated fadeIn") + "\" uid=\"" + value.Alias + "\"><a class=\"preview-link\" title=\"点击预览\"></a><h4><a href=\"/blog/"
|
||||
+ value.CategoryAlias + "/" + value.Alias + "\" target=\"_blank\" title=\"" + value.Title + "\">" + value.Title + "</a></h4><span title=\"文章分类\"><i class=\"fa fa-map-signs\"></i> " + "<a href=\"/blog/" + value.CategoryAlias + "\" target=\"_blank\">" + value.CateName + "</a>" + "</span> <span class=\"margin-left-20\" title=\"发布时间\"><i class=\"fa fa-clock-o\"></i> " + value.PublishDate + "</span><div class=\"clearfix\"></div><p>" + encodeHtml(value.Summary) + "</p></div><div class=\"hr-line-dashed\"></div>";
|
||||
}
|
||||
$("#page" + index).append(itemHtml);
|
||||
});
|
||||
$("body").append("<script id=\"cy_cmt_num\" src=\"http://changyan.sohu.com/upload/plugins/plugins.list.count.js?clientId=cyrUoGjWj\"><\/script>");
|
||||
var item = $("<li><a href=\"javascript:void(0)\" page=\"" + index + "\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"第" + index + "页\"></a></li>");
|
||||
item.appendTo($("#page-nav"));
|
||||
var percent = 100 / index;
|
||||
$("#page-nav li").css("height", percent + "%");
|
||||
$("[data-toggle='tooltip']:visible").tooltip({
|
||||
container: "body"
|
||||
});
|
||||
item.find("a").tooltip("show");
|
||||
setTimeout(function () {
|
||||
item.find("a").tooltip("hide");
|
||||
}, tooltip_timeout);
|
||||
if ($("#PageIndex").val() == pageCount) {
|
||||
if (pageCount != 1) {
|
||||
$(".list-wrap").append("<div id=\"no-more\" class=\"text-muted text-center\">没有更多数据<\/div>");
|
||||
}
|
||||
} else {
|
||||
$(".list-wrap").append("<button id=\"btn-load\" class=\"btn btn-white btn-block\">下一页</button>");
|
||||
}
|
||||
} else {
|
||||
$(".list-wrap ol").append("<li id=\"page" + index + "\"></li>");
|
||||
$("#page" + index).append("<div class=\"text-center text-muted\">暂无数据</div>");
|
||||
}
|
||||
isLoading = false;
|
||||
if ($(".home-loading").length > 0) {
|
||||
var home_loading_end = new Date();
|
||||
$("[data-toggle='tooltip']").tooltip("hide");
|
||||
if (home_loading_end - home_loading_begin > home_loading_timeout) {
|
||||
$(".home-loading").remove();
|
||||
document.body.style.overflow = "auto";
|
||||
} else {
|
||||
var home_loading_timespan = home_loading_timeout - (home_loading_end - home_loading_begin);
|
||||
setTimeout(function () {
|
||||
$(".home-loading").remove();
|
||||
document.body.style.overflow = "auto";
|
||||
}, home_loading_timespan);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function encodeHtml(s) {
|
||||
return (typeof s != "string") ? s :
|
||||
s.replace(/"|&|'|<|>|[\x00-\x20]|[\x7F-\xFF]|[\u0100-\u2700]/g,
|
||||
function ($0) {
|
||||
var c = $0.charCodeAt(0), r = ["&#"];
|
||||
c = (c == 0x20) ? 0xA0 : c;
|
||||
r.push(c);
|
||||
r.push(";");
|
||||
return r.join("");
|
||||
});
|
||||
};
|
||||
237
public/javascripts/newarticle.js
Normal file
@@ -0,0 +1,237 @@
|
||||
$(function () {
|
||||
$("#side-menu>li:eq(2)").addClass("active").find("ul").addClass("in").find("li:eq(0)").addClass("active");
|
||||
|
||||
$("#Title").focus();
|
||||
|
||||
refreshCate();
|
||||
|
||||
var editor = UE.getEditor("editor", {
|
||||
allowDivTransToP: false,
|
||||
initialFrameHeight: 300,
|
||||
initialContent: "请输入文章正文",
|
||||
autoClearinitialContent: true,
|
||||
textarea: "Content"
|
||||
});
|
||||
|
||||
editor.ready(function () {
|
||||
$("[data-toggle=tooltip]").tooltip({
|
||||
container: "body"
|
||||
});
|
||||
});
|
||||
|
||||
$(".btn-alias").on("click", function () {
|
||||
var appid,
|
||||
key,
|
||||
salt,
|
||||
query = $("#Title").val(),
|
||||
from,
|
||||
to,
|
||||
str1,
|
||||
sign;
|
||||
if (query) {
|
||||
var that = this;
|
||||
$(that).addClass("disabled");
|
||||
appid = '20151219000008011';
|
||||
key = translateKey;
|
||||
salt = (new Date).getTime();
|
||||
from = 'zh';
|
||||
to = 'en';
|
||||
str1 = appid + query + salt + key;
|
||||
sign = md5(str1);
|
||||
$.ajax({
|
||||
url: 'http://api.fanyi.baidu.com/api/trans/vip/translate',
|
||||
type: 'get',
|
||||
dataType: 'jsonp',
|
||||
data: {
|
||||
q: query,
|
||||
appid: appid,
|
||||
salt: salt,
|
||||
from: from,
|
||||
to: to,
|
||||
sign: sign
|
||||
},
|
||||
success: function (data) {
|
||||
var en = data.trans_result[0].dst;
|
||||
var result = en.trim().toLowerCase().split(' ').join('-');
|
||||
$("#Alias").val(result).focus();
|
||||
$('#postForm').formValidation('revalidateField', 'Alias');
|
||||
},
|
||||
complete: function () {
|
||||
$(that).removeClass("disabled");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$("#postForm").on('init.field.fv', function (e, data) {
|
||||
var $parent = data.element.parents('.form-group'),
|
||||
$icon = $parent.find('.form-control-feedback[data-fv-icon-for="' + data.field + '"]');
|
||||
$icon.on('click.clearing', function () {
|
||||
if ($icon.hasClass('fa-remove')) {
|
||||
data.fv.resetField(data.element);
|
||||
}
|
||||
});
|
||||
}).formValidation({
|
||||
framework: 'bootstrap',
|
||||
icon: {
|
||||
valid: 'fa fa-check',
|
||||
invalid: 'fa fa-remove',
|
||||
validating: 'fa fa-refresh'
|
||||
},
|
||||
err: {
|
||||
container: 'tooltip'
|
||||
},
|
||||
fields: {
|
||||
Title: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: '标题不能为空'
|
||||
}
|
||||
}
|
||||
},
|
||||
Alias: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'Alias不能为空'
|
||||
},
|
||||
remote: {
|
||||
url: '/admin/checkArticleAlias',
|
||||
type: 'POST',
|
||||
data: '{"uid":"' + $('#UniqueId').val() + '"}',
|
||||
delay: 1000,
|
||||
message: 'Alias不唯一'
|
||||
}
|
||||
}
|
||||
},
|
||||
Summary: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: '摘要不能为空'
|
||||
}
|
||||
}
|
||||
},
|
||||
Url: {
|
||||
validators: {
|
||||
notEmpty: {
|
||||
message: 'Url不能为空'
|
||||
},
|
||||
uri: {
|
||||
message: 'Url地址不正确'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.on('err.field.fv', function (e, data) {
|
||||
data.fv.disableSubmitButtons(false);
|
||||
})
|
||||
.on('success.field.fv', function (e, data) {
|
||||
data.fv.disableSubmitButtons(false);
|
||||
})
|
||||
.on('success.form.fv', function (e) {
|
||||
e.preventDefault();
|
||||
$("#Labels").val(JSON.stringify($("#myPillbox").pillbox("items")));
|
||||
$('#IsDraft').val('False');
|
||||
swal({
|
||||
title: "确定要发布该文章吗?",
|
||||
text: $("#CategoryId").val() === "other" ? "<span style='color:#d9534f;'>注意:当前选择的文章分类为\"未分类\"</span>" : null,
|
||||
html: true,
|
||||
type: "warning",
|
||||
allowOutsideClick: true,
|
||||
showCancelButton: true,
|
||||
cancelButtonText: "取消",
|
||||
confirmButtonColor: "#d9534f",
|
||||
confirmButtonText: "确定发布",
|
||||
closeOnConfirm: false
|
||||
},
|
||||
function () {
|
||||
$(".sweet-alert .confirm").text("发布中...");
|
||||
$(".sweet-alert .confirm").attr("disabled", "disabled");
|
||||
$.ajax({
|
||||
url: $("#postForm")[0].action,
|
||||
type: $("#postForm")[0].method,
|
||||
data: $("#postForm").serialize(),
|
||||
success: function () {
|
||||
swal({
|
||||
title: "发布成功!",
|
||||
type: "success",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
}, function () {
|
||||
window.location.href = "/admin/articlemanage";
|
||||
});
|
||||
},
|
||||
error: function () {
|
||||
swal({
|
||||
title: "发布失败!",
|
||||
type: "error",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
},
|
||||
complete: function () {
|
||||
$(".sweet-alert .confirm").removeAttr("disabled");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('#btnSave').on('click', function () {
|
||||
var $this = $(this);
|
||||
$("#Labels").val(JSON.stringify($("#myPillbox").pillbox("items")));
|
||||
$('#IsDraft').val('True');
|
||||
$this.attr('disabled', 'disabled');
|
||||
$.ajax({
|
||||
url: $("#postForm")[0].action,
|
||||
type: $("#postForm")[0].method,
|
||||
data: $("#postForm").serialize(),
|
||||
success: function () {
|
||||
swal({
|
||||
title: '草稿保存成功!',
|
||||
type: 'success',
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
}, function () {
|
||||
window.location.href = '/admin/editarticle/' + $('#UniqueId').val();
|
||||
});
|
||||
},
|
||||
error: function () {
|
||||
swal({
|
||||
title: "草稿保存失败!",
|
||||
type: "error",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
},
|
||||
complete: function () {
|
||||
$this.removeAttr("disabled");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(".selectlist").on("changed.fu.selectlist", function (e, data) {
|
||||
$(this).find("li").removeClass("active");
|
||||
$(this).find("li[data-value=" + data.value + "]").addClass("active");
|
||||
});
|
||||
});
|
||||
|
||||
function refreshCate() {
|
||||
$.ajax({
|
||||
url: "/admin/getCategories",
|
||||
type: "Post",
|
||||
success: function (data) {
|
||||
$("#Categorylist ul").html("");
|
||||
$.each(data, function (key, value) {
|
||||
if (!value.Link) {
|
||||
$("#Categorylist ul").append("<li data-value=\"" + value._id + "\">"
|
||||
+ "<a href=\"#\">" + value.CateName + "</a>"
|
||||
+ "</li>");
|
||||
}
|
||||
});
|
||||
$("#Categorylist ul").append("<li data-value=\"other\"><a href=\"#\">未分类</a></li>");
|
||||
$("#Categorylist").selectlist("enable");
|
||||
$("#Categorylist").selectlist("selectByValue", "other");
|
||||
$("#Categorylist li[data-value=other]").addClass("active");
|
||||
}
|
||||
});
|
||||
}
|
||||
288
public/javascripts/selectlist.js
Normal file
@@ -0,0 +1,288 @@
|
||||
/*
|
||||
* Fuel UX Selectlist
|
||||
* https://github.com/ExactTarget/fuelux
|
||||
*
|
||||
* Copyright (c) 2014 ExactTarget
|
||||
* Licensed under the BSD New license.
|
||||
*/
|
||||
|
||||
// -- BEGIN UMD WRAPPER PREFACE --
|
||||
|
||||
// For more information on UMD visit:
|
||||
// https://github.com/umdjs/umd/blob/master/jqueryPlugin.js
|
||||
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// if AMD loader is available, register as an anonymous module.
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof exports === 'object') {
|
||||
// Node/CommonJS
|
||||
module.exports = factory(require('jquery'));
|
||||
} else {
|
||||
// OR use browser globals if AMD is not present
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function ($) {
|
||||
// -- END UMD WRAPPER PREFACE --
|
||||
|
||||
// -- BEGIN MODULE CODE HERE --
|
||||
|
||||
var old = $.fn.selectlist;
|
||||
// SELECT CONSTRUCTOR AND PROTOTYPE
|
||||
|
||||
var Selectlist = function (element, options) {
|
||||
this.$element = $(element);
|
||||
this.options = $.extend({}, $.fn.selectlist.defaults, options);
|
||||
|
||||
|
||||
this.$button = this.$element.find('.btn.dropdown-toggle');
|
||||
this.$hiddenField = this.$element.find('.hidden-field');
|
||||
this.$label = this.$element.find('.selected-label');
|
||||
this.$dropdownMenu = this.$element.find('.dropdown-menu');
|
||||
|
||||
this.$element.on('click.fu.selectlist', '.dropdown-menu a', $.proxy(this.itemClicked, this));
|
||||
this.setDefaultSelection();
|
||||
|
||||
if (options.resize === 'auto' || this.$element.attr('data-resize') === 'auto') {
|
||||
this.resize();
|
||||
}
|
||||
|
||||
// if selectlist is empty or is one item, disable it
|
||||
var items = this.$dropdownMenu.children('li');
|
||||
if (items.length === 0) {
|
||||
this.disable();
|
||||
this.doSelect($(this.options.emptyLabelHTML));
|
||||
}
|
||||
|
||||
// support jumping focus to first letter in dropdown when key is pressed
|
||||
this.$element.on('shown.bs.dropdown', function () {
|
||||
var $this = $(this);
|
||||
// attach key listener when dropdown is shown
|
||||
$(document).on('keypress.fu.selectlist', function (e) {
|
||||
|
||||
// get the key that was pressed
|
||||
var key = String.fromCharCode(e.which);
|
||||
// look the items to find the first item with the first character match and set focus
|
||||
$this.find("li").each(function (idx, item) {
|
||||
if ($(item).text().charAt(0).toLowerCase() === key) {
|
||||
$(item).children('a').focus();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
// unbind key event when dropdown is hidden
|
||||
this.$element.on('hide.bs.dropdown', function () {
|
||||
$(document).off('keypress.fu.selectlist');
|
||||
});
|
||||
};
|
||||
|
||||
Selectlist.prototype = {
|
||||
|
||||
constructor: Selectlist,
|
||||
|
||||
destroy: function () {
|
||||
this.$element.remove();
|
||||
// any external bindings
|
||||
// [none]
|
||||
// empty elements to return to original markup
|
||||
// [none]
|
||||
// returns string of markup
|
||||
return this.$element[0].outerHTML;
|
||||
},
|
||||
|
||||
doSelect: function ($item) {
|
||||
var $selectedItem;
|
||||
this.$selectedItem = $selectedItem = $item;
|
||||
|
||||
this.$hiddenField.val(this.$selectedItem.attr('data-value'));
|
||||
this.$label.html($(this.$selectedItem.children()[0]).html());
|
||||
|
||||
// clear and set selected item to allow declarative init state
|
||||
// unlike other controls, selectlist's value is stored internal, not in an input
|
||||
this.$element.find('li').each(function () {
|
||||
if ($selectedItem.is($(this))) {
|
||||
$(this).attr('data-selected', true);
|
||||
} else {
|
||||
$(this).removeData('selected').removeAttr('data-selected');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
itemClicked: function (e) {
|
||||
this.$element.trigger('clicked.fu.selectlist', this.$selectedItem);
|
||||
|
||||
e.preventDefault();
|
||||
// ignore if a disabled item is clicked
|
||||
if ($(e.currentTarget).parent('li').is('.disabled, :disabled')) { return; }
|
||||
|
||||
// is clicked element different from currently selected element?
|
||||
if (!($(e.target).parent().is(this.$selectedItem))) {
|
||||
this.itemChanged(e);
|
||||
}
|
||||
|
||||
// return focus to control after selecting an option
|
||||
this.$element.find('.dropdown-toggle').focus();
|
||||
},
|
||||
|
||||
itemChanged: function (e) {
|
||||
//selectedItem needs to be <li> since the data is stored there, not in <a>
|
||||
this.doSelect($(e.target).closest('li'));
|
||||
|
||||
// pass object including text and any data-attributes
|
||||
// to onchange event
|
||||
var data = this.selectedItem();
|
||||
// trigger changed event
|
||||
this.$element.trigger('changed.fu.selectlist', data);
|
||||
},
|
||||
|
||||
resize: function () {
|
||||
var width = 0;
|
||||
var newWidth = 0;
|
||||
var sizer = $('<div/>').addClass('selectlist-sizer');
|
||||
|
||||
|
||||
if (Boolean($(document).find('html').hasClass('fuelux'))) {
|
||||
// default behavior for fuel ux setup. means fuelux was a class on the html tag
|
||||
$(document.body).append(sizer);
|
||||
} else {
|
||||
// fuelux is not a class on the html tag. So we'll look for the first one we find so the correct styles get applied to the sizer
|
||||
$('.fuelux:first').append(sizer);
|
||||
}
|
||||
|
||||
sizer.append(this.$element.clone());
|
||||
|
||||
this.$element.find('a').each(function () {
|
||||
sizer.find('.selected-label').text($(this).text());
|
||||
newWidth = sizer.find('.selectlist').outerWidth();
|
||||
newWidth = newWidth + sizer.find('.sr-only').outerWidth();
|
||||
if (newWidth > width) {
|
||||
width = newWidth;
|
||||
}
|
||||
});
|
||||
|
||||
if (width <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.$button.css('width', width);
|
||||
this.$dropdownMenu.css('width', width);
|
||||
|
||||
sizer.remove();
|
||||
},
|
||||
|
||||
selectedItem: function () {
|
||||
var txt = this.$selectedItem.text();
|
||||
return $.extend({
|
||||
text: txt
|
||||
}, this.$selectedItem.data());
|
||||
},
|
||||
|
||||
selectByText: function (text) {
|
||||
var $item = $([]);
|
||||
this.$element.find('li').each(function () {
|
||||
if ((this.textContent || this.innerText || $(this).text() || '').toLowerCase() === (text || '').toLowerCase()) {
|
||||
$item = $(this);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
this.doSelect($item);
|
||||
},
|
||||
|
||||
selectByValue: function (value) {
|
||||
var selector = 'li[data-value="' + value + '"]';
|
||||
this.selectBySelector(selector);
|
||||
},
|
||||
|
||||
selectByIndex: function (index) {
|
||||
// zero-based index
|
||||
var selector = 'li:eq(' + index + ')';
|
||||
this.selectBySelector(selector);
|
||||
},
|
||||
|
||||
selectBySelector: function (selector) {
|
||||
var $item = this.$element.find(selector);
|
||||
this.doSelect($item);
|
||||
},
|
||||
|
||||
setDefaultSelection: function () {
|
||||
var $item = this.$element.find('li[data-selected=true]').eq(0);
|
||||
|
||||
if ($item.length === 0) {
|
||||
$item = this.$element.find('li').has('a').eq(0);
|
||||
}
|
||||
|
||||
this.doSelect($item);
|
||||
},
|
||||
|
||||
enable: function () {
|
||||
this.$element.removeClass('disabled');
|
||||
this.$button.removeClass('disabled');
|
||||
},
|
||||
|
||||
disable: function () {
|
||||
this.$element.addClass('disabled');
|
||||
this.$button.addClass('disabled');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// SELECT PLUGIN DEFINITION
|
||||
|
||||
$.fn.selectlist = function (option) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
var methodReturn;
|
||||
|
||||
var $set = this.each(function () {
|
||||
var $this = $(this);
|
||||
var data = $this.data('fu.selectlist');
|
||||
var options = typeof option === 'object' && option;
|
||||
|
||||
if (!data) {
|
||||
$this.data('fu.selectlist', (data = new Selectlist(this, options)));
|
||||
}
|
||||
|
||||
if (typeof option === 'string') {
|
||||
methodReturn = data[option].apply(data, args);
|
||||
}
|
||||
});
|
||||
|
||||
return (methodReturn === undefined) ? $set : methodReturn;
|
||||
};
|
||||
|
||||
$.fn.selectlist.defaults = {
|
||||
emptyLabelHTML: '<li data-value=""><a href="#">No items</a></li>'
|
||||
};
|
||||
|
||||
$.fn.selectlist.Constructor = Selectlist;
|
||||
|
||||
$.fn.selectlist.noConflict = function () {
|
||||
$.fn.selectlist = old;
|
||||
return this;
|
||||
};
|
||||
|
||||
|
||||
// DATA-API
|
||||
|
||||
$(document).on('mousedown.fu.selectlist.data-api', '[data-initialize=selectlist]', function (e) {
|
||||
var $control = $(e.target).closest('.selectlist');
|
||||
if (!$control.data('fu.selectlist')) {
|
||||
$control.selectlist($control.data());
|
||||
}
|
||||
});
|
||||
|
||||
// Must be domReady for AMD compatibility
|
||||
$(function () {
|
||||
$('[data-initialize=selectlist]').each(function () {
|
||||
var $this = $(this);
|
||||
if (!$this.data('fu.selectlist')) {
|
||||
$this.selectlist($this.data());
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// -- BEGIN UMD WRAPPER AFTERWORD --
|
||||
}));
|
||||
// -- END UMD WRAPPER AFTERWORD --
|
||||
52
public/javascripts/settings.js
Normal file
@@ -0,0 +1,52 @@
|
||||
$(function () {
|
||||
$("#side-menu>li:eq(8)").addClass("active");
|
||||
|
||||
var elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch'));
|
||||
elems.forEach(function (el) {
|
||||
var switchery = new Switchery(el, { color: '#1AB394' });
|
||||
});
|
||||
|
||||
$(document).on({
|
||||
change: function () {
|
||||
$(this).prev(":hidden").val(this.checked);
|
||||
}
|
||||
}, ".js-switch");
|
||||
|
||||
$(".fileupload").fileupload({
|
||||
url: "/admin/uploadimg",
|
||||
dataType: "text",
|
||||
done: function (e, data) {
|
||||
$(this).prev("img").attr("src", data.result);
|
||||
$(this).next(":hidden").val(data.result);
|
||||
}
|
||||
});
|
||||
|
||||
$('#btnSave').on('click', function () {
|
||||
var $this = $(this);
|
||||
$this.attr('disabled', 'disabled');
|
||||
$.ajax({
|
||||
url: $("#postForm")[0].action,
|
||||
type: $("#postForm")[0].method,
|
||||
data: $("#postForm").serialize(),
|
||||
success: function () {
|
||||
swal({
|
||||
title: '保存成功!',
|
||||
type: 'success',
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
},
|
||||
error: function () {
|
||||
swal({
|
||||
title: "保存失败!",
|
||||
type: "error",
|
||||
showConfirmButton: false,
|
||||
timer: 2000
|
||||
});
|
||||
},
|
||||
complete: function () {
|
||||
$this.removeAttr("disabled");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
92
public/javascripts/top.js
Normal file
@@ -0,0 +1,92 @@
|
||||
$(function () {
|
||||
var shows = window.tools || [0, 1, 2],
|
||||
toggle = $('#ss_toggle'),
|
||||
menu = $('#share-menu'),
|
||||
rot,
|
||||
img;
|
||||
if (shows.indexOf(0) >= 0) {
|
||||
$('ul.fixed-tool li.share-li').show();
|
||||
$('#ss_toggle').on('click', function () {
|
||||
if (!$(".qrcontain").is(":hidden")) {
|
||||
$(".qrcontain").hide();
|
||||
$("#qrBtn").removeClass("opened");
|
||||
}
|
||||
rot = parseInt($(this).data('rot')) - 180;
|
||||
if (rot / 180 % 2 == 0) {
|
||||
menu.css('transform', 'rotate(' + rot + 'deg)');
|
||||
menu.css('webkitTransform', 'rotate(' + rot + 'deg)');
|
||||
toggle.parent().addClass('ss_active');
|
||||
toggle.addClass('close');
|
||||
} else {
|
||||
menu.css('transform', 'rotate(' + parseInt(rot - 30) + 'deg)');
|
||||
menu.css('webkitTransform', 'rotate(' + parseInt(rot - 30) + 'deg)');
|
||||
toggle.parent().removeClass('ss_active');
|
||||
toggle.removeClass('close');
|
||||
}
|
||||
$(this).data('rot', rot);
|
||||
});
|
||||
menu.on('transitionend webkitTransitionEnd oTransitionEnd', function () {
|
||||
if (rot / 180 % 2 == 0) {
|
||||
$("#share-menu i.fa").addClass('bounce');
|
||||
} else {
|
||||
$("#share-menu i.fa").removeClass('bounce');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (shows.indexOf(1) >= 0) {
|
||||
$('ul.fixed-tool li.qr-li').show();
|
||||
$("#qrBtn").on("click", function () {
|
||||
if ($("#ss_toggle").hasClass("close")) {
|
||||
$("#share-menu").css("transition", "none");
|
||||
$("#ss_toggle").click();
|
||||
}
|
||||
if ($(".qrcontain").is(":hidden")) {
|
||||
$(".qrcontain").removeClass("fadeOutLeft").addClass("fadeInLeft");
|
||||
$(".qrcontain").show();
|
||||
$("#qrBtn").addClass("opened");
|
||||
} else {
|
||||
$(".qrcontain").removeClass("fadeInLeft").addClass("fadeOutLeft");
|
||||
$(".qrcontain").one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend", function () {
|
||||
$(".qrcontain").hide();
|
||||
});
|
||||
$("#qrBtn").removeClass("opened");
|
||||
}
|
||||
$("#share-menu").css("transition", "all 1s ease 0s");
|
||||
});
|
||||
|
||||
img = document.createElement("img");
|
||||
img.src = logoPath;
|
||||
img.onload = function () {
|
||||
$("#qrcode").qrcode({
|
||||
text: window.location.href,
|
||||
size: "100",
|
||||
ecLevel: 'H',
|
||||
minVersion: 4,
|
||||
mode: 4,
|
||||
image: img,
|
||||
mSize: 0.3
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
if (shows.indexOf(2) >= 0) {
|
||||
$('ul.fixed-tool li.top-li').show();
|
||||
$(window).scroll(function () {
|
||||
var scrollTop = $(window).scrollTop();
|
||||
if (scrollTop > 0) {
|
||||
$("#scrollTop").show();
|
||||
$(".qrcontain").css("top", "-57px");
|
||||
$(".qrcontain .arrow").css("top", "52%");
|
||||
} else {
|
||||
$("#scrollTop").hide();
|
||||
$(".qrcontain").css("top", "-107px");
|
||||
$(".qrcontain .arrow").css("top", "86%");
|
||||
}
|
||||
});
|
||||
|
||||
$("#scrollTop a").on("click", function () {
|
||||
$("html,body").animate({scrollTop: 0}, 800);
|
||||
});
|
||||
}
|
||||
});
|
||||
38
public/libs/bootstrap-table/.bower.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "bootstrap-table",
|
||||
"homepage": "https://github.com/wenzhixin/bootstrap-table",
|
||||
"authors": [
|
||||
"zhixin <wenzhixin2010@gmail.com>"
|
||||
],
|
||||
"description": "An extended Bootstrap table with radio, checkbox, sort, pagination, and other added features.",
|
||||
"main": [
|
||||
"src/bootstrap-table.js",
|
||||
"src/bootstrap-table.css"
|
||||
],
|
||||
"keywords": [
|
||||
"bootstrap",
|
||||
"table",
|
||||
"bootstrap table"
|
||||
],
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests",
|
||||
"docs",
|
||||
"assets"
|
||||
],
|
||||
"version": "1.10.0",
|
||||
"_release": "1.10.0",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "1.10.0",
|
||||
"commit": "11c7a2f4d12f82d881f7b8612163179df741d8f2"
|
||||
},
|
||||
"_source": "git://github.com/wenzhixin/bootstrap-table.git",
|
||||
"_target": "^1.10.0",
|
||||
"_originalSource": "bootstrap-table",
|
||||
"_direct": true
|
||||
}
|
||||
356
public/libs/bootstrap-table/CHANGELOG.md
Normal file
@@ -0,0 +1,356 @@
|
||||
## ChangeLog
|
||||
|
||||
### 1.10.0
|
||||
|
||||
- [bug] Fixed #1619: sub-table checkbox selects all the table.
|
||||
- [bug] Fixed icons for ability customizing.
|
||||
- [bug] Fixed #1677: paginationSwitch for server-side.
|
||||
- [bug] Fixed #1613: padding in footer.
|
||||
- [bug] Fixed #1742: showRow & hideRow param checks.
|
||||
- [bug] Fixed getItemField bug.
|
||||
- [bug] Fixed #617: server side pagination uses `this.options.searchText`.
|
||||
- [bug] Fixed class name does not apply to checkbox field bug.
|
||||
- [bug] Fixed clear function and searchFormatter option of filter-control extension.
|
||||
- [bug] Fixed year computation on cookie extension.
|
||||
- [bug] Fixed ReorderRows init when reorderable is false.
|
||||
- [bug] Fix #1660: removed powerpoint type of export extension.
|
||||
- [enh] Added `title` attribute to pagination controls defining the page number.
|
||||
- [enh] Added `escape` option.
|
||||
- [enh] Added `searchOnEnterKey` option.
|
||||
- [enh] Added `updateFormatText` method.
|
||||
- [enh] Added a third parameter to `detailFormatter` method passing the jQuery element.
|
||||
- [enh] Added new param for `updateCell` method to avoid table reinitialization.
|
||||
- [enh] Removed outline of th.
|
||||
- [enh] Added extension.json and composer.json files.
|
||||
- [enh] Added alternative group-by extension.
|
||||
- [enh] Added sticky-header extension.
|
||||
- [enh] Added filterLocal option to filter-control extension.
|
||||
- [enh] Enabled data attributes for editable column.
|
||||
- [enh] Added IconSize option to export extension.
|
||||
- [enh] Added tooltip for filter-control toolbar button.
|
||||
|
||||
### 1.9.1
|
||||
|
||||
- [bug] Removed no records events.
|
||||
- [bug] Fixed cardView fieldIndex error.
|
||||
- [bug] Fixed #1130: table-condensed is not working.
|
||||
- [bug] Fixed #1482: export all server sidePagination bug(export extension).
|
||||
- [bug] Fixed #1248: IE8 does not support indexOf function.
|
||||
- [bug] Fixed #1491: (un)check event element argument missing.
|
||||
- [bug] Fixed Italian translation.
|
||||
- [bug] Unified naming of MS in type names(export extension).
|
||||
- [bug] Fixed selectPage method fails(cookie extension).
|
||||
- [bug] Add ja-JP and ms-MY translation for formatAllRows.
|
||||
- [enh] UniqueId can also be stored in a row's data property.
|
||||
- [enh] Use default settings when cookie settings don't exist(cookie extension).
|
||||
- [enh] Expand `filterBy` to accept and array of values.
|
||||
- [enh] Added `updateByUniqueId` method.
|
||||
- [doc] Added `iconSize` docs.
|
||||
|
||||
### 1.9.0
|
||||
|
||||
- [enh] Update bootstrap-table-cookie.js.
|
||||
- [enh] Use options for detailView's open/close icons.
|
||||
- [enh] Added `refreshOptions` and `gtHiddenColumns` method.
|
||||
- [enh] Added `datepicker` option to Filter Control.
|
||||
- [bug] Fix #936 Sort carets should not be inline-styled by JS.
|
||||
- [bug] Fix table header width bug when setting table to no bordered.
|
||||
- [bug] Fix #938, fix #940: Multiple Sort and Hide/Show column.
|
||||
- [bug] Fix #970: `click`and `dblclick` bug on no-rows table.
|
||||
- [bug] Fix #967: unselected column while column sorted display error.
|
||||
- [enh] Support title feature in cells.
|
||||
- [enh] Improved cookie, mobile extension.
|
||||
- [enh] Added group-by, angular extension.
|
||||
- [enh] Added option for setting locale.
|
||||
- [enh] Added `exportDataType` option for export extension.
|
||||
- [enh] Add fa-IR, ca-ES, es-ES, et-EE and af-ZA locales.
|
||||
- [enh] Supported complex header with `rowspans` and `colspans`.
|
||||
- [enh] Added `searchFomatter` column option.
|
||||
- [bug] Fixed ResetRow function and undefined column search bug.
|
||||
- [bug] Fixed #639: footer resizing problem.
|
||||
- [enh] Added resetSearch method to reset the search text.
|
||||
- [enh] Supported flat json.
|
||||
- [enh] Improved reorder-columns extension.
|
||||
- [enh] Added multiple-search, accent-neutralise extension.
|
||||
- [enh] Added fixed-columns extension.
|
||||
- [enh] Added `$.fn.bootstrapTable.utils` tools.
|
||||
- [enh] Added `expandRow` and `collapseRow` methods.
|
||||
- [enh] Updated `showRow`, `hideRow` and `updateCell` methods.
|
||||
- [bug] Fix #1390: radio maintainSelected bug.
|
||||
- [bug] Fix #1421: checkBy filter enabled.
|
||||
- [bug] Remove `bootstrap-table-all.js` and `bootstrap-table-all.min.js`.
|
||||
|
||||
### 1.8.1
|
||||
|
||||
- [enh] Accessing field name in formatter.
|
||||
- [enh] Improve function option to support string format for example formatter.
|
||||
- [enh] Added multiple sort extension.
|
||||
- [enh] Improve filter control extension.
|
||||
- [enh] Added jsdelivr CDN.
|
||||
- [bug] Fix #912: Bug when switching to card view.
|
||||
- [bug] Fix #914: extra empty toolbar div bug.
|
||||
- [bug] Fix bootstrap-table-pt-PT.js typo.
|
||||
|
||||
### 1.8.0
|
||||
|
||||
- [enh] Added state saving for visible columns and the ability to use extension with multiple simultaneous tables.
|
||||
- [enh] Added `ajax` option to replace jquery ajax method.
|
||||
- [enh] Added `resetWidth` method to reset header and footer width.
|
||||
- [enh] Added key-events, mobile, filter-control, reorder-columns, reorder-rows, resizable, natural-sorting, toolbar extensions, and update the extensions name.
|
||||
- [enh] Added `onToggle`, `onCheckSome` and `onUncheckSome` events.
|
||||
- [enh] Added `getScrollPosition`, `removeAll`, `removeByUniqueId` methods.
|
||||
- [bug] Fix double header bug after table show from hidden.
|
||||
- [bug] Fix #279: scrollWidth bug.
|
||||
- [enh] `getData` method support to get the current page data.
|
||||
- [enh] Added 'getAllSelections' method to get checked rows across all pages.
|
||||
- [enh] Added `ro-RO` locale.
|
||||
- [enh] Added `table-no-bordered` class to remove table-bordered style.
|
||||
- [enh] Added `bootstrap-table-all.js` and `bootstrap-table-locale-all.js` files to dist.
|
||||
- [enh] Added detail view feature.
|
||||
- [enh] Added `updateCell` method.
|
||||
- [enh] Added `onClickCell` and `onDblClickCell` events.
|
||||
- [bug] Fix #672: Column Fixed Width in Percentage bug.
|
||||
- [bug] Fix row state field value bug when there are disabled rows.
|
||||
- [bug] Fix #762: save tr's data-* attributes.
|
||||
- [bug] Fix #823, #850: break rowspan bug, data-attribute bug.
|
||||
|
||||
### 1.7.0
|
||||
|
||||
- [enh] Add `showFooter`, `keyEvents`, `searchText` and `uniqueId` options.
|
||||
- [enh] Add `cardVisible` column options.
|
||||
- [enh] Add `checkBy` and `uncheckBy`, `showRow` and `hideRow` and `getRowsHidden` methods.
|
||||
- [enh] Add nb-NO, ar-SA, es-MX, ka-GE locales.
|
||||
- [enh] Add cookie, resizable, natural-sorting, toolbar extensions.
|
||||
- [enh] Add exportOptions to export extension.
|
||||
- [enh] Fix #263: prepend method support object and array.
|
||||
- [enh] Card View support checkbox and radio.
|
||||
- [bug] Fix Card View events bug.
|
||||
- [enh] Keep all `data-*` attributes when transform from normal table.
|
||||
- [enh] Load method support fixedScroll param.
|
||||
- [enh] Added 'all' option in pagination.
|
||||
- [enh] Added pagination detail align.
|
||||
|
||||
### 1.6.0
|
||||
|
||||
- [bug] Fix queryParams bug when use `sidePagination='server'`.
|
||||
- [enh] Add uk-UA, sv-SE, pt-PT, ms-MY, ja-JP locales.
|
||||
- [enh] Add `searchTimeOut` option.
|
||||
- [bug] Fix #220: state column hideColumn bug.
|
||||
- [bug] Fix #221: cellStyle bug.
|
||||
- [enh] Add `iconsPrefix` and `icons` options to support custom icons.
|
||||
- [enh] Add i18n support for docs.
|
||||
- [enh] Allow `query` params to be specified during refresh.
|
||||
- [bug] Fix bug of ellipsis string.
|
||||
- [bug] Fix pageList smartDisplay.
|
||||
- [bug] Fix #188: Export Button is not shown only use `showExport=true`.
|
||||
- [bug] Fix page-change event params bug.
|
||||
- [enh] Add limit and offset params only if pagination is activated.
|
||||
- [enh] Add `ajaxOptions` option to custom $.ajax options.
|
||||
- [enh] Add a toggle pagination toolbar button.
|
||||
- [enh] Add `iconSize` option.
|
||||
- [enh] Add `buttonsAlign` option and update `toolbarAlign` option.
|
||||
- [enh] Add `prepend`, `insertRow` and `toggleView` methods.
|
||||
- [enh] Add `editable-save.bs.table` event to editatble extension.
|
||||
- [enh] #431: load method support pagination.
|
||||
|
||||
### 1.5.0
|
||||
|
||||
- [bug] Fix #144: `onCheck` and `onUncheck` events are reversed when using `clickToSelect` option. (jQuery 1.7.2 bug).
|
||||
- [bug] Fix IE browser display header bug when use `mergeCells` method.
|
||||
- [bug] Fix #269: array as row bug.
|
||||
- [bug] Fix #314: `rowStyle` bug.
|
||||
- [enh] Add de-DE, hu-HU, sk-SK locales.
|
||||
- [enh] Fix #261: add namespace to `.table` style.
|
||||
- [bug] Fix #160, #323: operate events don't work in card view.
|
||||
- [enh] Add `filterBy`, `scrollTo`, `prevPage` and `nextPage`, `check` and `uncheck` methods.
|
||||
- [enh] Add `onPreBody` and `onPostBody` events.
|
||||
- [enh] Add `searchable` column option.
|
||||
- [enh] Fix #59: support load multiple locale files.
|
||||
- [enh] Modify the scope of the column events.
|
||||
- [enh] Improve editable extension.
|
||||
|
||||
### 1.4.0
|
||||
|
||||
- [enh] Fix #119, #123: Save all `id` and `class` of `tr` and `td` for html table.
|
||||
- [enh] Fix #149: Hide empty data on Card view.
|
||||
- [enh] Fix #131: Add `onPageChange` event.
|
||||
- [enh] Add `onSearch` event.
|
||||
- [enh] Apply `width` column option to row style.
|
||||
- [enh] Add bootstrap-table-filter extension.
|
||||
- [enh] Add cs-CZ, es-CR, es-NI, pl-PL, ur-PK, ko-KR, th-TH locales.
|
||||
- [bug] Fix `minimumCountColumns` option init error.
|
||||
- [bug] Fix #161: `undefined` or `null` string sort bug.
|
||||
- [bug] Fix #171: IE disabled button can be clicked bug.
|
||||
- [bug] Fix #185: Reset the page to the first page when changing the url with `refresh` method.
|
||||
- [bug] Fix #202: updateRow method keep the scroll position.
|
||||
- [enh] Add `smartDisplay` option.
|
||||
- [enh] Add `searchAlign` and `toolbarAlign` options.
|
||||
- [enh] Fix #193: Add `dataType` option.
|
||||
- [enh] Add flatJSON and editable extensions.
|
||||
- [enh] Add `rowAttributes` option.
|
||||
- [enh] Update documentation.
|
||||
|
||||
### 1.3.0
|
||||
|
||||
- [enh] Take `showHeader` option effect to the card view.
|
||||
- [enh] Rename and update locale files.
|
||||
- [bug] Fix #102: Wrong `options.columns` initialization.
|
||||
- [enh] Fix #121: Add extensions for bootstrap table.
|
||||
- [bug] Fix #138: IE8 search data and remove method error.
|
||||
- [bug] Fix bug: sorter and check all do not work in some case.
|
||||
- [enh] Add `bootstrap-table-nl-NL.js` and `bootstrap-table-el-GR.js`.
|
||||
- [enh] Support search without data-field set, trim search input.
|
||||
- [enh] Fix #81: Allow the `class` to be applied to the radio or checkbox row.
|
||||
- [bug] Fix #135, #142: Search use formatted data.
|
||||
- [enh] Verify search text before send queryParams.
|
||||
- [bug] Fix #148: column events support namespace.
|
||||
- [enh] Support to disable radio or checkbox column by formatter.
|
||||
|
||||
### 1.2.4
|
||||
|
||||
* [enh] Fix #23: Add css and classes parameters to column cell.
|
||||
* [enh] Fix #64: Add support for change remote url.
|
||||
* [enh] Fix #112: update the `refresh` method.
|
||||
* [bug] Fix #113: Using radio type and cardView error.
|
||||
* [enh] Fix #117: Add `updateRow` method.
|
||||
* [enh] Fix #96, #103: apply `class` option to td elements.
|
||||
* [enh] Fix #97: add `sortable` class to header cells instead of `cursor: pointer`.
|
||||
* [enh] Fix #124: change `queryParams` and `queryParamsType` default option.
|
||||
* [enh] Remove the `eval` method.
|
||||
* [enh] Add `bootstrap-table-it-IT.js` locale.
|
||||
|
||||
### 1.2.3
|
||||
|
||||
* [bug] Fix the selected row class reset after toggle column bug.
|
||||
* [bug] Fix #86: invisible column are still searchable.
|
||||
* [bug] Fix search result error when toggle column display.
|
||||
* [enh] Add `clickToSelect` to columns.
|
||||
* [bug] Fix click-row event bug.
|
||||
* [enh] When field is undefined, use index instead.
|
||||
* [enh] Add `cache` option for AJAX calls.
|
||||
* [enh] Improve zh-TW translation.
|
||||
* [enh] #82: Add `getData` method.
|
||||
* [enh] #82: Add `remove` method.
|
||||
|
||||
### 1.2.2
|
||||
|
||||
* Fix #68: Add `showColumn`/`hideColumn` methods.
|
||||
* Fix #69: Add `bootstrap-table-es_AR.js` locale.
|
||||
* Fix #88: Add `bootstrap-table-fr_BE.js` locale.
|
||||
* Fix #85: Select row and add row class.
|
||||
* Add `halign` column option.
|
||||
|
||||
### 1.2.1
|
||||
|
||||
* Fix #56: Pagination issue in bootstrap 2.3.
|
||||
* Fix #76: After refreshing table data, search no longer works.
|
||||
* Fix #77: After searching and then clearing the search field, table is no longer sortable.
|
||||
* Add `sortable` option, `false` to disable sortable of all columns.
|
||||
* Support localization for docs.
|
||||
|
||||
### 1.2.0
|
||||
|
||||
* Fix bootstrap 2 table border bug.
|
||||
* Fix loading and not found record display bug.
|
||||
* Update ```minimunCountColumns``` option to ```minimumCountColumns```.
|
||||
* Fix sort order bug.
|
||||
|
||||
### 1.1.5
|
||||
|
||||
* Fix the bottom border bug on Chrome.
|
||||
* Add horizontal scroll for support.
|
||||
* Fix scroll header width error.
|
||||
* Add ```showRefresh``` and ```showToggle``` options.
|
||||
|
||||
### 1.1.4
|
||||
|
||||
* Fix ```destroy``` method bug.
|
||||
* Initialize table data from HTML.
|
||||
* Fix the hidden table reset header bug.
|
||||
|
||||
### 1.1.3
|
||||
|
||||
* Add ```events``` column option.
|
||||
* Add ```checkboxHeader``` option.
|
||||
* Add ```queryParamsType``` option.
|
||||
* Fix ie class bug, and fix duplicated data error.
|
||||
|
||||
### 1.1.2
|
||||
|
||||
* Add switchable column option.
|
||||
* Add ```data-toggle``` attribute.
|
||||
* Add support for number search.
|
||||
* Use html function instead of text in header th.
|
||||
|
||||
### 1.1.1
|
||||
|
||||
* Remove ```bootstrapVerion``` option.
|
||||
* Add ```data-page-list``` attribute.
|
||||
* Fix search data error.
|
||||
* Non case sensitive search in client side.
|
||||
* Added support for Danish translation.
|
||||
|
||||
### 1.1.0
|
||||
|
||||
* Fix old firefox browser display error.
|
||||
* Add minimunCountColumns option.
|
||||
* Update the table body header implementation and resetView method.
|
||||
* Remove bootstrapVersion option.
|
||||
* Fix search data error.
|
||||
|
||||
### 1.0.6
|
||||
|
||||
* Add jQuery events.
|
||||
* Add ```onDblClickRow``` event and ```onAll``` event.
|
||||
* Add ```singleSelect``` option.
|
||||
* Search improvent: add a timeout and trigger the search event when the text has changed to improve the search.
|
||||
* Scroll to top after data loaded.
|
||||
* Add ```toolbar``` option.
|
||||
* Add ```rowStyle``` option.
|
||||
* Add ```bootstrapVersion``` option.
|
||||
|
||||
### 1.0.5
|
||||
|
||||
* Update the pagination list position.
|
||||
* Update ```queryParams``` option.
|
||||
* Add ```contentType``` and ```onBeforeLoad``` options.
|
||||
* Add server side pagination(```pageSize, pageNumber, searchText, sortName, sortOrder```).
|
||||
* Add ```COLUMN_DEFAULTS```.
|
||||
* Add ```refresh``` method.
|
||||
* Add ```index``` argument in ```formatter``` function.
|
||||
* Update card view display.
|
||||
|
||||
### 1.0.4
|
||||
|
||||
* Add ```showLoading``` and ```hideLoading``` methods.
|
||||
* Add ```onLoadSuccess``` and ```onLoadError``` events.
|
||||
* Add ```clickToSelect``` option.
|
||||
* Add ```cardView``` option.
|
||||
* Add loading with ```formatLoadingMessage``` function.
|
||||
* Add ```idField``` option.
|
||||
|
||||
### 1.0.3
|
||||
|
||||
* Update fixed headers.
|
||||
* Add zh-TW locale file.
|
||||
* Add ```showColumns``` option and ```visible``` column option.
|
||||
* Update ```hideHeader``` option to ```showHeader```.
|
||||
* Add ```formatNoMatches``` locale function.
|
||||
* Add table events.
|
||||
|
||||
### 1.0.2
|
||||
|
||||
* Add i18n support.
|
||||
* Add ```selectItemName``` option.
|
||||
* Update the ```pageList``` default.
|
||||
* Add ```search``` option.
|
||||
* Add ```destroy``` method.
|
||||
* Add page list support.
|
||||
|
||||
### 1.0.1
|
||||
|
||||
* Add ```pagination``` support.
|
||||
|
||||
### 1.0.0
|
||||
|
||||
* Initial release
|
||||
206
public/libs/bootstrap-table/CONTRIBUTING.md
Normal file
@@ -0,0 +1,206 @@
|
||||
# Contributing to Bootstrap Table
|
||||
|
||||
Looking to contribute something to Bootstrap Table?
|
||||
|
||||
**Here's how you can help.**
|
||||
|
||||
Please take a moment to review this document in order to make the contribution
|
||||
process easy and effective for everyone involved.
|
||||
|
||||
Following these guidelines helps to communicate that you respect the time of
|
||||
the developers managing and developing this open source project. In return,
|
||||
they should reciprocate that respect in addressing your issue or assessing
|
||||
patches and features.
|
||||
|
||||
|
||||
## Using the issue tracker
|
||||
|
||||
The [issue tracker](https://github.com/wenzhixin/bootstrap-table/issues) is
|
||||
the preferred channel for [bug reports](#bug-reports), [features requests](#feature-requests)
|
||||
and [submitting pull requests](#pull-requests), but please respect the following
|
||||
restrictions:
|
||||
|
||||
* Please **do not** use the issue tracker for personal support requests. Stack
|
||||
Overflow ([`bootstrap-table`](http://stackoverflow.com/questions/tagged/bootstrap-table) tag is better place to get help.
|
||||
|
||||
* Please **do not** derail or troll issues. Keep the discussion on topic and
|
||||
respect the opinions of others.
|
||||
|
||||
* Please **do not** open issues or pull requests regarding the code in [`bootstrap-table-examples`](https://github.com/wenzhixin/bootstrap-table-examples) and [`extensions plugin dependence`](https://github.com/wenzhixin/bootstrap-table/tree/develop/src/extensions) (open them in their respective repositories), the dependence list:
|
||||
* Table Editable: [x-editable](https://github.com/vitalets/x-editable)
|
||||
* Table Export: [tableExport.jquery.plugin](https://github.com/hhurz/tableExport.jquery.plugin)
|
||||
* Table Filter: [bootstrap-table-filter](https://github.com/lukaskral/bootstrap-table-filter)
|
||||
* Table flat-json: [bootstrap-table-flat-json](https://github.com/djhvscf/bootstrap-table-flatJSON)
|
||||
* Table Reorder: [jquery-ui](https://code.jquery.com/ui/) and [dragTable](https://github.com/akottr/dragtable/)
|
||||
* Table Resizable: [colResizable](https://github.com/alvaro-prieto/colResizable)
|
||||
|
||||
## Issues and labels
|
||||
|
||||
Our bug tracker utilizes several labels to help organize and identify issues. Here's what they represent and how we use them:
|
||||
|
||||
- `awaiting reply` - Issues that are awaiting reply, will be closed if there is no any response in 7 days.
|
||||
- `browser bug` - Issues that are reported to us, but actually are the result of a browser-specific bug. These are diagnosed with reduced test cases and result in an issue opened on that browser's own bug tracker.
|
||||
- `confirmed` - Issues that have been confirmed with a reduced test case and identify a bug in Bootstrap Table.
|
||||
- `css` - Issues stemming from our compiled CSS or source CSS files.
|
||||
- `docs` - Issues for improving or updating our documentation.
|
||||
- `extension` - Issues for adding or updating our extension.
|
||||
- `feature` - Issues asking for a new feature to be added, or an existing one to be extended or modified.
|
||||
- `grunt` - Issues with our included JavaScript-based Gruntfile, which is used to run all our tests, concatenate and compile source files, and more.
|
||||
- `help wanted` - Issues we need or would love help from the community to resolve.
|
||||
- `js` - Issues stemming from our compiled or source JavaScript files.
|
||||
- `resource` - Issues with helpful resources to improve Bootstrap Table.
|
||||
|
||||
For a complete look at our labels, see the [project labels page](https://github.com/wenzhixin/bootstrap-table/labels).
|
||||
|
||||
|
||||
## Bug reports
|
||||
|
||||
A bug is a _demonstrable problem_ that is caused by the code in the repository.
|
||||
Good bug reports are extremely helpful, so thanks!
|
||||
|
||||
Guidelines for bug reports:
|
||||
|
||||
0. **Validate and lint your code** — [validate your HTML](http://html5.validator.nu)
|
||||
and [lint your HTML](https://github.com/twbs/bootlint) to ensure your
|
||||
problem isn't caused by a simple error in your own code.
|
||||
|
||||
1. **Use the GitHub issue search** — check if the issue has already been
|
||||
reported.
|
||||
|
||||
2. **Check if the issue has been fixed** — try to reproduce it using the
|
||||
latest `master` or development branch in the repository.
|
||||
|
||||
3. **Isolate the problem** — ideally create a live example.
|
||||
The web tool [jsfiddle](http://jsfiddle.net/) is a very helpful for this. Consider to use these templates:
|
||||
* [Table from html](http://jsfiddle.net/wenyi/e3nk137y/11/light/)
|
||||
* [Table from data](http://jsfiddle.net/wenyi/e3nk137y/13/light/)
|
||||
* [Table from url](http://jsfiddle.net/wenyi/e3nk137y/14/light/)
|
||||
* Other templates can also be found at [jsFiddle Bootstrap](http://bootstrap-table.wenzhixin.net.cn/examples/#basic)
|
||||
|
||||
|
||||
A good bug report shouldn't leave others needing to chase you up for more
|
||||
information. Please try to be as detailed as possible in your report. What is
|
||||
your environment? What steps will reproduce the issue? What browser(s) and OS
|
||||
experience the problem? Do other browsers show the bug differently? What
|
||||
would you expect to be the outcome? All these details will help people to fix
|
||||
any potential bugs.
|
||||
|
||||
Example:
|
||||
|
||||
> Short and descriptive example bug report title
|
||||
>
|
||||
> A summary of the issue and the browser/OS environment in which it occurs. If
|
||||
> suitable, include the steps required to reproduce the bug.
|
||||
>
|
||||
> 1. This is the first step
|
||||
> 2. This is the second step
|
||||
> 3. Further steps, etc.
|
||||
>
|
||||
> `<url>` - a link to the reduced test case
|
||||
>
|
||||
> Any other information you want to share that is relevant to the issue being
|
||||
> reported. This might include the lines of code that you have identified as
|
||||
> causing the bug, and potential solutions (and your opinions on their
|
||||
> merits).
|
||||
|
||||
|
||||
## Feature requests
|
||||
|
||||
Feature requests are welcome. But take a moment to find out whether your idea
|
||||
fits with the scope and aims of the project. It's up to *you* to make a strong
|
||||
case to convince the project's developers of the merits of this feature. Please
|
||||
provide as much detail and context as possible.
|
||||
|
||||
|
||||
## Pull requests
|
||||
|
||||
Good pull requests—patches, improvements, new features—are a fantastic
|
||||
help. They should remain focused in scope and avoid containing unrelated
|
||||
commits.
|
||||
|
||||
**Please ask first** before embarking on any significant pull request (e.g.
|
||||
implementing features, refactoring code, porting to a different language),
|
||||
otherwise you risk spending a lot of time working on something that the
|
||||
project's developers might not want to merge into the project.
|
||||
|
||||
Please adhere to the [coding guidelines](#code-guidelines) used throughout the
|
||||
project (indentation, accurate comments, etc.) and any other requirements
|
||||
(such as test coverage).
|
||||
|
||||
**Do not edit files of `dist` directly!** Those files are automatically generated. You should edit the
|
||||
source files in [`/src/`](https://github.com/wenzhixin/bootstrap-table/tree/develop/src) instead.
|
||||
|
||||
Similarly, when contributing to Bootstrap's documentation, you should edit the
|
||||
documentation source files in
|
||||
[the `/docs/` directory of the `develop` branch](https://github.com/wenzhixin/bootstrap-table/tree/develop/docs).
|
||||
|
||||
Adhering to the following process is the best way to get your work
|
||||
included in the project:
|
||||
|
||||
1. [Fork](https://help.github.com/articles/fork-a-repo/) the project, clone your fork,
|
||||
and configure the remotes:
|
||||
|
||||
```bash
|
||||
# Clone your fork of the repo into the current directory
|
||||
git clone https://github.com/<your-username>/bootstrap-table.git
|
||||
# Navigate to the newly cloned directory
|
||||
cd bootstrap-table
|
||||
# Assign the original repo to a remote called "upstream"
|
||||
git remote add upstream https://github.com/wenzhixin/bootstrap-table.git
|
||||
```
|
||||
|
||||
2. If you cloned a while ago, get the latest changes from upstream:
|
||||
|
||||
```bash
|
||||
git checkout develop
|
||||
git pull upstream develop
|
||||
```
|
||||
|
||||
3. Create a new topic branch (off the main project development branch) to
|
||||
contain your feature, change, or fix:
|
||||
|
||||
```bash
|
||||
git checkout -b <topic-branch-name>
|
||||
```
|
||||
|
||||
4. Commit your changes in logical chunks. Please adhere to these [git commit
|
||||
message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)
|
||||
or your code is unlikely be merged into the main project. Use Git's
|
||||
[interactive rebase](https://help.github.com/articles/about-git-rebase/)
|
||||
feature to tidy up your commits before making them public.
|
||||
|
||||
5. Locally merge (or rebase) the upstream development branch into your topic branch:
|
||||
|
||||
```bash
|
||||
git pull [--rebase] upstream develop
|
||||
```
|
||||
|
||||
6. Push your topic branch up to your fork:
|
||||
|
||||
```bash
|
||||
git push origin <topic-branch-name>
|
||||
```
|
||||
|
||||
7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/)
|
||||
with a clear title and description against the `develop` branch.
|
||||
|
||||
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
|
||||
license your work under the terms of the [MIT License](LICENSE) (if it
|
||||
includes code changes) and under the terms of the
|
||||
[Creative Commons Attribution 3.0 Unported License](docs/LICENSE)
|
||||
(if it includes documentation changes).
|
||||
|
||||
|
||||
## Code guidelines
|
||||
|
||||
- Readability
|
||||
- Need semicolons
|
||||
- 4 spaces (no tabs)
|
||||
- strict mode
|
||||
- "Attractive"
|
||||
|
||||
|
||||
## License
|
||||
|
||||
By contributing your code, you agree to license your contribution under the [MIT License](LICENSE).
|
||||
By contributing to the documentation, you agree to license your contribution under the [Creative Commons Attribution 3.0 Unported License](docs/LICENSE).
|
||||
41
public/libs/bootstrap-table/DONATORS.md
Normal file
@@ -0,0 +1,41 @@
|
||||
## List of donators
|
||||
|
||||
* Richard C Jordan - $35
|
||||
* Janet Moery - $5
|
||||
* Rene Halskov - $10
|
||||
* Angel Arambula Garcia - $5
|
||||
* David Graham - $5
|
||||
* Paul Abbott - $20
|
||||
* Philip Tepfer - $10
|
||||
* Marcus Eddy - $5
|
||||
* Keith Rockhold - $50
|
||||
* Ramon Sosa Diaz - $10
|
||||
* Goncalo Cordeiro - $25
|
||||
* Marzena Wspanialy - $10
|
||||
* Nicolas Pascual - $10
|
||||
* Hassan Ejaz - $10
|
||||
* Frank Hines - $100
|
||||
* Luis Triana Vega - $10
|
||||
* PROMOTUX DI FRANCESCO MELONI E C. S.N.C. - $15
|
||||
* Emmanuel Kielichowski - $15
|
||||
* 우공이산 우공이산 - $50
|
||||
* Empirica srl - $15
|
||||
* Hassan Gareballa - $10
|
||||
* Jihwang Yi - $10
|
||||
|
||||
## 支付宝
|
||||
|
||||
* 萃华:10.18元
|
||||
* 小马哥:5元
|
||||
* 振:20元
|
||||
* 懒虫:8.8元
|
||||
* rainc:50元
|
||||
* 印:10元
|
||||
* 大个子:50元
|
||||
* 拓海真一:100元
|
||||
* IO芒果:7元
|
||||
|
||||
## 微信
|
||||
|
||||
* 笑:50元
|
||||
* 一牛九毛:100元
|
||||
90
public/libs/bootstrap-table/Gruntfile.js
Normal file
@@ -0,0 +1,90 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = function(grunt) {
|
||||
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
// Metadata.
|
||||
pkg: grunt.file.readJSON('bootstrap-table.jquery.json'),
|
||||
banner: '/*\n' +
|
||||
'* <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n' +
|
||||
'<%= pkg.homepage ? "* " + pkg.homepage : "" %>\n' +
|
||||
'* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>\n' +
|
||||
'* Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %>\n' +
|
||||
'*/\n',
|
||||
// Task configuration.
|
||||
clean: ['dist', 'docs/dist'],
|
||||
concat: {
|
||||
//basic_target: {
|
||||
// src: ['src/<%= pkg.name %>.js', 'src/extensions/**/*.js'],
|
||||
// dest: 'dist/<%= pkg.name %>-all.js'
|
||||
//},
|
||||
locale_target: {
|
||||
src: ['src/locale/**/*.js'],
|
||||
dest: 'dist/<%= pkg.name %>-locale-all.js'
|
||||
}
|
||||
},
|
||||
uglify: {
|
||||
options: {
|
||||
banner: '<%= banner %>'
|
||||
},
|
||||
basic_target: {
|
||||
files: {
|
||||
'dist/<%= pkg.name %>.min.js': ['src/<%=pkg.name %>.js'],
|
||||
//'dist/<%= pkg.name %>-all.min.js': ['dist/<%=pkg.name %>-all.js'],
|
||||
'dist/<%= pkg.name %>-locale-all.min.js': ['dist/<%=pkg.name %>-locale-all.js']
|
||||
}
|
||||
},
|
||||
locale_target: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'src/locale',
|
||||
src: '**/*.js',
|
||||
dest: 'dist/locale',
|
||||
ext: '.min.js' // replace .js to .min.js
|
||||
}]
|
||||
},
|
||||
extensions_target: {
|
||||
files: [{
|
||||
expand: true,
|
||||
cwd: 'src/extensions',
|
||||
src: '**/*.js',
|
||||
dest: 'dist/extensions',
|
||||
ext: '.min.js' // replace .js to .min.js
|
||||
}]
|
||||
}
|
||||
},
|
||||
cssmin: {
|
||||
add_banner: {
|
||||
options: {
|
||||
banner: '<%= banner %>'
|
||||
},
|
||||
files: {
|
||||
'dist/<%= pkg.name %>.min.css': ['src/<%=pkg.name %>.css']
|
||||
}
|
||||
}
|
||||
},
|
||||
copy: {
|
||||
source: {
|
||||
cwd: 'src', // set working folder / root to copy
|
||||
src: ['**/*.js', '**/*.css'], // copy all files and subfolders
|
||||
dest: 'dist', // destination folder
|
||||
expand: true // required when using cwd
|
||||
},
|
||||
files: {
|
||||
cwd: 'dist', // set working folder / root to copy
|
||||
src: '**/*', // copy all files and subfolders
|
||||
dest: 'docs/dist', // destination folder
|
||||
expand: true // required when using cwd
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
grunt.loadNpmTasks('grunt-contrib-cssmin');
|
||||
grunt.loadNpmTasks('grunt-contrib-copy');
|
||||
|
||||
grunt.registerTask('default', ['clean', 'concat', 'uglify', 'cssmin', 'copy']);
|
||||
};
|
||||
21
public/libs/bootstrap-table/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2012-2016 Zhixin Wen <wenzhixin2010@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
103
public/libs/bootstrap-table/README.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# [Bootstrap Table](http://bootstrap-table.wenzhixin.net.cn)
|
||||
|
||||
[](https://travis-ci.org/wenzhixin/bootstrap-table)
|
||||
[](http://badge.fury.io/gh/wenzhixin%2Fbootstrap-table)
|
||||
[](http://badge.fury.io/bo/bootstrap-table)
|
||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ZDHP676FQDUT6)
|
||||
|
||||
An extended Bootstrap table with radio, checkbox, sort, pagination, extensions and other added features.
|
||||
|
||||
To get started, check out:
|
||||
|
||||
* [Docs](http://bootstrap-table.wenzhixin.net.cn)
|
||||
* [Examples](https://github.com/wenzhixin/bootstrap-table-examples)
|
||||
* [Questions/Helps](http://stackoverflow.com/questions/tagged/bootstrap-table)
|
||||
* [问题/帮助](http://segmentfault.com/t/bootstrap-table)
|
||||
|
||||
|
||||
[**List of donators**](https://github.com/wenzhixin/bootstrap-table/blob/master/DONATORS.md)
|
||||
|
||||
## LICENSE
|
||||
|
||||
**NOTE:** Bootstrap Table is licensed under the [The MIT License](https://github.com/wenzhixin/bootstrap-table/blob/master/LICENSE). Completely free, you can arbitrarily use and modify this plugin. If this plugin is useful to you, you can **Star** this repo, your support is my biggest motive force, thanks.
|
||||
|
||||
## Features
|
||||
|
||||
* Created for Bootstrap 3 (Bootstrap 2 supported)
|
||||
* Responsive web design
|
||||
* Scrollable Table with fixed headers
|
||||
* Fully configurable
|
||||
* Via data attributes
|
||||
* Show/Hide columns
|
||||
* Show/Hide headers
|
||||
* Show/Hide footers
|
||||
* Get data in JSON format using AJAX
|
||||
* Simple column sorting with a click
|
||||
* Format column
|
||||
* Single or multiple row selection
|
||||
* Powerful pagination
|
||||
* Card view
|
||||
* Detail view
|
||||
* Localization
|
||||
* Extensions
|
||||
|
||||
## How to get it
|
||||
|
||||
### Manual download
|
||||
|
||||
Use [Releases page](https://github.com/wenzhixin/bootstrap-table/releases) or [the source](https://github.com/wenzhixin/bootstrap-table/archive/master.zip).
|
||||
|
||||
### Bower
|
||||
|
||||
```
|
||||
bower install bootstrap-table
|
||||
```
|
||||
|
||||
### Npm
|
||||
|
||||
```
|
||||
npm install bootstrap-table
|
||||
```
|
||||
|
||||
### CDN
|
||||
|
||||
You can source bootstrap-table directly from a CDN like [CDNJS](http://www.cdnjs.com/libraries/bootstrap-table) or [bootcss](http://open.bootcss.com/bootstrap-table/) or [jsdelivr](http://www.jsdelivr.com/#!bootstrap.table).
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
For feature requests, bug reports or submitting pull requests, please ensure you first read [CONTRIBUTING.md](https://github.com/wenzhixin/bootstrap-table/blob/master/CONTRIBUTING.md).
|
||||
|
||||
|
||||
## Reporting Issues
|
||||
|
||||
As stated above, please read [CONTRIBUTING.md](https://github.com/wenzhixin/bootstrap-table/blob/master/CONTRIBUTING.md), especially [Bug Reports](https://github.com/wenzhixin/bootstrap-table/blob/master/CONTRIBUTING.md#bug-reports)
|
||||
|
||||
And as stated there, please provide jsFiddle when creating issues!
|
||||
|
||||
It's really saves much time.
|
||||
|
||||
You can also use these for templates:
|
||||
|
||||
[jsFiddle Bootstrap Table](http://bootstrap-table.wenzhixin.net.cn/examples/#basic)
|
||||
|
||||
Your feedback is very appreciated!
|
||||
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
Thanks to everyone who have given feedback and submitted pull requests. A list of all the contributors can be found [here](https://github.com/wenzhixin/bootstrap-table/graphs/contributors).
|
||||
|
||||
## Release History
|
||||
|
||||
Look at the [Change Log](https://github.com/wenzhixin/bootstrap-table/blob/master/CHANGELOG.md)
|
||||
|
||||
## Local build
|
||||
|
||||
To build bootstrap-table locally please run:
|
||||
|
||||
```
|
||||
grunt build
|
||||
```
|
||||
|
||||
Result will appear in `dist` directory.
|
||||
31
public/libs/bootstrap-table/_config.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
# Dependencies
|
||||
markdown: redcarpet
|
||||
redcarpet:
|
||||
extensions:
|
||||
- fenced_code_blocks
|
||||
- tables
|
||||
- autolink
|
||||
highlighter: rouge
|
||||
|
||||
# Permalinks
|
||||
permalink: pretty
|
||||
|
||||
# Server
|
||||
source: docs
|
||||
destination: _gh_pages
|
||||
host: 0.0.0.0
|
||||
port: 4000
|
||||
url: http://bootstrap-table.wenzhixin.net.cn
|
||||
encoding: UTF-8
|
||||
|
||||
# Languages
|
||||
languages: ["en", "zh-cn", "es"]
|
||||
languages_string: ["English", "简体中文", "Español"]
|
||||
|
||||
# Custom vars
|
||||
current_version: 1.10.0
|
||||
repo: https://github.com/wenzhixin/bootstrap-table
|
||||
website: http://wenzhixin.net.cn
|
||||
repos: http://repos.wenzhixin.net.cn
|
||||
email: wenzhixin2010@gmail.com
|
||||
master_zip: https://github.com/wenzhixin/bootstrap-table/archive/master.zip
|
||||
28
public/libs/bootstrap-table/bootstrap-table.jquery.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "bootstrap-table",
|
||||
"version": "1.10.0",
|
||||
"title": "Bootstrap Table",
|
||||
"description": "An extended Bootstrap table with radio, checkbox, sort, pagination, and other added features.",
|
||||
"author": {
|
||||
"name": "zhixin wen",
|
||||
"email": "wenzhixin2010@gmail.com",
|
||||
"url": "http://wenzhixin.net.cn/"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT License",
|
||||
"url": "http://opensource.org/licenses/MIT"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": ">=1.7"
|
||||
},
|
||||
"keywords": ["bootstrap.table"],
|
||||
"homepage": "https://github.com/wenzhixin/bootstrap-table",
|
||||
"demo": "http://bootstrap-table.wenzhixin.net.cn",
|
||||
"bugs": {
|
||||
"url": "https://github.com/wenzhixin/bootstrap-table/issues"
|
||||
},
|
||||
"docs": "https://github.com/wenzhixin/bootstrap-table",
|
||||
"download": "https://github.com/wenzhixin/bootstrap-table/archive/master.zip"
|
||||
}
|
||||
27
public/libs/bootstrap-table/bower.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"name": "bootstrap-table",
|
||||
"homepage": "https://github.com/wenzhixin/bootstrap-table",
|
||||
"authors": [
|
||||
"zhixin <wenzhixin2010@gmail.com>"
|
||||
],
|
||||
"description": "An extended Bootstrap table with radio, checkbox, sort, pagination, and other added features.",
|
||||
"main": [
|
||||
"src/bootstrap-table.js",
|
||||
"src/bootstrap-table.css"
|
||||
],
|
||||
"keywords": [
|
||||
"bootstrap",
|
||||
"table",
|
||||
"bootstrap table"
|
||||
],
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests",
|
||||
"docs",
|
||||
"assets"
|
||||
]
|
||||
}
|
||||
17
public/libs/bootstrap-table/composer.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "wenzhixin/bootstrap-table",
|
||||
"description": "An extended Bootstrap table with radio, checkbox, sort, pagination and other features.",
|
||||
"keywords": ["bootstrap","table","tablesort","pagination"],
|
||||
"type": "component",
|
||||
"homepage": "https://github.com/wenzhixin/bootstrap-table",
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"twitter/bootstrap": ">=2.3.0"
|
||||
},
|
||||
"authors": [
|
||||
{
|
||||
"name": "wenzhixin2010",
|
||||
"email": "wenzhixin2010@gmail.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
1612
public/libs/bootstrap-table/dist/bootstrap-table-locale-all.js
vendored
Normal file
7
public/libs/bootstrap-table/dist/bootstrap-table-locale-all.min.js
vendored
Normal file
302
public/libs/bootstrap-table/dist/bootstrap-table.css
vendored
Normal file
@@ -0,0 +1,302 @@
|
||||
/**
|
||||
* @author zhixin wen <wenzhixin2010@gmail.com>
|
||||
* version: 1.10.0
|
||||
* https://github.com/wenzhixin/bootstrap-table/
|
||||
*/
|
||||
|
||||
.bootstrap-table .table {
|
||||
margin-bottom: 0 !important;
|
||||
border-bottom: 1px solid #dddddd;
|
||||
border-collapse: collapse !important;
|
||||
border-radius: 1px;
|
||||
}
|
||||
|
||||
.bootstrap-table .table:not(.table-condensed),
|
||||
.bootstrap-table .table:not(.table-condensed) > tbody > tr > th,
|
||||
.bootstrap-table .table:not(.table-condensed) > tfoot > tr > th,
|
||||
.bootstrap-table .table:not(.table-condensed) > thead > tr > td,
|
||||
.bootstrap-table .table:not(.table-condensed) > tbody > tr > td,
|
||||
.bootstrap-table .table:not(.table-condensed) > tfoot > tr > td {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.bootstrap-table .table.table-no-bordered > thead > tr > th,
|
||||
.bootstrap-table .table.table-no-bordered > tbody > tr > td {
|
||||
border-right: 2px solid transparent;
|
||||
}
|
||||
|
||||
.fixed-table-container {
|
||||
position: relative;
|
||||
clear: both;
|
||||
border: 1px solid #dddddd;
|
||||
border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
}
|
||||
|
||||
.fixed-table-container.table-no-bordered {
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.fixed-table-footer,
|
||||
.fixed-table-header {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.fixed-table-footer {
|
||||
border-top: 1px solid #dddddd;
|
||||
}
|
||||
|
||||
.fixed-table-body {
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.fixed-table-container table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.fixed-table-container thead th {
|
||||
height: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border-left: 1px solid #dddddd;
|
||||
}
|
||||
|
||||
.fixed-table-container thead th:focus {
|
||||
outline: 0 solid transparent;
|
||||
}
|
||||
|
||||
.fixed-table-container thead th:first-child {
|
||||
border-left: none;
|
||||
border-top-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
}
|
||||
|
||||
.fixed-table-container thead th .th-inner,
|
||||
.fixed-table-container tbody td .th-inner {
|
||||
padding: 8px;
|
||||
line-height: 24px;
|
||||
vertical-align: top;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.fixed-table-container thead th .sortable {
|
||||
cursor: pointer;
|
||||
background-position: right;
|
||||
background-repeat: no-repeat;
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
.fixed-table-container thead th .both {
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC');
|
||||
}
|
||||
|
||||
.fixed-table-container thead th .asc {
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==');
|
||||
}
|
||||
|
||||
.fixed-table-container thead th .desc {
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII= ');
|
||||
}
|
||||
|
||||
.fixed-table-container th.detail {
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
.fixed-table-container tbody td {
|
||||
border-left: 1px solid #dddddd;
|
||||
}
|
||||
|
||||
.fixed-table-container tbody tr:first-child td {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.fixed-table-container tbody td:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
/* the same color with .active */
|
||||
.fixed-table-container tbody .selected td {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.fixed-table-container .bs-checkbox {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.fixed-table-container .bs-checkbox .th-inner {
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.fixed-table-container input[type="radio"],
|
||||
.fixed-table-container input[type="checkbox"] {
|
||||
margin: 0 auto !important;
|
||||
}
|
||||
|
||||
.fixed-table-container .no-records-found {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.fixed-table-pagination div.pagination,
|
||||
.fixed-table-pagination .pagination-detail {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.fixed-table-pagination div.pagination .pagination {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.fixed-table-pagination .pagination a {
|
||||
padding: 6px 12px;
|
||||
line-height: 1.428571429;
|
||||
}
|
||||
|
||||
.fixed-table-pagination .pagination-info {
|
||||
line-height: 34px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.fixed-table-pagination .btn-group {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.fixed-table-pagination .dropup .dropdown-menu {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.fixed-table-pagination .page-list {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.fixed-table-toolbar .columns-left {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.fixed-table-toolbar .columns-right {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.fixed-table-toolbar .columns label {
|
||||
display: block;
|
||||
padding: 3px 20px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 1.428571429;
|
||||
}
|
||||
|
||||
.fixed-table-toolbar .bars,
|
||||
.fixed-table-toolbar .search,
|
||||
.fixed-table-toolbar .columns {
|
||||
position: relative;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 34px;
|
||||
}
|
||||
|
||||
.fixed-table-pagination li.disabled a {
|
||||
pointer-events: none;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.fixed-table-loading {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 42px;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 99;
|
||||
background-color: #fff;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.fixed-table-body .card-view .title {
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
min-width: 30%;
|
||||
text-align: left !important;
|
||||
}
|
||||
|
||||
/* support bootstrap 2 */
|
||||
.fixed-table-body thead th .th-inner {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.table th, .table td {
|
||||
vertical-align: middle;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.fixed-table-toolbar .dropdown-menu {
|
||||
text-align: left;
|
||||
max-height: 300px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.fixed-table-toolbar .btn-group > .btn-group {
|
||||
display: inline-block;
|
||||
margin-left: -1px !important;
|
||||
}
|
||||
|
||||
.fixed-table-toolbar .btn-group > .btn-group > .btn {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.fixed-table-toolbar .btn-group > .btn-group:first-child > .btn {
|
||||
border-top-left-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
|
||||
.fixed-table-toolbar .btn-group > .btn-group:last-child > .btn {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
|
||||
.bootstrap-table .table > thead > tr > th {
|
||||
vertical-align: bottom;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
/* support bootstrap 3 */
|
||||
.bootstrap-table .table thead > tr > th {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.bootstrap-table .fixed-table-footer tbody > tr > td {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.bootstrap-table .fixed-table-footer .table {
|
||||
border-bottom: none;
|
||||
border-radius: 0;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.pull-right .dropdown-menu {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
/* calculate scrollbar width */
|
||||
p.fixed-table-scroll-inner {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
div.fixed-table-scroll-outer {
|
||||
top: 0;
|
||||
left: 0;
|
||||
visibility: hidden;
|
||||
width: 200px;
|
||||
height: 150px;
|
||||
overflow: hidden;
|
||||
}
|
||||
2794
public/libs/bootstrap-table/dist/bootstrap-table.js
vendored
Normal file
1
public/libs/bootstrap-table/dist/bootstrap-table.min.css
vendored
Normal file
8
public/libs/bootstrap-table/dist/bootstrap-table.min.js
vendored
Normal file
182
public/libs/bootstrap-table/dist/extensions/accent-neutralise/bootstrap-table-accent-neutralise.js
vendored
Normal file
@@ -0,0 +1,182 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.0.0
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var diacriticsMap = {};
|
||||
var defaultAccentsDiacritics = [
|
||||
{'base':'A', 'letters':'\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F'},
|
||||
{'base':'AA','letters':'\uA732'},
|
||||
{'base':'AE','letters':'\u00C6\u01FC\u01E2'},
|
||||
{'base':'AO','letters':'\uA734'},
|
||||
{'base':'AU','letters':'\uA736'},
|
||||
{'base':'AV','letters':'\uA738\uA73A'},
|
||||
{'base':'AY','letters':'\uA73C'},
|
||||
{'base':'B', 'letters':'\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181'},
|
||||
{'base':'C', 'letters':'\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E'},
|
||||
{'base':'D', 'letters':'\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779'},
|
||||
{'base':'DZ','letters':'\u01F1\u01C4'},
|
||||
{'base':'Dz','letters':'\u01F2\u01C5'},
|
||||
{'base':'E', 'letters':'\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E'},
|
||||
{'base':'F', 'letters':'\u0046\u24BB\uFF26\u1E1E\u0191\uA77B'},
|
||||
{'base':'G', 'letters':'\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E'},
|
||||
{'base':'H', 'letters':'\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D'},
|
||||
{'base':'I', 'letters':'\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197'},
|
||||
{'base':'J', 'letters':'\u004A\u24BF\uFF2A\u0134\u0248'},
|
||||
{'base':'K', 'letters':'\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2'},
|
||||
{'base':'L', 'letters':'\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780'},
|
||||
{'base':'LJ','letters':'\u01C7'},
|
||||
{'base':'Lj','letters':'\u01C8'},
|
||||
{'base':'M', 'letters':'\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C'},
|
||||
{'base':'N', 'letters':'\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4'},
|
||||
{'base':'NJ','letters':'\u01CA'},
|
||||
{'base':'Nj','letters':'\u01CB'},
|
||||
{'base':'O', 'letters':'\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C'},
|
||||
{'base':'OI','letters':'\u01A2'},
|
||||
{'base':'OO','letters':'\uA74E'},
|
||||
{'base':'OU','letters':'\u0222'},
|
||||
{'base':'OE','letters':'\u008C\u0152'},
|
||||
{'base':'oe','letters':'\u009C\u0153'},
|
||||
{'base':'P', 'letters':'\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754'},
|
||||
{'base':'Q', 'letters':'\u0051\u24C6\uFF31\uA756\uA758\u024A'},
|
||||
{'base':'R', 'letters':'\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782'},
|
||||
{'base':'S', 'letters':'\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784'},
|
||||
{'base':'T', 'letters':'\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786'},
|
||||
{'base':'TZ','letters':'\uA728'},
|
||||
{'base':'U', 'letters':'\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244'},
|
||||
{'base':'V', 'letters':'\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245'},
|
||||
{'base':'VY','letters':'\uA760'},
|
||||
{'base':'W', 'letters':'\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72'},
|
||||
{'base':'X', 'letters':'\u0058\u24CD\uFF38\u1E8A\u1E8C'},
|
||||
{'base':'Y', 'letters':'\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE'},
|
||||
{'base':'Z', 'letters':'\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762'},
|
||||
{'base':'a', 'letters':'\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250'},
|
||||
{'base':'aa','letters':'\uA733'},
|
||||
{'base':'ae','letters':'\u00E6\u01FD\u01E3'},
|
||||
{'base':'ao','letters':'\uA735'},
|
||||
{'base':'au','letters':'\uA737'},
|
||||
{'base':'av','letters':'\uA739\uA73B'},
|
||||
{'base':'ay','letters':'\uA73D'},
|
||||
{'base':'b', 'letters':'\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253'},
|
||||
{'base':'c', 'letters':'\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184'},
|
||||
{'base':'d', 'letters':'\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A'},
|
||||
{'base':'dz','letters':'\u01F3\u01C6'},
|
||||
{'base':'e', 'letters':'\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD'},
|
||||
{'base':'f', 'letters':'\u0066\u24D5\uFF46\u1E1F\u0192\uA77C'},
|
||||
{'base':'g', 'letters':'\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F'},
|
||||
{'base':'h', 'letters':'\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265'},
|
||||
{'base':'hv','letters':'\u0195'},
|
||||
{'base':'i', 'letters':'\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131'},
|
||||
{'base':'j', 'letters':'\u006A\u24D9\uFF4A\u0135\u01F0\u0249'},
|
||||
{'base':'k', 'letters':'\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3'},
|
||||
{'base':'l', 'letters':'\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747'},
|
||||
{'base':'lj','letters':'\u01C9'},
|
||||
{'base':'m', 'letters':'\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F'},
|
||||
{'base':'n', 'letters':'\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5'},
|
||||
{'base':'nj','letters':'\u01CC'},
|
||||
{'base':'o', 'letters':'\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275'},
|
||||
{'base':'oi','letters':'\u01A3'},
|
||||
{'base':'ou','letters':'\u0223'},
|
||||
{'base':'oo','letters':'\uA74F'},
|
||||
{'base':'p','letters':'\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755'},
|
||||
{'base':'q','letters':'\u0071\u24E0\uFF51\u024B\uA757\uA759'},
|
||||
{'base':'r','letters':'\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783'},
|
||||
{'base':'s','letters':'\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B'},
|
||||
{'base':'t','letters':'\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787'},
|
||||
{'base':'tz','letters':'\uA729'},
|
||||
{'base':'u','letters': '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289'},
|
||||
{'base':'v','letters':'\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C'},
|
||||
{'base':'vy','letters':'\uA761'},
|
||||
{'base':'w','letters':'\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73'},
|
||||
{'base':'x','letters':'\u0078\u24E7\uFF58\u1E8B\u1E8D'},
|
||||
{'base':'y','letters':'\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF'},
|
||||
{'base':'z','letters':'\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763'}
|
||||
];
|
||||
|
||||
var initNeutraliser = function () {
|
||||
for (var i=0; i < defaultAccentsDiacritics.length; i++){
|
||||
var letters = defaultAccentsDiacritics[i].letters;
|
||||
for (var j=0; j < letters.length ; j++){
|
||||
diacriticsMap[letters[j]] = defaultAccentsDiacritics[i].base;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var removeDiacritics = function (str) {
|
||||
return str.replace(/[^\u0000-\u007E]/g, function(a){
|
||||
return diacriticsMap[a] || a;
|
||||
});
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
searchAccentNeutralise: false
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_init = BootstrapTable.prototype.init,
|
||||
_initSearch = BootstrapTable.prototype.initSearch;
|
||||
|
||||
BootstrapTable.prototype.init = function () {
|
||||
if (this.options.searchAccentNeutralise) {
|
||||
initNeutraliser();
|
||||
}
|
||||
_init.apply(this, Array.prototype.slice.apply(arguments));
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initSearch = function () {
|
||||
var that = this;
|
||||
|
||||
if (this.options.sidePagination !== 'server') {
|
||||
var s = this.searchText && this.searchText.toLowerCase();
|
||||
var f = $.isEmptyObject(this.filterColumns) ? null : this.filterColumns;
|
||||
|
||||
// Check filter
|
||||
this.data = f ? $.grep(this.options.data, function (item, i) {
|
||||
for (var key in f) {
|
||||
if (item[key] !== f[key]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}) : this.options.data;
|
||||
|
||||
this.data = s ? $.grep(this.data, function (item, i) {
|
||||
for (var key in item) {
|
||||
key = $.isNumeric(key) ? parseInt(key, 10) : key;
|
||||
var value = item[key],
|
||||
column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, key)],
|
||||
j = $.inArray(key, that.header.fields);
|
||||
|
||||
if (column && column.searchFormatter) {
|
||||
value = $.fn.bootstrapTable.utils.calculateObjectValue(column,
|
||||
that.header.formatters[j], [value, item, i], value);
|
||||
}
|
||||
|
||||
var index = $.inArray(key, that.header.fields);
|
||||
if (index !== -1 && that.header.searchables[index] && (typeof value === 'string' || typeof value === 'number')) {
|
||||
if (that.options.searchAccentNeutralise) {
|
||||
value = removeDiacritics(value);
|
||||
s = removeDiacritics(s);
|
||||
}
|
||||
if (that.options.strictSearch) {
|
||||
if ((value + '').toLowerCase() === s) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if ((value + '').toLowerCase().indexOf(s) !== -1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}) : this.data;
|
||||
}
|
||||
};
|
||||
|
||||
}(jQuery);
|
||||
105
public/libs/bootstrap-table/dist/extensions/angular/bootstrap-table-angular.js
vendored
Normal file
@@ -0,0 +1,105 @@
|
||||
// JavaScript source code
|
||||
(function () {
|
||||
if (typeof angular === 'undefined') {
|
||||
return;
|
||||
}
|
||||
angular.module('bsTable', []).directive('bsTableControl', function () {
|
||||
var CONTAINER_SELECTOR = '.bootstrap-table';
|
||||
var SCROLLABLE_SELECTOR = '.fixed-table-body';
|
||||
var SEARCH_SELECTOR = '.search input';
|
||||
var bsTables = {};
|
||||
function getBsTable (el) {
|
||||
var result;
|
||||
$.each(bsTables, function (id, bsTable) {
|
||||
if (!bsTable.$el.closest(CONTAINER_SELECTOR).has(el).length) return;
|
||||
result = bsTable;
|
||||
return true;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
$(window).resize(function () {
|
||||
$.each(bsTables, function (id, bsTable) {
|
||||
bsTable.$el.bootstrapTable('resetView');
|
||||
});
|
||||
});
|
||||
function onScroll () {
|
||||
var bsTable = this;
|
||||
var state = bsTable.$s.bsTableControl.state;
|
||||
bsTable.$s.$applyAsync(function () {
|
||||
state.scroll = bsTable.$el.bootstrapTable('getScrollPosition');
|
||||
});
|
||||
}
|
||||
$(document)
|
||||
.on('post-header.bs.table', CONTAINER_SELECTOR+' table', function (evt) { // bootstrap-table calls .off('scroll') in initHeader so reattach here
|
||||
var bsTable = getBsTable(evt.target);
|
||||
if (!bsTable) return;
|
||||
bsTable.$el
|
||||
.closest(CONTAINER_SELECTOR)
|
||||
.find(SCROLLABLE_SELECTOR)
|
||||
.on('scroll', onScroll.bind(bsTable));
|
||||
})
|
||||
.on('sort.bs.table', CONTAINER_SELECTOR+' table', function (evt, sortName, sortOrder) {
|
||||
var bsTable = getBsTable(evt.target);
|
||||
if (!bsTable) return;
|
||||
var state = bsTable.$s.bsTableControl.state;
|
||||
bsTable.$s.$applyAsync(function () {
|
||||
state.sortName = sortName;
|
||||
state.sortOrder = sortOrder;
|
||||
});
|
||||
})
|
||||
.on('page-change.bs.table', CONTAINER_SELECTOR+' table', function (evt, pageNumber, pageSize) {
|
||||
var bsTable = getBsTable(evt.target);
|
||||
if (!bsTable) return;
|
||||
var state = bsTable.$s.bsTableControl.state;
|
||||
bsTable.$s.$applyAsync(function () {
|
||||
state.pageNumber = pageNumber;
|
||||
state.pageSize = pageSize;
|
||||
});
|
||||
})
|
||||
.on('search.bs.table', CONTAINER_SELECTOR+' table', function (evt, searchText) {
|
||||
var bsTable = getBsTable(evt.target);
|
||||
if (!bsTable) return;
|
||||
var state = bsTable.$s.bsTableControl.state;
|
||||
bsTable.$s.$applyAsync(function () {
|
||||
state.searchText = searchText;
|
||||
});
|
||||
})
|
||||
.on('focus blur', CONTAINER_SELECTOR+' '+SEARCH_SELECTOR, function (evt) {
|
||||
var bsTable = getBsTable(evt.target);
|
||||
if (!bsTable) return;
|
||||
var state = bsTable.$s.bsTableControl.state;
|
||||
bsTable.$s.$applyAsync(function () {
|
||||
state.searchHasFocus = $(evt.target).is(':focus');
|
||||
});
|
||||
});
|
||||
|
||||
return {
|
||||
restrict: 'EA',
|
||||
scope: {bsTableControl: '='},
|
||||
link: function ($s, $el) {
|
||||
var bsTable = bsTables[$s.$id] = {$s: $s, $el: $el};
|
||||
$s.instantiated = false;
|
||||
$s.$watch('bsTableControl.options', function (options) {
|
||||
if (!options) options = $s.bsTableControl.options = {};
|
||||
var state = $s.bsTableControl.state || {};
|
||||
|
||||
if ($s.instantiated) $el.bootstrapTable('destroy');
|
||||
$el.bootstrapTable(angular.extend(angular.copy(options), state));
|
||||
$s.instantiated = true;
|
||||
|
||||
// Update the UI for state that isn't settable via options
|
||||
if ('scroll' in state) $el.bootstrapTable('scrollTo', state.scroll);
|
||||
if ('searchHasFocus' in state) $el.closest(CONTAINER_SELECTOR).find(SEARCH_SELECTOR).focus(); // $el gets detached so have to recompute whole chain
|
||||
}, true);
|
||||
$s.$watch('bsTableControl.state', function (state) {
|
||||
if (!state) state = $s.bsTableControl.state = {};
|
||||
$el.trigger('directive-updated.bs.table', [state]);
|
||||
}, true);
|
||||
$s.$on('$destroy', function () {
|
||||
delete bsTables[$s.$id];
|
||||
});
|
||||
}
|
||||
};
|
||||
})
|
||||
})();
|
||||
7
public/libs/bootstrap-table/dist/extensions/angular/bootstrap-table-angular.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(){"undefined"!=typeof angular&&angular.module("bsTable",[]).directive("bsTableControl",function(){function a(a){var b;return $.each(f,function(d,e){return e.$el.closest(c).has(a).length?(b=e,!0):void 0}),b}function b(){var a=this,b=a.$s.bsTableControl.state;a.$s.$applyAsync(function(){b.scroll=a.$el.bootstrapTable("getScrollPosition")})}var c=".bootstrap-table",d=".fixed-table-body",e=".search input",f={};return $(window).resize(function(){$.each(f,function(a,b){b.$el.bootstrapTable("resetView")})}),$(document).on("post-header.bs.table",c+" table",function(e){var f=a(e.target);f&&f.$el.closest(c).find(d).on("scroll",b.bind(f))}).on("sort.bs.table",c+" table",function(b,c,d){var e=a(b.target);if(e){var f=e.$s.bsTableControl.state;e.$s.$applyAsync(function(){f.sortName=c,f.sortOrder=d})}}).on("page-change.bs.table",c+" table",function(b,c,d){var e=a(b.target);if(e){var f=e.$s.bsTableControl.state;e.$s.$applyAsync(function(){f.pageNumber=c,f.pageSize=d})}}).on("search.bs.table",c+" table",function(b,c){var d=a(b.target);if(d){var e=d.$s.bsTableControl.state;d.$s.$applyAsync(function(){e.searchText=c})}}).on("focus blur",c+" "+e,function(b){var c=a(b.target);if(c){var d=c.$s.bsTableControl.state;c.$s.$applyAsync(function(){d.searchHasFocus=$(b.target).is(":focus")})}}),{restrict:"EA",scope:{bsTableControl:"="},link:function(a,b){f[a.$id]={$s:a,$el:b};a.instantiated=!1,a.$watch("bsTableControl.options",function(d){d||(d=a.bsTableControl.options={});var f=a.bsTableControl.state||{};a.instantiated&&b.bootstrapTable("destroy"),b.bootstrapTable(angular.extend(angular.copy(d),f)),a.instantiated=!0,"scroll"in f&&b.bootstrapTable("scrollTo",f.scroll),"searchHasFocus"in f&&b.closest(c).find(e).focus()},!0),a.$watch("bsTableControl.state",function(c){c||(c=a.bsTableControl.state={}),b.trigger("directive-updated.bs.table",[c])},!0),a.$on("$destroy",function(){delete f[a.$id]})}}})}();
|
||||
335
public/libs/bootstrap-table/dist/extensions/cookie/bootstrap-table-cookie.js
vendored
Normal file
@@ -0,0 +1,335 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.2.0
|
||||
*
|
||||
* @update zhixin wen <wenzhixin2010@gmail.com>
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
var cookieIds = {
|
||||
sortOrder: 'bs.table.sortOrder',
|
||||
sortName: 'bs.table.sortName',
|
||||
pageNumber: 'bs.table.pageNumber',
|
||||
pageList: 'bs.table.pageList',
|
||||
columns: 'bs.table.columns',
|
||||
searchText: 'bs.table.searchText',
|
||||
filterControl: 'bs.table.filterControl'
|
||||
};
|
||||
|
||||
var getCurrentHeader = function (that) {
|
||||
var header = that.$header;
|
||||
if (that.options.height) {
|
||||
header = that.$tableHeader;
|
||||
}
|
||||
|
||||
return header;
|
||||
};
|
||||
|
||||
var getCurrentSearchControls = function (that) {
|
||||
var searchControls = 'select, input';
|
||||
if (that.options.height) {
|
||||
searchControls = 'table select, table input';
|
||||
}
|
||||
|
||||
return searchControls;
|
||||
};
|
||||
|
||||
var cookieEnabled = function () {
|
||||
return !!(navigator.cookieEnabled);
|
||||
};
|
||||
|
||||
var inArrayCookiesEnabled = function (cookieName, cookiesEnabled) {
|
||||
var index = -1;
|
||||
|
||||
for (var i = 0; i < cookiesEnabled.length; i++) {
|
||||
if (cookieName.toLowerCase() === cookiesEnabled[i].toLowerCase()) {
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return index;
|
||||
};
|
||||
|
||||
var setCookie = function (that, cookieName, cookieValue) {
|
||||
if ((!that.options.cookie) || (!cookieEnabled()) || (that.options.cookieIdTable === '')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (inArrayCookiesEnabled(cookieName, that.options.cookiesEnabled) === -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
cookieName = that.options.cookieIdTable + '.' + cookieName;
|
||||
if (!cookieName || /^(?:expires|max\-age|path|domain|secure)$/i.test(cookieName)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
document.cookie = encodeURIComponent(cookieName) + '=' + encodeURIComponent(cookieValue) + calculateExpiration(that.options.cookieExpire) + (that.options.cookieDomain ? '; domain=' + that.options.cookieDomain : '') + (that.options.cookiePath ? '; path=' + that.options.cookiePath : '') + (that.cookieSecure ? '; secure' : '');
|
||||
return true;
|
||||
};
|
||||
|
||||
var getCookie = function (that, tableName, cookieName) {
|
||||
if (!cookieName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (inArrayCookiesEnabled(cookieName, that.options.cookiesEnabled) === -1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
cookieName = tableName + '.' + cookieName;
|
||||
|
||||
return decodeURIComponent(document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + encodeURIComponent(cookieName).replace(/[\-\.\+\*]/g, '\\$&') + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1')) || null;
|
||||
};
|
||||
|
||||
var hasCookie = function (cookieName) {
|
||||
if (!cookieName) {
|
||||
return false;
|
||||
}
|
||||
return (new RegExp('(?:^|;\\s*)' + encodeURIComponent(cookieName).replace(/[\-\.\+\*]/g, '\\$&') + '\\s*\\=')).test(document.cookie);
|
||||
};
|
||||
|
||||
var deleteCookie = function (tableName, cookieName, sPath, sDomain) {
|
||||
cookieName = tableName + '.' + cookieName;
|
||||
if (!hasCookie(cookieName)) {
|
||||
return false;
|
||||
}
|
||||
document.cookie = encodeURIComponent(cookieName) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' + (sDomain ? '; domain=' + sDomain : '') + (sPath ? '; path=' + sPath : '');
|
||||
return true;
|
||||
};
|
||||
|
||||
var calculateExpiration = function(cookieExpire) {
|
||||
var time = cookieExpire.replace(/[0-9]*/, ''); //s,mi,h,d,m,y
|
||||
cookieExpire = cookieExpire.replace(/[A-Za-z]/, ''); //number
|
||||
|
||||
switch (time.toLowerCase()) {
|
||||
case 's':
|
||||
cookieExpire = +cookieExpire;
|
||||
break;
|
||||
case 'mi':
|
||||
cookieExpire = cookieExpire * 60;
|
||||
break;
|
||||
case 'h':
|
||||
cookieExpire = cookieExpire * 60 * 60;
|
||||
break;
|
||||
case 'd':
|
||||
cookieExpire = cookieExpire * 24 * 60 * 60;
|
||||
break;
|
||||
case 'm':
|
||||
cookieExpire = cookieExpire * 30 * 24 * 60 * 60;
|
||||
break;
|
||||
case 'y':
|
||||
cookieExpire = cookieExpire * 365 * 24 * 60 * 60;
|
||||
break;
|
||||
default:
|
||||
cookieExpire = undefined;
|
||||
break;
|
||||
}
|
||||
|
||||
return cookieExpire === undefined ? '' : '; max-age=' + cookieExpire;
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
cookie: false,
|
||||
cookieExpire: '2h',
|
||||
cookiePath: null,
|
||||
cookieDomain: null,
|
||||
cookieSecure: null,
|
||||
cookieIdTable: '',
|
||||
cookiesEnabled: ['bs.table.sortOrder', 'bs.table.sortName', 'bs.table.pageNumber', 'bs.table.pageList', 'bs.table.columns', 'bs.table.searchText', 'bs.table.filterControl'],
|
||||
//internal variable
|
||||
filterControls: [],
|
||||
filterControlValuesLoaded: false
|
||||
});
|
||||
|
||||
$.fn.bootstrapTable.methods.push('deleteCookie');
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_init = BootstrapTable.prototype.init,
|
||||
_initTable = BootstrapTable.prototype.initTable,
|
||||
_onSort = BootstrapTable.prototype.onSort,
|
||||
_onPageNumber = BootstrapTable.prototype.onPageNumber,
|
||||
_onPageListChange = BootstrapTable.prototype.onPageListChange,
|
||||
_onPageFirst = BootstrapTable.prototype.onPageFirst,
|
||||
_onPagePre = BootstrapTable.prototype.onPagePre,
|
||||
_onPageNext = BootstrapTable.prototype.onPageNext,
|
||||
_onPageLast = BootstrapTable.prototype.onPageLast,
|
||||
_toggleColumn = BootstrapTable.prototype.toggleColumn,
|
||||
_selectPage = BootstrapTable.prototype.selectPage,
|
||||
_onSearch = BootstrapTable.prototype.onSearch;
|
||||
|
||||
BootstrapTable.prototype.init = function () {
|
||||
var timeoutId = 0;
|
||||
this.options.filterControls = [];
|
||||
this.options.filterControlValuesLoaded = false;
|
||||
|
||||
|
||||
this.options.cookiesEnabled = typeof this.options.cookiesEnabled === 'string' ?
|
||||
this.options.cookiesEnabled.replace('[', '').replace(']', '').replace(/ /g, '').toLowerCase().split(',') : this.options.cookiesEnabled;
|
||||
|
||||
if (this.options.filterControl) {
|
||||
var that = this;
|
||||
this.$el.on('column-search.bs.table', function (e, field, text) {
|
||||
var isNewField = true;
|
||||
|
||||
for (var i = 0; i < that.options.filterControls.length; i++) {
|
||||
if (that.options.filterControls[i].field === field) {
|
||||
that.options.filterControls[i].text = text;
|
||||
isNewField = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isNewField) {
|
||||
that.options.filterControls.push({
|
||||
field: field,
|
||||
text: text
|
||||
});
|
||||
}
|
||||
|
||||
setCookie(that, cookieIds.filterControl, JSON.stringify(that.options.filterControls));
|
||||
}).on('post-body.bs.table', function () {
|
||||
setTimeout(function () {
|
||||
if (!that.options.filterControlValuesLoaded) {
|
||||
that.options.filterControlValuesLoaded = true;
|
||||
var filterControl = JSON.parse(getCookie(that, that.options.cookieIdTable, cookieIds.filterControl));
|
||||
if (filterControl) {
|
||||
var field = null,
|
||||
result = [],
|
||||
header = getCurrentHeader(that),
|
||||
searchControls = getCurrentSearchControls(that);
|
||||
|
||||
header.find(searchControls).each(function (index, ele) {
|
||||
field = $(this).closest('[data-field]').data('field');
|
||||
result = $.grep(filterControl, function (valueObj) {
|
||||
return valueObj.field === field;
|
||||
});
|
||||
|
||||
if (result.length > 0) {
|
||||
$(this).val(result[0].text);
|
||||
that.onColumnSearch({currentTarget: $(this)});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}, 250);
|
||||
});
|
||||
}
|
||||
_init.apply(this, Array.prototype.slice.apply(arguments));
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initTable = function () {
|
||||
_initTable.apply(this, Array.prototype.slice.apply(arguments));
|
||||
this.initCookie();
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initCookie = function () {
|
||||
if (!this.options.cookie) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((this.options.cookieIdTable === '') || (this.options.cookieExpire === '') || (!cookieEnabled())) {
|
||||
throw new Error("Configuration error. Please review the cookieIdTable, cookieExpire properties, if those properties are ok, then this browser does not support the cookies");
|
||||
return;
|
||||
}
|
||||
|
||||
var sortOrderCookie = getCookie(this, this.options.cookieIdTable, cookieIds.sortOrder),
|
||||
sortOrderNameCookie = getCookie(this, this.options.cookieIdTable, cookieIds.sortName),
|
||||
pageNumberCookie = getCookie(this, this.options.cookieIdTable, cookieIds.pageNumber),
|
||||
pageListCookie = getCookie(this, this.options.cookieIdTable, cookieIds.pageList),
|
||||
columnsCookie = JSON.parse(getCookie(this, this.options.cookieIdTable, cookieIds.columns)),
|
||||
searchTextCookie = getCookie(this, this.options.cookieIdTable, cookieIds.searchText);
|
||||
|
||||
//sortOrder
|
||||
this.options.sortOrder = sortOrderCookie ? sortOrderCookie : this.options.sortOrder;
|
||||
//sortName
|
||||
this.options.sortName = sortOrderNameCookie ? sortOrderNameCookie : this.options.sortName;
|
||||
//pageNumber
|
||||
this.options.pageNumber = pageNumberCookie ? +pageNumberCookie : this.options.pageNumber;
|
||||
//pageSize
|
||||
this.options.pageSize = pageListCookie ? pageListCookie === this.options.formatAllRows() ? pageListCookie : +pageListCookie : this.options.pageSize;
|
||||
//searchText
|
||||
this.options.searchText = searchTextCookie ? searchTextCookie : '';
|
||||
|
||||
if (columnsCookie) {
|
||||
$.each(this.columns, function (i, column) {
|
||||
column.visible = $.inArray(column.field, columnsCookie) !== -1;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onSort = function () {
|
||||
_onSort.apply(this, Array.prototype.slice.apply(arguments));
|
||||
setCookie(this, cookieIds.sortOrder, this.options.sortOrder);
|
||||
setCookie(this, cookieIds.sortName, this.options.sortName);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onPageNumber = function () {
|
||||
_onPageNumber.apply(this, Array.prototype.slice.apply(arguments));
|
||||
setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onPageListChange = function () {
|
||||
_onPageListChange.apply(this, Array.prototype.slice.apply(arguments));
|
||||
setCookie(this, cookieIds.pageList, this.options.pageSize);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onPageFirst = function () {
|
||||
_onPageFirst.apply(this, Array.prototype.slice.apply(arguments));
|
||||
setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onPagePre = function () {
|
||||
_onPagePre.apply(this, Array.prototype.slice.apply(arguments));
|
||||
setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onPageNext = function () {
|
||||
_onPageNext.apply(this, Array.prototype.slice.apply(arguments));
|
||||
setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onPageLast = function () {
|
||||
_onPageLast.apply(this, Array.prototype.slice.apply(arguments));
|
||||
setCookie(this, cookieIds.pageNumber, this.options.pageNumber);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.toggleColumn = function () {
|
||||
_toggleColumn.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
var visibleColumns = [];
|
||||
|
||||
$.each(this.columns, function (i, column) {
|
||||
if (column.visible) {
|
||||
visibleColumns.push(column.field);
|
||||
}
|
||||
});
|
||||
|
||||
setCookie(this, cookieIds.columns, JSON.stringify(visibleColumns));
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.selectPage = function (page) {
|
||||
_selectPage.apply(this, Array.prototype.slice.apply(arguments));
|
||||
setCookie(this, cookieIds.pageNumber, page);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onSearch = function () {
|
||||
var target = Array.prototype.slice.apply(arguments);
|
||||
_onSearch.apply(this, target);
|
||||
|
||||
if ($(target[0].currentTarget).parent().hasClass('search')) {
|
||||
setCookie(this, cookieIds.searchText, this.searchText);
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.deleteCookie = function (cookieName) {
|
||||
if ((cookieName === '') || (!cookieEnabled())) {
|
||||
return;
|
||||
}
|
||||
|
||||
deleteCookie(this.options.cookieIdTable, cookieIds[cookieName], this.options.cookiePath, this.options.cookieDomain);
|
||||
};
|
||||
})(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/cookie/bootstrap-table-cookie.min.js
vendored
Normal file
128
public/libs/bootstrap-table/dist/extensions/editable/bootstrap-table-editable.js
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
/**
|
||||
* @author zhixin wen <wenzhixin2010@gmail.com>
|
||||
* extensions: https://github.com/vitalets/x-editable
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
editable: true,
|
||||
onEditableInit: function () {
|
||||
return false;
|
||||
},
|
||||
onEditableSave: function (field, row, oldValue, $el) {
|
||||
return false;
|
||||
},
|
||||
onEditableShown: function (field, row, $el, editable) {
|
||||
return false;
|
||||
},
|
||||
onEditableHidden: function (field, row, $el, reason) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
|
||||
'editable-init.bs.table': 'onEditableInit',
|
||||
'editable-save.bs.table': 'onEditableSave',
|
||||
'editable-shown.bs.table': 'onEditableShown',
|
||||
'editable-hidden.bs.table': 'onEditableHidden'
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_initTable = BootstrapTable.prototype.initTable,
|
||||
_initBody = BootstrapTable.prototype.initBody;
|
||||
|
||||
BootstrapTable.prototype.initTable = function () {
|
||||
var that = this;
|
||||
_initTable.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
$.each(this.columns, function (i, column) {
|
||||
if (!column.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
var editableOptions = {}, editableDataMarkup = [], editableDataPrefix = 'editable-';
|
||||
|
||||
var processDataOptions = function(key, value) {
|
||||
// Replace camel case with dashes.
|
||||
var dashKey = key.replace(/([A-Z])/g, function($1){return "-"+$1.toLowerCase();});
|
||||
if (dashKey.slice(0, editableDataPrefix.length) == editableDataPrefix) {
|
||||
var dataKey = dashKey.replace(editableDataPrefix, 'data-');
|
||||
editableOptions[dataKey] = value;
|
||||
}
|
||||
};
|
||||
|
||||
$.each(that.options, processDataOptions);
|
||||
|
||||
var _formatter = column.formatter;
|
||||
column.formatter = function (value, row, index) {
|
||||
var result = _formatter ? _formatter(value, row, index) : value;
|
||||
|
||||
$.each(column, processDataOptions);
|
||||
|
||||
$.each(editableOptions, function (key, value) {
|
||||
editableDataMarkup.push(' ' + key + '="' + value + '"');
|
||||
});
|
||||
|
||||
return ['<a href="javascript:void(0)"',
|
||||
' data-name="' + column.field + '"',
|
||||
' data-pk="' + row[that.options.idField] + '"',
|
||||
' data-value="' + result + '"',
|
||||
editableDataMarkup.join(''),
|
||||
'>' + '</a>'
|
||||
].join('');
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initBody = function () {
|
||||
var that = this;
|
||||
_initBody.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
$.each(this.columns, function (i, column) {
|
||||
if (!column.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable)
|
||||
.off('save').on('save', function (e, params) {
|
||||
var data = that.getData(),
|
||||
index = $(this).parents('tr[data-index]').data('index'),
|
||||
row = data[index],
|
||||
oldValue = row[column.field];
|
||||
|
||||
$(this).data('value', params.submitValue);
|
||||
row[column.field] = params.submitValue;
|
||||
that.trigger('editable-save', column.field, row, oldValue, $(this));
|
||||
});
|
||||
that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable)
|
||||
.off('shown').on('shown', function (e, editable) {
|
||||
var data = that.getData(),
|
||||
index = $(this).parents('tr[data-index]').data('index'),
|
||||
row = data[index];
|
||||
|
||||
that.trigger('editable-shown', column.field, row, $(this), editable);
|
||||
});
|
||||
that.$body.find('a[data-name="' + column.field + '"]').editable(column.editable)
|
||||
.off('hidden').on('hidden', function (e, reason) {
|
||||
var data = that.getData(),
|
||||
index = $(this).parents('tr[data-index]').data('index'),
|
||||
row = data[index];
|
||||
|
||||
that.trigger('editable-hidden', column.field, row, $(this), reason);
|
||||
});
|
||||
});
|
||||
this.trigger('editable-init');
|
||||
};
|
||||
|
||||
}(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/editable/bootstrap-table-editable.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";a.extend(a.fn.bootstrapTable.defaults,{editable:!0,onEditableInit:function(){return!1},onEditableSave:function(){return!1},onEditableShown:function(){return!1},onEditableHidden:function(){return!1}}),a.extend(a.fn.bootstrapTable.Constructor.EVENTS,{"editable-init.bs.table":"onEditableInit","editable-save.bs.table":"onEditableSave","editable-shown.bs.table":"onEditableShown","editable-hidden.bs.table":"onEditableHidden"});var b=a.fn.bootstrapTable.Constructor,c=b.prototype.initTable,d=b.prototype.initBody;b.prototype.initTable=function(){var b=this;c.apply(this,Array.prototype.slice.apply(arguments)),this.options.editable&&a.each(this.columns,function(c,d){if(d.editable){var e={},f=[],g="editable-",h=function(a,b){var c=a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()});if(c.slice(0,g.length)==g){var d=c.replace(g,"data-");e[d]=b}};a.each(b.options,h);var i=d.formatter;d.formatter=function(c,g,j){var k=i?i(c,g,j):c;return a.each(d,h),a.each(e,function(a,b){f.push(" "+a+'="'+b+'"')}),['<a href="javascript:void(0)"',' data-name="'+d.field+'"',' data-pk="'+g[b.options.idField]+'"',' data-value="'+k+'"',f.join(""),"></a>"].join("")}}})},b.prototype.initBody=function(){var b=this;d.apply(this,Array.prototype.slice.apply(arguments)),this.options.editable&&(a.each(this.columns,function(c,d){d.editable&&(b.$body.find('a[data-name="'+d.field+'"]').editable(d.editable).off("save").on("save",function(c,e){var f=b.getData(),g=a(this).parents("tr[data-index]").data("index"),h=f[g],i=h[d.field];a(this).data("value",e.submitValue),h[d.field]=e.submitValue,b.trigger("editable-save",d.field,h,i,a(this))}),b.$body.find('a[data-name="'+d.field+'"]').editable(d.editable).off("shown").on("shown",function(c,e){var f=b.getData(),g=a(this).parents("tr[data-index]").data("index"),h=f[g];b.trigger("editable-shown",d.field,h,a(this),e)}),b.$body.find('a[data-name="'+d.field+'"]').editable(d.editable).off("hidden").on("hidden",function(c,e){var f=b.getData(),g=a(this).parents("tr[data-index]").data("index"),h=f[g];b.trigger("editable-hidden",d.field,h,a(this),e)}))}),this.trigger("editable-init"))}}(jQuery);
|
||||
112
public/libs/bootstrap-table/dist/extensions/export/bootstrap-table-export.js
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
/**
|
||||
* @author zhixin wen <wenzhixin2010@gmail.com>
|
||||
* extensions: https://github.com/kayalshri/tableExport.jquery.plugin
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
'use strict';
|
||||
var sprintf = $.fn.bootstrapTable.utils.sprintf;
|
||||
|
||||
var TYPE_NAME = {
|
||||
json: 'JSON',
|
||||
xml: 'XML',
|
||||
png: 'PNG',
|
||||
csv: 'CSV',
|
||||
txt: 'TXT',
|
||||
sql: 'SQL',
|
||||
doc: 'MS-Word',
|
||||
excel: 'MS-Excel',
|
||||
powerpoint: 'MS-Powerpoint',
|
||||
pdf: 'PDF'
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
showExport: false,
|
||||
exportDataType: 'basic', // basic, all, selected
|
||||
// 'json', 'xml', 'png', 'csv', 'txt', 'sql', 'doc', 'excel', 'powerpoint', 'pdf'
|
||||
exportTypes: ['json', 'xml', 'csv', 'txt', 'sql', 'excel'],
|
||||
exportOptions: {}
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults.icons, {
|
||||
export: 'glyphicon-export icon-share'
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_initToolbar = BootstrapTable.prototype.initToolbar;
|
||||
|
||||
BootstrapTable.prototype.initToolbar = function () {
|
||||
this.showToolbar = this.options.showExport;
|
||||
|
||||
_initToolbar.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (this.options.showExport) {
|
||||
var that = this,
|
||||
$btnGroup = this.$toolbar.find('>.btn-group'),
|
||||
$export = $btnGroup.find('div.export');
|
||||
|
||||
if (!$export.length) {
|
||||
$export = $([
|
||||
'<div class="export btn-group">',
|
||||
'<button class="btn btn-default' +
|
||||
sprintf(' btn-%s', this.options.iconSize) +
|
||||
' dropdown-toggle" ' +
|
||||
'data-toggle="dropdown" type="button">',
|
||||
sprintf('<i class="%s %s"></i> ', this.options.iconsPrefix, this.options.icons.export),
|
||||
'<span class="caret"></span>',
|
||||
'</button>',
|
||||
'<ul class="dropdown-menu" role="menu">',
|
||||
'</ul>',
|
||||
'</div>'].join('')).appendTo($btnGroup);
|
||||
|
||||
var $menu = $export.find('.dropdown-menu'),
|
||||
exportTypes = this.options.exportTypes;
|
||||
|
||||
if (typeof this.options.exportTypes === 'string') {
|
||||
var types = this.options.exportTypes.slice(1, -1).replace(/ /g, '').split(',');
|
||||
|
||||
exportTypes = [];
|
||||
$.each(types, function (i, value) {
|
||||
exportTypes.push(value.slice(1, -1));
|
||||
});
|
||||
}
|
||||
$.each(exportTypes, function (i, type) {
|
||||
if (TYPE_NAME.hasOwnProperty(type)) {
|
||||
$menu.append(['<li data-type="' + type + '">',
|
||||
'<a href="javascript:void(0)">',
|
||||
TYPE_NAME[type],
|
||||
'</a>',
|
||||
'</li>'].join(''));
|
||||
}
|
||||
});
|
||||
|
||||
$menu.find('li').click(function () {
|
||||
var type = $(this).data('type'),
|
||||
doExport = function () {
|
||||
that.$el.tableExport($.extend({}, that.options.exportOptions, {
|
||||
type: type,
|
||||
escape: false
|
||||
}));
|
||||
};
|
||||
|
||||
if (that.options.exportDataType === 'all' && that.options.pagination) {
|
||||
that.$el.one('load-success.bs.table page-change.bs.table', function () {
|
||||
doExport();
|
||||
that.togglePagination();
|
||||
});
|
||||
that.togglePagination();
|
||||
} else if (that.options.exportDataType === 'selected') {
|
||||
var data = that.getData(),
|
||||
selectedData = that.getAllSelections();
|
||||
|
||||
that.load(selectedData);
|
||||
doExport();
|
||||
that.load(data);
|
||||
} else {
|
||||
doExport();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/export/bootstrap-table-export.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";var b=a.fn.bootstrapTable.utils.sprintf,c={json:"JSON",xml:"XML",png:"PNG",csv:"CSV",txt:"TXT",sql:"SQL",doc:"MS-Word",excel:"MS-Excel",powerpoint:"MS-Powerpoint",pdf:"PDF"};a.extend(a.fn.bootstrapTable.defaults,{showExport:!1,exportDataType:"basic",exportTypes:["json","xml","csv","txt","sql","excel"],exportOptions:{}}),a.extend(a.fn.bootstrapTable.defaults.icons,{"export":"glyphicon-export icon-share"});var d=a.fn.bootstrapTable.Constructor,e=d.prototype.initToolbar;d.prototype.initToolbar=function(){if(this.showToolbar=this.options.showExport,e.apply(this,Array.prototype.slice.apply(arguments)),this.options.showExport){var d=this,f=this.$toolbar.find(">.btn-group"),g=f.find("div.export");if(!g.length){g=a(['<div class="export btn-group">','<button class="btn btn-default'+b(" btn-%s",this.options.iconSize)+' dropdown-toggle" data-toggle="dropdown" type="button">',b('<i class="%s %s"></i> ',this.options.iconsPrefix,this.options.icons["export"]),'<span class="caret"></span>',"</button>",'<ul class="dropdown-menu" role="menu">',"</ul>","</div>"].join("")).appendTo(f);var h=g.find(".dropdown-menu"),i=this.options.exportTypes;if("string"==typeof this.options.exportTypes){var j=this.options.exportTypes.slice(1,-1).replace(/ /g,"").split(",");i=[],a.each(j,function(a,b){i.push(b.slice(1,-1))})}a.each(i,function(a,b){c.hasOwnProperty(b)&&h.append(['<li data-type="'+b+'">','<a href="javascript:void(0)">',c[b],"</a>","</li>"].join(""))}),h.find("li").click(function(){var b=a(this).data("type"),c=function(){d.$el.tableExport(a.extend({},d.options.exportOptions,{type:b,escape:!1}))};if("all"===d.options.exportDataType&&d.options.pagination)d.$el.one("load-success.bs.table page-change.bs.table",function(){c(),d.togglePagination()}),d.togglePagination();else if("selected"===d.options.exportDataType){var e=d.getData(),f=d.getAllSelections();d.load(f),c(),d.load(e)}else c()})}}}}(jQuery);
|
||||
520
public/libs/bootstrap-table/dist/extensions/filter-control/bootstrap-table-filter-control.js
vendored
Normal file
@@ -0,0 +1,520 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.0.0
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var sprintf = $.fn.bootstrapTable.utils.sprintf;
|
||||
|
||||
var addOptionToSelectControl = function (selectControl, value, text) {
|
||||
value = $.trim(value);
|
||||
selectControl = $(selectControl.get(selectControl.length - 1));
|
||||
if (existOptionInSelectControl(selectControl, value)) {
|
||||
selectControl.append($("<option></option>")
|
||||
.attr("value", value)
|
||||
.text($('<div />').html(text).text()));
|
||||
|
||||
// Sort it. Not overly efficient to do this here
|
||||
var $opts = selectControl.find('option:gt(0)');
|
||||
$opts.sort(function (a, b) {
|
||||
a = $(a).text().toLowerCase();
|
||||
b = $(b).text().toLowerCase();
|
||||
if ($.isNumeric(a) && $.isNumeric(b)) {
|
||||
// Convert numerical values from string to float.
|
||||
a = parseFloat(a);
|
||||
b = parseFloat(b);
|
||||
}
|
||||
return a > b ? 1 : a < b ? -1 : 0;
|
||||
});
|
||||
|
||||
selectControl.find('option:gt(0)').remove();
|
||||
selectControl.append($opts);
|
||||
}
|
||||
};
|
||||
|
||||
var existOptionInSelectControl = function (selectControl, value) {
|
||||
var options = selectControl.get(selectControl.length - 1).options;
|
||||
for (var i = 0; i < options.length; i++) {
|
||||
if (options[i].value === value.toString()) {
|
||||
//The value is not valid to add
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//If we get here, the value is valid to add
|
||||
return true;
|
||||
};
|
||||
|
||||
var fixHeaderCSS = function (that) {
|
||||
that.$tableHeader.css('height', '77px');
|
||||
};
|
||||
|
||||
var getCurrentHeader = function (that) {
|
||||
var header = that.$header;
|
||||
if (that.options.height) {
|
||||
header = that.$tableHeader;
|
||||
}
|
||||
|
||||
return header;
|
||||
};
|
||||
|
||||
var getCurrentSearchControls = function (that) {
|
||||
var searchControls = 'select, input';
|
||||
if (that.options.height) {
|
||||
searchControls = 'table select, table input';
|
||||
}
|
||||
|
||||
return searchControls;
|
||||
};
|
||||
|
||||
var copyValues = function (that) {
|
||||
var header = getCurrentHeader(that),
|
||||
searchControls = getCurrentSearchControls(that);
|
||||
|
||||
that.options.valuesFilterControl = [];
|
||||
|
||||
header.find(searchControls).each(function () {
|
||||
that.options.valuesFilterControl.push(
|
||||
{
|
||||
field: $(this).closest('[data-field]').data('field'),
|
||||
value: $(this).val()
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var setValues = function(that) {
|
||||
var field = null,
|
||||
result = [],
|
||||
header = getCurrentHeader(that),
|
||||
searchControls = getCurrentSearchControls(that);
|
||||
|
||||
if (that.options.valuesFilterControl.length > 0) {
|
||||
header.find(searchControls).each(function (index, ele) {
|
||||
field = $(this).closest('[data-field]').data('field');
|
||||
result = $.grep(that.options.valuesFilterControl, function (valueObj) {
|
||||
return valueObj.field === field;
|
||||
});
|
||||
|
||||
if (result.length > 0) {
|
||||
$(this).val(result[0].value);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var collectBootstrapCookies = function cookiesRegex() {
|
||||
var cookies = [],
|
||||
foundCookies = document.cookie.match(/(?:bs.table.)(\w*)/g);
|
||||
|
||||
if (foundCookies) {
|
||||
$.each(foundCookies, function (i, cookie) {
|
||||
if (/./.test(cookie)) {
|
||||
cookie = cookie.split(".").pop();
|
||||
}
|
||||
|
||||
if ($.inArray(cookie, cookies) === -1) {
|
||||
cookies.push(cookie);
|
||||
}
|
||||
});
|
||||
return cookies;
|
||||
}
|
||||
};
|
||||
|
||||
var createControls = function (that, header) {
|
||||
var addedFilterControl = false,
|
||||
isVisible,
|
||||
html,
|
||||
timeoutId = 0;
|
||||
|
||||
$.each(that.columns, function (i, column) {
|
||||
isVisible = 'hidden';
|
||||
html = [];
|
||||
|
||||
if (!column.visible) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!column.filterControl) {
|
||||
html.push('<div style="height: 34px;"></div>');
|
||||
} else {
|
||||
html.push('<div style="margin: 0 2px 2px 2px;" class="filterControl">');
|
||||
|
||||
var nameControl = column.filterControl.toLowerCase();
|
||||
if (column.searchable && that.options.filterTemplate[nameControl]) {
|
||||
addedFilterControl = true;
|
||||
isVisible = 'visible';
|
||||
html.push(that.options.filterTemplate[nameControl](that, column.field, isVisible));
|
||||
}
|
||||
}
|
||||
|
||||
$.each(header.children().children(), function (i, tr) {
|
||||
tr = $(tr);
|
||||
if (tr.data('field') === column.field) {
|
||||
tr.find('.fht-cell').append(html.join(''));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
if (column.filterData !== undefined && column.filterData.toLowerCase() !== 'column') {
|
||||
var filterDataType = column.filterData.substring(0, 3);
|
||||
var filterDataSource = column.filterData.substring(4, column.filterData.length);
|
||||
var selectControl = $('.' + column.field);
|
||||
addOptionToSelectControl(selectControl, '', '');
|
||||
|
||||
switch (filterDataType) {
|
||||
case 'url':
|
||||
$.ajax({
|
||||
url: filterDataSource,
|
||||
type: "post",
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
$.each(data, function (key, value) {
|
||||
if (!value.Link) {
|
||||
addOptionToSelectControl(selectControl, value._id, value.CateName);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
break;
|
||||
case 'var':
|
||||
var variableValues = window[filterDataSource];
|
||||
for (var key in variableValues) {
|
||||
addOptionToSelectControl(selectControl, key, variableValues[key]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (addedFilterControl) {
|
||||
header.off('keyup', 'input').on('keyup', 'input', function (event) {
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = setTimeout(function () {
|
||||
that.onColumnSearch(event);
|
||||
}, that.options.searchTimeOut);
|
||||
});
|
||||
|
||||
header.off('change', 'select').on('change', 'select', function (event) {
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = setTimeout(function () {
|
||||
that.onColumnSearch(event);
|
||||
}, that.options.searchTimeOut);
|
||||
});
|
||||
|
||||
header.off('mouseup', 'input').on('mouseup', 'input', function (event) {
|
||||
var $input = $(this),
|
||||
oldValue = $input.val();
|
||||
|
||||
if (oldValue === "") {
|
||||
return;
|
||||
}
|
||||
|
||||
setTimeout(function(){
|
||||
var newValue = $input.val();
|
||||
|
||||
if (newValue === "") {
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = setTimeout(function () {
|
||||
that.onColumnSearch(event);
|
||||
}, that.options.searchTimeOut);
|
||||
}
|
||||
}, 1);
|
||||
});
|
||||
|
||||
if (header.find('.date-filter-control').length > 0) {
|
||||
$.each(that.columns, function (i, column) {
|
||||
if (column.filterControl !== undefined && column.filterControl.toLowerCase() === 'datepicker') {
|
||||
header.find('.date-filter-control.' + column.field).datepicker(column.filterDatepickerOptions)
|
||||
.on('changeDate', function (e) {
|
||||
//Fired the keyup event
|
||||
$(e.currentTarget).keyup();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
header.find('.filterControl').hide();
|
||||
}
|
||||
};
|
||||
|
||||
var getDirectionOfSelectOptions = function (alignment) {
|
||||
alignment = alignment === undefined ? 'left' : alignment.toLowerCase();
|
||||
|
||||
switch (alignment) {
|
||||
case 'left':
|
||||
return 'ltr';
|
||||
case 'right':
|
||||
return 'rtl';
|
||||
case 'auto':
|
||||
return 'auto';
|
||||
default:
|
||||
return 'ltr'
|
||||
}
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
filterControl: false,
|
||||
onColumnSearch: function (field, text) {
|
||||
return false;
|
||||
},
|
||||
filterShowClear: false,
|
||||
alignmentSelectControlOptions: undefined,
|
||||
//internal variables
|
||||
valuesFilterControl: [],
|
||||
filterTemplate: {
|
||||
input: function (that, field, isVisible) {
|
||||
return sprintf('<input type="text" class="form-control %s" style="width: 100%; visibility: %s">', field, isVisible);
|
||||
},
|
||||
select: function (that, field, isVisible) {
|
||||
return sprintf('<select class="%s form-control" style="width: 100%; visibility: %s" dir="%s"></select>',
|
||||
field, isVisible, getDirectionOfSelectOptions(that.options.alignmentSelectControlOptions))
|
||||
},
|
||||
datepicker: function (that, field, isVisible) {
|
||||
return sprintf('<input type="text" class="date-filter-control %s form-control" style="width: 100%; visibility: %s">', field, isVisible);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.COLUMN_DEFAULTS, {
|
||||
filterControl: undefined,
|
||||
filterData: undefined,
|
||||
filterDatepickerOptions: undefined,
|
||||
filterStrictSearch: false
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
|
||||
'column-search.bs.table': 'onColumnSearch'
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults.icons, {
|
||||
clear: 'glyphicon-trash icon-clear'
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_init = BootstrapTable.prototype.init,
|
||||
_initToolbar = BootstrapTable.prototype.initToolbar,
|
||||
_initHeader = BootstrapTable.prototype.initHeader,
|
||||
_initBody = BootstrapTable.prototype.initBody,
|
||||
_initSearch = BootstrapTable.prototype.initSearch;
|
||||
|
||||
BootstrapTable.prototype.init = function () {
|
||||
//Make sure that the filterControl option is set
|
||||
if (this.options.filterControl) {
|
||||
var that = this;
|
||||
//Make sure that the internal variables are set correctly
|
||||
this.options.valuesFilterControl = [];
|
||||
|
||||
this.$el.on('reset-view.bs.table', function () {
|
||||
//Create controls on $tableHeader if the height is set
|
||||
if (!that.options.height) {
|
||||
return;
|
||||
}
|
||||
|
||||
//Avoid recreate the controls
|
||||
if (that.$tableHeader.find('select').length > 0 || that.$tableHeader.find('input').length > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
createControls(that, that.$tableHeader);
|
||||
}).on('post-header.bs.table', function () {
|
||||
setValues(that);
|
||||
}).on('post-body.bs.table', function () {
|
||||
if (that.options.height) {
|
||||
fixHeaderCSS(that);
|
||||
}
|
||||
}).on('column-switch.bs.table', function() {
|
||||
setValues(that);
|
||||
});
|
||||
}
|
||||
_init.apply(this, Array.prototype.slice.apply(arguments));
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.locales, {
|
||||
formatClearFilters: function () {
|
||||
return 'Clear Filters';
|
||||
}
|
||||
});
|
||||
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
|
||||
|
||||
BootstrapTable.prototype.initToolbar = function () {
|
||||
if ((!this.showToolbar) && (this.options.filterControl)) {
|
||||
this.showToolbar = this.options.filterControl;
|
||||
}
|
||||
|
||||
_initToolbar.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (this.options.filterControl && this.options.filterShowClear) {
|
||||
var $btnGroup = this.$toolbar.find('>.btn-group'),
|
||||
$btnClear = $btnGroup.find('div.export');
|
||||
|
||||
if (!$btnClear.length) {
|
||||
$btnClear = $([
|
||||
'<button class="btn btn-default" ',
|
||||
sprintf('type="button" title="%s">', this.options.formatClearFilters()),
|
||||
sprintf('<i class="%s %s"></i> ', this.options.iconsPrefix, this.options.icons.clear),
|
||||
'</button>',
|
||||
'</ul>'].join('')).appendTo($btnGroup);
|
||||
|
||||
$btnClear.off('click').on('click', $.proxy(this.clearFilterControl, this));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initHeader = function () {
|
||||
_initHeader.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.filterControl) {
|
||||
return;
|
||||
}
|
||||
createControls(this, this.$header);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initBody = function () {
|
||||
_initBody.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
var that = this,
|
||||
data = this.options.data,
|
||||
pageTo = this.pageTo < this.options.data.length ? this.options.data.length : this.pageTo;
|
||||
|
||||
for (var i = this.pageFrom - 1; i < pageTo; i++) {
|
||||
var item = data[i];
|
||||
|
||||
$.each(this.header.fields, function (j, field) {
|
||||
var value = item[field],
|
||||
column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, field)];
|
||||
|
||||
value = $.fn.bootstrapTable.utils.calculateObjectValue(that.header, that.header.formatters[j], [value, item, i], value);
|
||||
|
||||
if ((!column.checkbox) || (!column.radio)) {
|
||||
if (column.filterControl !== undefined && column.filterControl.toLowerCase() === 'select' && column.searchable) {
|
||||
if (column.filterData === undefined || column.filterData.toLowerCase() === 'column') {
|
||||
var selectControl = $('.' + column.field);
|
||||
if (selectControl !== undefined && selectControl.length > 0) {
|
||||
if (selectControl.get(selectControl.length - 1).options.length === 0) {
|
||||
//Added the default option
|
||||
addOptionToSelectControl(selectControl, '', '');
|
||||
}
|
||||
|
||||
//Added a new value
|
||||
addOptionToSelectControl(selectControl, value, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initSearch = function () {
|
||||
_initSearch.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.sidePagination !== 'server') {
|
||||
return;
|
||||
}
|
||||
|
||||
var that = this;
|
||||
var fp = $.isEmptyObject(this.filterColumnsPartial) ? null : this.filterColumnsPartial;
|
||||
|
||||
//Check partial column filter
|
||||
this.data = fp ? $.grep(this.data, function (item, i) {
|
||||
for (var key in fp) {
|
||||
var thisColumn = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, key)];
|
||||
var fval = fp[key].toLowerCase();
|
||||
var value = item[key];
|
||||
|
||||
// Fix #142: search use formated data
|
||||
if (thisColumn && thisColumn.searchFormatter) {
|
||||
value = $.fn.bootstrapTable.utils.calculateObjectValue(that.header,
|
||||
that.header.formatters[$.inArray(key, that.header.fields)],
|
||||
[value, item, i], value);
|
||||
}
|
||||
|
||||
if (thisColumn.filterStrictSearch) {
|
||||
if (!($.inArray(key, that.header.fields) !== -1 &&
|
||||
(typeof value === 'string' || typeof value === 'number') &&
|
||||
value.toString().toLowerCase() === fval.toString().toLowerCase())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!($.inArray(key, that.header.fields) !== -1 &&
|
||||
(typeof value === 'string' || typeof value === 'number') &&
|
||||
(value + '').toLowerCase().indexOf(fval) !== -1)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}) : this.data;
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onColumnSearch = function (event) {
|
||||
copyValues(this);
|
||||
var text = $.trim($(event.currentTarget).val());
|
||||
var $field = $(event.currentTarget).closest('[data-field]').data('field');
|
||||
|
||||
if ($.isEmptyObject(this.filterColumnsPartial)) {
|
||||
this.filterColumnsPartial = {};
|
||||
}
|
||||
if (text) {
|
||||
this.filterColumnsPartial[$field] = text;
|
||||
} else {
|
||||
delete this.filterColumnsPartial[$field];
|
||||
}
|
||||
|
||||
this.options.pageNumber = 1;
|
||||
//this.onSearch(event);
|
||||
this.updatePagination();
|
||||
this.trigger('column-search', $field, text);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.clearFilterControl = function () {
|
||||
if (this.options.filterControl && this.options.filterShowClear) {
|
||||
var that = this,
|
||||
cookies = collectBootstrapCookies(),
|
||||
header = getCurrentHeader(that),
|
||||
table = header.closest('table'),
|
||||
controls = header.find(getCurrentSearchControls(that)),
|
||||
search = that.$toolbar.find('.search input'),
|
||||
timeoutId = 0;
|
||||
|
||||
$.each(that.options.valuesFilterControl, function (i, item) {
|
||||
item.value = '';
|
||||
});
|
||||
|
||||
setValues(that);
|
||||
|
||||
// Clear each type of filter if it exists.
|
||||
// Requires the body to reload each time a type of filter is found because we never know
|
||||
// which ones are going to be present.
|
||||
if (controls.length > 0) {
|
||||
this.filterColumnsPartial = {};
|
||||
$(controls[0]).trigger(controls[0].tagName === 'INPUT' ? 'keyup' : 'change');
|
||||
}
|
||||
|
||||
if (search.length > 0) {
|
||||
that.resetSearch();
|
||||
}
|
||||
|
||||
// use the default sort order if it exists. do nothing if it does not
|
||||
if (that.options.sortName !== table.data('sortName') || that.options.sortOrder !== table.data('sortOrder')) {
|
||||
var sorter = sprintf(header.find('[data-field="%s"]', $(controls[0]).closest('table').data('sortName')));
|
||||
that.onSort(table.data('sortName'), table.data('sortName'));
|
||||
$(sorter).find('.sortable').trigger('click');
|
||||
}
|
||||
|
||||
// clear cookies once the filters are clean
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = setTimeout(function () {
|
||||
if (cookies && cookies.length > 0) {
|
||||
$.each(cookies, function (i, item) {
|
||||
that.deleteCookie(item);
|
||||
});
|
||||
}
|
||||
}, that.options.searchTimeOut);
|
||||
}
|
||||
};
|
||||
}(jQuery);
|
||||
67
public/libs/bootstrap-table/dist/extensions/filter/bootstrap-table-filter.js
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* @author zhixin wen <wenzhixin2010@gmail.com>
|
||||
* extensions: https://github.com/lukaskral/bootstrap-table-filter
|
||||
*/
|
||||
|
||||
!function($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
showFilter: false
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_init = BootstrapTable.prototype.init,
|
||||
_initSearch = BootstrapTable.prototype.initSearch;
|
||||
|
||||
BootstrapTable.prototype.init = function () {
|
||||
_init.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
var that = this;
|
||||
this.$el.on('load-success.bs.table', function () {
|
||||
if (that.options.showFilter) {
|
||||
$(that.options.toolbar).bootstrapTableFilter({
|
||||
connectTo: that.$el
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initSearch = function () {
|
||||
_initSearch.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (this.options.sidePagination !== 'server') {
|
||||
if (typeof this.searchCallback === 'function') {
|
||||
this.data = $.grep(this.options.data, this.searchCallback);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.getData = function () {
|
||||
return (this.searchText || this.searchCallback) ? this.data : this.options.data;
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.getColumns = function () {
|
||||
return this.columns;
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.registerSearchCallback = function (callback) {
|
||||
this.searchCallback = callback;
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.updateSearch = function () {
|
||||
this.options.pageNumber = 1;
|
||||
this.initSearch();
|
||||
this.updatePagination();
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.getServerUrl = function () {
|
||||
return (this.options.sidePagination === 'server') ? this.options.url : false;
|
||||
};
|
||||
|
||||
$.fn.bootstrapTable.methods.push('getColumns',
|
||||
'registerSearchCallback', 'updateSearch',
|
||||
'getServerUrl');
|
||||
|
||||
}(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/filter/bootstrap-table-filter.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";a.extend(a.fn.bootstrapTable.defaults,{showFilter:!1});var b=a.fn.bootstrapTable.Constructor,c=b.prototype.init,d=b.prototype.initSearch;b.prototype.init=function(){c.apply(this,Array.prototype.slice.apply(arguments));var b=this;this.$el.on("load-success.bs.table",function(){b.options.showFilter&&a(b.options.toolbar).bootstrapTableFilter({connectTo:b.$el})})},b.prototype.initSearch=function(){d.apply(this,Array.prototype.slice.apply(arguments)),"server"!==this.options.sidePagination&&"function"==typeof this.searchCallback&&(this.data=a.grep(this.options.data,this.searchCallback))},b.prototype.getData=function(){return this.searchText||this.searchCallback?this.data:this.options.data},b.prototype.getColumns=function(){return this.columns},b.prototype.registerSearchCallback=function(a){this.searchCallback=a},b.prototype.updateSearch=function(){this.options.pageNumber=1,this.initSearch(),this.updatePagination()},b.prototype.getServerUrl=function(){return"server"===this.options.sidePagination?this.options.url:!1},a.fn.bootstrapTable.methods.push("getColumns","registerSearchCallback","updateSearch","getServerUrl")}(jQuery);
|
||||
62
public/libs/bootstrap-table/dist/extensions/flat-json/bootstrap-table-flat-json.js
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.3.0
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
var flat = function (element, that) {
|
||||
var result = {};
|
||||
|
||||
function recurse(cur, prop) {
|
||||
if (Object(cur) !== cur) {
|
||||
result[prop] = cur;
|
||||
} else if ($.isArray(cur)) {
|
||||
for (var i = 0, l = cur.length; i < l; i++) {
|
||||
recurse(cur[i], prop ? prop + that.options.flatSeparator + i : "" + i);
|
||||
if (l == 0) {
|
||||
result[prop] = [];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var isEmpty = true;
|
||||
for (var p in cur) {
|
||||
isEmpty = false;
|
||||
recurse(cur[p], prop ? prop + that.options.flatSeparator + p : p);
|
||||
}
|
||||
if (isEmpty) {
|
||||
result[prop] = {};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
recurse(element, "");
|
||||
return result;
|
||||
};
|
||||
|
||||
var flatHelper = function (data, that) {
|
||||
var flatArray = [];
|
||||
|
||||
$.each(!$.isArray(data) ? [data] : data, function (i, element) {
|
||||
flatArray.push(flat(element, that));
|
||||
});
|
||||
return flatArray;
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
flat: false,
|
||||
flatSeparator: '.'
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_initData = BootstrapTable.prototype.initData;
|
||||
|
||||
BootstrapTable.prototype.initData = function (data, type) {
|
||||
if (this.options.flat) {
|
||||
data = flatHelper(data ? data : this.options.data, this);
|
||||
}
|
||||
_initData.apply(this, [data, type]);
|
||||
};
|
||||
})(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/flat-json/bootstrap-table-flat-json.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";var b=function(b,c){function d(b,f){if(Object(b)!==b)e[f]=b;else if(a.isArray(b))for(var g=0,h=b.length;h>g;g++)d(b[g],f?f+c.options.flatSeparator+g:""+g),0==h&&(e[f]=[]);else{var i=!0;for(var j in b)i=!1,d(b[j],f?f+c.options.flatSeparator+j:j);i&&(e[f]={})}}var e={};return d(b,""),e},c=function(c,d){var e=[];return a.each(a.isArray(c)?c:[c],function(a,c){e.push(b(c,d))}),e};a.extend(a.fn.bootstrapTable.defaults,{flat:!1,flatSeparator:"."});var d=a.fn.bootstrapTable.Constructor,e=d.prototype.initData;d.prototype.initData=function(a,b){this.options.flat&&(a=c(a?a:this.options.data,this)),e.apply(this,[a,b])}}(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/group-by-v2/bootstrap-table-group-by.css
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
.bootstrap-table .table > tbody > tr.groupBy {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.bootstrap-table .table > tbody > tr.groupBy.expanded {
|
||||
|
||||
}
|
||||
226
public/libs/bootstrap-table/dist/extensions/group-by-v2/bootstrap-table-group-by.js
vendored
Normal file
@@ -0,0 +1,226 @@
|
||||
/**
|
||||
* @author: Yura Knoxville
|
||||
* @version: v1.0.0
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var initBodyCaller,
|
||||
tableGroups;
|
||||
|
||||
// it only does '%s', and return '' when arguments are undefined
|
||||
var sprintf = function (str) {
|
||||
var args = arguments,
|
||||
flag = true,
|
||||
i = 1;
|
||||
|
||||
str = str.replace(/%s/g, function () {
|
||||
var arg = args[i++];
|
||||
|
||||
if (typeof arg === 'undefined') {
|
||||
flag = false;
|
||||
return '';
|
||||
}
|
||||
return arg;
|
||||
});
|
||||
return flag ? str : '';
|
||||
};
|
||||
|
||||
var groupBy = function (array , f) {
|
||||
var groups = {};
|
||||
array.forEach(function(o) {
|
||||
var group = f(o);
|
||||
groups[group] = groups[group] || [];
|
||||
groups[group].push(o);
|
||||
});
|
||||
|
||||
return groups;
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
groupBy: false,
|
||||
groupByField: ''
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_initSort = BootstrapTable.prototype.initSort,
|
||||
_initBody = BootstrapTable.prototype.initBody,
|
||||
_updateSelected = BootstrapTable.prototype.updateSelected;
|
||||
|
||||
BootstrapTable.prototype.initSort = function () {
|
||||
_initSort.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
var that = this;
|
||||
tableGroups = [];
|
||||
|
||||
if ((this.options.groupBy) && (this.options.groupByField !== '')) {
|
||||
|
||||
if ((this.options.sortName != this.options.groupByField)) {
|
||||
this.data.sort(function(a, b) {
|
||||
return a[that.options.groupByField].localeCompare(b[that.options.groupByField]);
|
||||
});
|
||||
}
|
||||
|
||||
var that = this;
|
||||
var groups = groupBy(that.data, function (item) {
|
||||
return [item[that.options.groupByField]];
|
||||
});
|
||||
|
||||
var index = 0;
|
||||
$.each(groups, function(key, value) {
|
||||
tableGroups.push({
|
||||
id: index,
|
||||
name: key
|
||||
});
|
||||
|
||||
value.forEach(function(item) {
|
||||
if (!item._data) {
|
||||
item._data = {};
|
||||
}
|
||||
|
||||
item._data['parent-index'] = index;
|
||||
});
|
||||
|
||||
index++;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
BootstrapTable.prototype.initBody = function () {
|
||||
initBodyCaller = true;
|
||||
|
||||
_initBody.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if ((this.options.groupBy) && (this.options.groupByField !== '')) {
|
||||
var that = this,
|
||||
checkBox = false,
|
||||
visibleColumns = 0;
|
||||
|
||||
this.columns.forEach(function(column) {
|
||||
if (column.checkbox) {
|
||||
checkBox = true;
|
||||
} else {
|
||||
if (column.visible) {
|
||||
visibleColumns += 1;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (this.options.detailView && !this.options.cardView) {
|
||||
visibleColumns += 1;
|
||||
}
|
||||
|
||||
tableGroups.forEach(function(item){
|
||||
var html = [];
|
||||
|
||||
html.push(sprintf('<tr class="info groupBy expanded" data-group-index="%s">', item.id));
|
||||
|
||||
if (that.options.detailView && !that.options.cardView) {
|
||||
html.push('<td class="detail"></td>');
|
||||
}
|
||||
|
||||
if (checkBox) {
|
||||
html.push('<td class="bs-checkbox">',
|
||||
'<input name="btSelectGroup" type="checkbox" />',
|
||||
'</td>'
|
||||
);
|
||||
}
|
||||
|
||||
html.push('<td',
|
||||
sprintf(' colspan="%s"', visibleColumns),
|
||||
'>', item.name, '</td>'
|
||||
);
|
||||
|
||||
html.push('</tr>');
|
||||
|
||||
that.$body.find('tr[data-parent-index='+item.id+']:first').before($(html.join('')));
|
||||
});
|
||||
|
||||
this.$selectGroup = [];
|
||||
this.$body.find('[name="btSelectGroup"]').each(function() {
|
||||
var self = $(this);
|
||||
|
||||
that.$selectGroup.push({
|
||||
group: self,
|
||||
item: that.$selectItem.filter(function () {
|
||||
return ($(this).closest('tr').data('parent-index') ===
|
||||
self.closest('tr').data('group-index'));
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
this.$container.off('click', '.groupBy')
|
||||
.on('click', '.groupBy', function() {
|
||||
$(this).toggleClass('expanded');
|
||||
that.$body.find('tr[data-parent-index='+$(this).closest('tr').data('group-index')+']').toggleClass('hidden');
|
||||
});
|
||||
|
||||
this.$container.off('click', '[name="btSelectGroup"]')
|
||||
.on('click', '[name="btSelectGroup"]', function (event) {
|
||||
event.stopImmediatePropagation();
|
||||
|
||||
var self = $(this);
|
||||
var checked = self.prop('checked');
|
||||
that[checked ? 'checkGroup' : 'uncheckGroup']($(this).closest('tr').data('group-index'));
|
||||
});
|
||||
}
|
||||
|
||||
initBodyCaller = false;
|
||||
this.updateSelected();
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.updateSelected = function () {
|
||||
if (!initBodyCaller) {
|
||||
_updateSelected.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if ((this.options.groupBy) && (this.options.groupByField !== '')) {
|
||||
this.$selectGroup.forEach(function (item) {
|
||||
var checkGroup = item.item.filter(':enabled').length ===
|
||||
item.item.filter(':enabled').filter(':checked').length;
|
||||
|
||||
item.group.prop('checked', checkGroup);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.getGroupSelections = function (index) {
|
||||
var that = this;
|
||||
|
||||
return $.grep(this.data, function (row) {
|
||||
return (row[that.header.stateField] && (row._data['parent-index'] === index));
|
||||
});
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.checkGroup = function (index) {
|
||||
this.checkGroup_(index, true);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.uncheckGroup = function (index) {
|
||||
this.checkGroup_(index, false);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.checkGroup_ = function (index, checked) {
|
||||
var rows;
|
||||
var filter = function() {
|
||||
return ($(this).closest('tr').data('parent-index') === index);
|
||||
};
|
||||
|
||||
if (!checked) {
|
||||
rows = this.getGroupSelections(index);
|
||||
}
|
||||
|
||||
this.$selectItem.filter(filter).prop('checked', checked);
|
||||
|
||||
|
||||
this.updateRows();
|
||||
this.updateSelected();
|
||||
if (checked) {
|
||||
rows = this.getGroupSelections(index);
|
||||
}
|
||||
this.trigger(checked ? 'check-all' : 'uncheck-all', rows);
|
||||
};
|
||||
|
||||
}(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/group-by-v2/bootstrap-table-group-by.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";var b,c,d=function(a){var b=arguments,c=!0,d=1;return a=a.replace(/%s/g,function(){var a=b[d++];return"undefined"==typeof a?(c=!1,""):a}),c?a:""},e=function(a,b){var c={};return a.forEach(function(a){var d=b(a);c[d]=c[d]||[],c[d].push(a)}),c};a.extend(a.fn.bootstrapTable.defaults,{groupBy:!1,groupByField:""});var f=a.fn.bootstrapTable.Constructor,g=f.prototype.initSort,h=f.prototype.initBody,i=f.prototype.updateSelected;f.prototype.initSort=function(){g.apply(this,Array.prototype.slice.apply(arguments));var b=this;if(c=[],this.options.groupBy&&""!==this.options.groupByField){this.options.sortName!=this.options.groupByField&&this.data.sort(function(a,c){return a[b.options.groupByField].localeCompare(c[b.options.groupByField])});var b=this,d=e(b.data,function(a){return[a[b.options.groupByField]]}),f=0;a.each(d,function(a,b){c.push({id:f,name:a}),b.forEach(function(a){a._data||(a._data={}),a._data["parent-index"]=f}),f++})}},f.prototype.initBody=function(){if(b=!0,h.apply(this,Array.prototype.slice.apply(arguments)),this.options.groupBy&&""!==this.options.groupByField){var e=this,f=!1,g=0;this.columns.forEach(function(a){a.checkbox?f=!0:a.visible&&(g+=1)}),this.options.detailView&&!this.options.cardView&&(g+=1),c.forEach(function(b){var c=[];c.push(d('<tr class="info groupBy expanded" data-group-index="%s">',b.id)),e.options.detailView&&!e.options.cardView&&c.push('<td class="detail"></td>'),f&&c.push('<td class="bs-checkbox">','<input name="btSelectGroup" type="checkbox" />',"</td>"),c.push("<td",d(' colspan="%s"',g),">",b.name,"</td>"),c.push("</tr>"),e.$body.find("tr[data-parent-index="+b.id+"]:first").before(a(c.join("")))}),this.$selectGroup=[],this.$body.find('[name="btSelectGroup"]').each(function(){var b=a(this);e.$selectGroup.push({group:b,item:e.$selectItem.filter(function(){return a(this).closest("tr").data("parent-index")===b.closest("tr").data("group-index")})})}),this.$container.off("click",".groupBy").on("click",".groupBy",function(){a(this).toggleClass("expanded"),e.$body.find("tr[data-parent-index="+a(this).closest("tr").data("group-index")+"]").toggleClass("hidden")}),this.$container.off("click",'[name="btSelectGroup"]').on("click",'[name="btSelectGroup"]',function(b){b.stopImmediatePropagation();var c=a(this),d=c.prop("checked");e[d?"checkGroup":"uncheckGroup"](a(this).closest("tr").data("group-index"))})}b=!1,this.updateSelected()},f.prototype.updateSelected=function(){b||(i.apply(this,Array.prototype.slice.apply(arguments)),this.options.groupBy&&""!==this.options.groupByField&&this.$selectGroup.forEach(function(a){var b=a.item.filter(":enabled").length===a.item.filter(":enabled").filter(":checked").length;a.group.prop("checked",b)}))},f.prototype.getGroupSelections=function(b){var c=this;return a.grep(this.data,function(a){return a[c.header.stateField]&&a._data["parent-index"]===b})},f.prototype.checkGroup=function(a){this.checkGroup_(a,!0)},f.prototype.uncheckGroup=function(a){this.checkGroup_(a,!1)},f.prototype.checkGroup_=function(b,c){var d,e=function(){return a(this).closest("tr").data("parent-index")===b};c||(d=this.getGroupSelections(b)),this.$selectItem.filter(e).prop("checked",c),this.updateRows(),this.updateSelected(),c&&(d=this.getGroupSelections(b)),this.trigger(c?"check-all":"uncheck-all",d)}}(jQuery);
|
||||
53
public/libs/bootstrap-table/dist/extensions/group-by/bootstrap-table-group-by.css
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
table.treetable tbody tr td {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
table.treetable span {
|
||||
background-position: center left;
|
||||
background-repeat: no-repeat;
|
||||
padding: .2em 0 .2em 1.5em;
|
||||
}
|
||||
|
||||
table.treetable tr.collapsed span.indenter a {
|
||||
background-image: url(data:image/png;base64,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);
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
table.treetable tr.expanded span.indenter a {
|
||||
background-image: url(data:image/png;base64,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);
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
table.treetable tr.branch {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
||||
table.treetable tr.selected {
|
||||
background-color: #3875d7;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
table.treetable tr span.indenter a {
|
||||
outline: none; /* Expander shows outline after upgrading to 3.0 (#141) */
|
||||
}
|
||||
|
||||
table.treetable tr.collapsed.selected span.indenter a {
|
||||
background-image: url(data:image/png;base64,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);
|
||||
}
|
||||
|
||||
table.treetable tr.expanded.selected span.indenter a {
|
||||
background-image: url(data:image/png;base64,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);
|
||||
}
|
||||
|
||||
table.treetable tr.accept {
|
||||
background-color: #a3bce4;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
table.treetable tr.collapsed.accept td span.indenter a {
|
||||
background-image: url(data:image/x-png;base64,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);
|
||||
}
|
||||
|
||||
table.treetable tr.expanded.accept td span.indenter a {
|
||||
background-image: url(data:image/x-png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAFtJREFUeNpi/P//PwMlgImBQsA44C6giQENDAwM//HgBmLCAF/AMBLjBUeixf///48L7/+PCvZjU4fPAAc0AxywqcMXCwegGJ1NckL6jx5wpKYDxqGXEkkCgAEAmrqBIejdgngAAAAASUVORK5CYII=);
|
||||
}
|
||||
243
public/libs/bootstrap-table/dist/extensions/group-by/bootstrap-table-group-by.js
vendored
Normal file
@@ -0,0 +1,243 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.1.0
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var originalRowAttr,
|
||||
dataTTId = 'data-tt-id',
|
||||
dataTTParentId = 'data-tt-parent-id',
|
||||
obj = {},
|
||||
parentId = undefined;
|
||||
|
||||
var getParentRowId = function (that, id) {
|
||||
var parentRows = that.$body.find('tr').not('[' + 'data-tt-parent-id]');
|
||||
|
||||
for (var i = 0; i < parentRows.length; i++) {
|
||||
if (i === id) {
|
||||
return $(parentRows[i]).attr('data-tt-id');
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
};
|
||||
|
||||
var sumData = function (that, data) {
|
||||
var sumRow = {};
|
||||
$.each(data, function (i, row) {
|
||||
if (!row.IsParent) {
|
||||
for (var prop in row) {
|
||||
if (!isNaN(parseFloat(row[prop]))) {
|
||||
if (that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, prop)].groupBySumGroup) {
|
||||
if (sumRow[prop] === undefined) {
|
||||
sumRow[prop] = 0;
|
||||
}
|
||||
sumRow[prop] += +row[prop];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return sumRow;
|
||||
};
|
||||
|
||||
var rowAttr = function (row, index) {
|
||||
//Call the User Defined Function
|
||||
originalRowAttr.apply([row, index]);
|
||||
|
||||
obj[dataTTId.toString()] = index;
|
||||
|
||||
if (!row.IsParent) {
|
||||
obj[dataTTParentId.toString()] = parentId === undefined ? index : parentId;
|
||||
} else {
|
||||
parentId = index;
|
||||
delete obj[dataTTParentId.toString()];
|
||||
}
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
var setObjectKeys = function () {
|
||||
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
|
||||
Object.keys = function (o) {
|
||||
if (o !== Object(o)) {
|
||||
throw new TypeError('Object.keys called on a non-object');
|
||||
}
|
||||
var k = [],
|
||||
p;
|
||||
for (p in o) {
|
||||
if (Object.prototype.hasOwnProperty.call(o, p)) {
|
||||
k.push(p);
|
||||
}
|
||||
}
|
||||
return k;
|
||||
}
|
||||
};
|
||||
|
||||
var getDataArrayFromItem = function (that, item) {
|
||||
var itemDataArray = [];
|
||||
for (var i = 0; i < that.options.groupByField.length; i++) {
|
||||
itemDataArray.push(item[that.options.groupByField[i]]);
|
||||
}
|
||||
|
||||
return itemDataArray;
|
||||
};
|
||||
|
||||
var getNewRow = function (that, result, index) {
|
||||
var newRow = {};
|
||||
for (var i = 0; i < that.options.groupByField.length; i++) {
|
||||
newRow[that.options.groupByField[i].toString()] = result[index][0][that.options.groupByField[i]];
|
||||
}
|
||||
|
||||
newRow.IsParent = true;
|
||||
|
||||
return newRow;
|
||||
};
|
||||
|
||||
var groupBy = function (array, f) {
|
||||
var groups = {};
|
||||
$.each(array, function (i, o) {
|
||||
var group = JSON.stringify(f(o));
|
||||
groups[group] = groups[group] || [];
|
||||
groups[group].push(o);
|
||||
});
|
||||
return Object.keys(groups).map(function (group) {
|
||||
return groups[group];
|
||||
});
|
||||
};
|
||||
|
||||
var makeGrouped = function (that, data) {
|
||||
var newData = [],
|
||||
sumRow = {};
|
||||
|
||||
var result = groupBy(data, function (item) {
|
||||
return getDataArrayFromItem(that, item);
|
||||
});
|
||||
|
||||
for (var i = 0; i < result.length; i++) {
|
||||
result[i].unshift(getNewRow(that, result, i));
|
||||
if (that.options.groupBySumGroup) {
|
||||
sumRow = sumData(that, result[i]);
|
||||
if (!$.isEmptyObject(sumRow)) {
|
||||
result[i].push(sumRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
newData = newData.concat.apply(newData, result);
|
||||
|
||||
if (!that.options.loaded && newData.length > 0) {
|
||||
that.options.loaded = true;
|
||||
that.options.originalData = that.options.data;
|
||||
that.options.data = newData;
|
||||
}
|
||||
|
||||
return newData;
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
groupBy: false,
|
||||
groupByField: [],
|
||||
groupBySumGroup: false,
|
||||
groupByInitExpanded: undefined, //node, 'all'
|
||||
//internal variables
|
||||
loaded: false,
|
||||
originalData: undefined
|
||||
});
|
||||
|
||||
$.fn.bootstrapTable.methods.push('collapseAll', 'expandAll', 'refreshGroupByField');
|
||||
|
||||
$.extend($.fn.bootstrapTable.COLUMN_DEFAULTS, {
|
||||
groupBySumGroup: false
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_init = BootstrapTable.prototype.init,
|
||||
_initData = BootstrapTable.prototype.initData;
|
||||
|
||||
BootstrapTable.prototype.init = function () {
|
||||
//Temporal validation
|
||||
if (!this.options.sortName) {
|
||||
if ((this.options.groupBy) && (this.options.groupByField.length > 0)) {
|
||||
var that = this;
|
||||
|
||||
// Compatibility: IE < 9 and old browsers
|
||||
if (!Object.keys) {
|
||||
setObjectKeys();
|
||||
}
|
||||
|
||||
//Make sure that the internal variables are set correctly
|
||||
this.options.loaded = false;
|
||||
this.options.originalData = undefined;
|
||||
|
||||
originalRowAttr = this.options.rowAttributes;
|
||||
this.options.rowAttributes = rowAttr;
|
||||
this.$el.on('post-body.bs.table', function () {
|
||||
that.$el.treetable({
|
||||
expandable: true,
|
||||
onNodeExpand: function () {
|
||||
if (that.options.height) {
|
||||
that.resetHeader();
|
||||
}
|
||||
},
|
||||
onNodeCollapse: function () {
|
||||
if (that.options.height) {
|
||||
that.resetHeader();
|
||||
}
|
||||
}
|
||||
}, true);
|
||||
|
||||
if (that.options.groupByInitExpanded !== undefined) {
|
||||
if (typeof that.options.groupByInitExpanded === 'number') {
|
||||
that.expandNode(that.options.groupByInitExpanded);
|
||||
} else if (that.options.groupByInitExpanded.toLowerCase() === 'all') {
|
||||
that.expandAll();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
_init.apply(this, Array.prototype.slice.apply(arguments));
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initData = function (data, type) {
|
||||
//Temporal validation
|
||||
if (!this.options.sortName) {
|
||||
if ((this.options.groupBy) && (this.options.groupByField.length > 0)) {
|
||||
|
||||
this.options.groupByField = typeof this.options.groupByField === 'string' ?
|
||||
this.options.groupByField.replace('[', '').replace(']', '')
|
||||
.replace(/ /g, '').toLowerCase().split(',') : this.options.groupByField;
|
||||
|
||||
data = makeGrouped(this, data ? data : this.options.data);
|
||||
}
|
||||
}
|
||||
_initData.apply(this, [data, type]);
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.expandAll = function () {
|
||||
this.$el.treetable('expandAll');
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.collapseAll = function () {
|
||||
this.$el.treetable('collapseAll');
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.expandNode = function (id) {
|
||||
id = getParentRowId(this, id);
|
||||
if (id !== undefined) {
|
||||
this.$el.treetable('expandNode', id);
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.refreshGroupByField = function (groupByFields) {
|
||||
if (!$.fn.bootstrapTable.utils.compareObjects(this.options.groupByField, groupByFields)) {
|
||||
this.options.groupByField = groupByFields;
|
||||
this.load(this.options.originalData);
|
||||
}
|
||||
};
|
||||
}(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/group-by/bootstrap-table-group-by.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";var b,c="data-tt-id",d="data-tt-parent-id",e={},f=void 0,g=function(b,c){for(var d=b.$body.find("tr").not("[data-tt-parent-id]"),e=0;e<d.length;e++)if(e===c)return a(d[e]).attr("data-tt-id");return void 0},h=function(b,c){var d={};return a.each(c,function(c,e){if(!e.IsParent)for(var f in e)isNaN(parseFloat(e[f]))||b.columns[a.fn.bootstrapTable.utils.getFieldIndex(b.columns,f)].groupBySumGroup&&(void 0===d[f]&&(d[f]=0),d[f]+=+e[f])}),d},i=function(a,g){return b.apply([a,g]),e[c.toString()]=g,a.IsParent?(f=g,delete e[d.toString()]):e[d.toString()]=void 0===f?g:f,e},j=function(){Object.keys=function(a){if(a!==Object(a))throw new TypeError("Object.keys called on a non-object");var b,c=[];for(b in a)Object.prototype.hasOwnProperty.call(a,b)&&c.push(b);return c}},k=function(a,b){for(var c=[],d=0;d<a.options.groupByField.length;d++)c.push(b[a.options.groupByField[d]]);return c},l=function(a,b,c){for(var d={},e=0;e<a.options.groupByField.length;e++)d[a.options.groupByField[e].toString()]=b[c][0][a.options.groupByField[e]];return d.IsParent=!0,d},m=function(b,c){var d={};return a.each(b,function(a,b){var e=JSON.stringify(c(b));d[e]=d[e]||[],d[e].push(b)}),Object.keys(d).map(function(a){return d[a]})},n=function(b,c){for(var d=[],e={},f=m(c,function(a){return k(b,a)}),g=0;g<f.length;g++)f[g].unshift(l(b,f,g)),b.options.groupBySumGroup&&(e=h(b,f[g]),a.isEmptyObject(e)||f[g].push(e));return d=d.concat.apply(d,f),!b.options.loaded&&d.length>0&&(b.options.loaded=!0,b.options.originalData=b.options.data,b.options.data=d),d};a.extend(a.fn.bootstrapTable.defaults,{groupBy:!1,groupByField:[],groupBySumGroup:!1,groupByInitExpanded:void 0,loaded:!1,originalData:void 0}),a.fn.bootstrapTable.methods.push("collapseAll","expandAll","refreshGroupByField"),a.extend(a.fn.bootstrapTable.COLUMN_DEFAULTS,{groupBySumGroup:!1});var o=a.fn.bootstrapTable.Constructor,p=o.prototype.init,q=o.prototype.initData;o.prototype.init=function(){if(!this.options.sortName&&this.options.groupBy&&this.options.groupByField.length>0){var a=this;Object.keys||j(),this.options.loaded=!1,this.options.originalData=void 0,b=this.options.rowAttributes,this.options.rowAttributes=i,this.$el.on("post-body.bs.table",function(){a.$el.treetable({expandable:!0,onNodeExpand:function(){a.options.height&&a.resetHeader()},onNodeCollapse:function(){a.options.height&&a.resetHeader()}},!0),void 0!==a.options.groupByInitExpanded&&("number"==typeof a.options.groupByInitExpanded?a.expandNode(a.options.groupByInitExpanded):"all"===a.options.groupByInitExpanded.toLowerCase()&&a.expandAll())})}p.apply(this,Array.prototype.slice.apply(arguments))},o.prototype.initData=function(a,b){this.options.sortName||this.options.groupBy&&this.options.groupByField.length>0&&(this.options.groupByField="string"==typeof this.options.groupByField?this.options.groupByField.replace("[","").replace("]","").replace(/ /g,"").toLowerCase().split(","):this.options.groupByField,a=n(this,a?a:this.options.data)),q.apply(this,[a,b])},o.prototype.expandAll=function(){this.$el.treetable("expandAll")},o.prototype.collapseAll=function(){this.$el.treetable("collapseAll")},o.prototype.expandNode=function(a){a=g(this,a),void 0!==a&&this.$el.treetable("expandNode",a)},o.prototype.refreshGroupByField=function(b){a.fn.bootstrapTable.utils.compareObjects(this.options.groupByField,b)||(this.options.groupByField=b,this.load(this.options.originalData))}}(jQuery);
|
||||
80
public/libs/bootstrap-table/dist/extensions/key-events/bootstrap-table-key-events.js
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.0.0
|
||||
*
|
||||
* @update zhixin wen <wenzhixin2010@gmail.com>
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
keyEvents: false
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_init = BootstrapTable.prototype.init;
|
||||
|
||||
BootstrapTable.prototype.init = function () {
|
||||
_init.apply(this, Array.prototype.slice.apply(arguments));
|
||||
this.initKeyEvents();
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initKeyEvents = function () {
|
||||
if (this.options.keyEvents) {
|
||||
var that = this;
|
||||
|
||||
$(document).off('keydown').on('keydown', function (e) {
|
||||
var $search = that.$toolbar.find('.search input'),
|
||||
$refresh = that.$toolbar.find('button[name="refresh"]'),
|
||||
$toggle = that.$toolbar.find('button[name="toggle"]'),
|
||||
$paginationSwitch = that.$toolbar.find('button[name="paginationSwitch"]');
|
||||
|
||||
if (document.activeElement === $search.get(0)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (e.keyCode) {
|
||||
case 83: //s
|
||||
if (!that.options.search) {
|
||||
return;
|
||||
}
|
||||
$search.focus();
|
||||
return false;
|
||||
case 82: //r
|
||||
if (!that.options.showRefresh) {
|
||||
return;
|
||||
}
|
||||
$refresh.click();
|
||||
return false;
|
||||
case 84: //t
|
||||
if (!that.options.showToggle) {
|
||||
return;
|
||||
}
|
||||
$toggle.click();
|
||||
return false;
|
||||
case 80: //p
|
||||
if (!that.options.showPaginationSwitch) {
|
||||
return;
|
||||
}
|
||||
$paginationSwitch.click();
|
||||
return false;
|
||||
case 37: // left
|
||||
if (!that.options.pagination) {
|
||||
return;
|
||||
}
|
||||
that.prevPage();
|
||||
return false;
|
||||
case 39: // right
|
||||
if (!that.options.pagination) {
|
||||
return;
|
||||
}
|
||||
that.nextPage();
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/key-events/bootstrap-table-key-events.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";a.extend(a.fn.bootstrapTable.defaults,{keyEvents:!1});var b=a.fn.bootstrapTable.Constructor,c=b.prototype.init;b.prototype.init=function(){c.apply(this,Array.prototype.slice.apply(arguments)),this.initKeyEvents()},b.prototype.initKeyEvents=function(){if(this.options.keyEvents){var b=this;a(document).off("keydown").on("keydown",function(a){var c=b.$toolbar.find(".search input"),d=b.$toolbar.find('button[name="refresh"]'),e=b.$toolbar.find('button[name="toggle"]'),f=b.$toolbar.find('button[name="paginationSwitch"]');if(document.activeElement===c.get(0))return!0;switch(a.keyCode){case 83:if(!b.options.search)return;return c.focus(),!1;case 82:if(!b.options.showRefresh)return;return d.click(),!1;case 84:if(!b.options.showToggle)return;return e.click(),!1;case 80:if(!b.options.showPaginationSwitch)return;return f.click(),!1;case 37:if(!b.options.pagination)return;return b.prevPage(),!1;case 39:if(!b.options.pagination)return;return void b.nextPage()}})}}}(jQuery);
|
||||
136
public/libs/bootstrap-table/dist/extensions/mobile/bootstrap-table-mobile.js
vendored
Normal file
@@ -0,0 +1,136 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.1.0
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var showHideColumns = function (that, checked) {
|
||||
if (that.options.columnsHidden.length > 0 ) {
|
||||
$.each(that.columns, function (i, column) {
|
||||
if (that.options.columnsHidden.indexOf(column.field) !== -1) {
|
||||
if (column.visible !== checked) {
|
||||
that.toggleColumn($.fn.bootstrapTable.utils.getFieldIndex(that.columns, column.field), checked, true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var resetView = function (that) {
|
||||
if (that.options.height || that.options.showFooter) {
|
||||
setTimeout(function(){
|
||||
that.resetView.call(that);
|
||||
}, 1);
|
||||
}
|
||||
};
|
||||
|
||||
var changeView = function (that, width, height) {
|
||||
if (that.options.minHeight) {
|
||||
if ((width <= that.options.minWidth) && (height <= that.options.minHeight)) {
|
||||
conditionCardView(that);
|
||||
} else if ((width > that.options.minWidth) && (height > that.options.minHeight)) {
|
||||
conditionFullView(that);
|
||||
}
|
||||
} else {
|
||||
if (width <= that.options.minWidth) {
|
||||
conditionCardView(that);
|
||||
} else if (width > that.options.minWidth) {
|
||||
conditionFullView(that);
|
||||
}
|
||||
}
|
||||
|
||||
resetView(that);
|
||||
};
|
||||
|
||||
var conditionCardView = function (that) {
|
||||
changeTableView(that, false);
|
||||
showHideColumns(that, false);
|
||||
};
|
||||
|
||||
var conditionFullView = function (that) {
|
||||
changeTableView(that, true);
|
||||
showHideColumns(that, true);
|
||||
};
|
||||
|
||||
var changeTableView = function (that, cardViewState) {
|
||||
that.options.cardView = cardViewState;
|
||||
that.toggleView();
|
||||
};
|
||||
|
||||
var debounce = function(func,wait) {
|
||||
var timeout;
|
||||
return function() {
|
||||
var context = this,
|
||||
args = arguments;
|
||||
var later = function() {
|
||||
timeout = null;
|
||||
func.apply(context,args);
|
||||
};
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(later, wait);
|
||||
};
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
mobileResponsive: false,
|
||||
minWidth: 562,
|
||||
minHeight: undefined,
|
||||
heightThreshold: 100, // just slightly larger than mobile chrome's auto-hiding toolbar
|
||||
checkOnInit: true,
|
||||
columnsHidden: []
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_init = BootstrapTable.prototype.init;
|
||||
|
||||
BootstrapTable.prototype.init = function () {
|
||||
_init.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.mobileResponsive) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.options.minWidth) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.options.minWidth < 100 && this.options.resizable) {
|
||||
console.log("The minWidth when the resizable extension is active should be greater or equal than 100");
|
||||
this.options.minWidth = 100;
|
||||
}
|
||||
|
||||
var that = this,
|
||||
old = {
|
||||
width: $(window).width(),
|
||||
height: $(window).height()
|
||||
};
|
||||
|
||||
$(window).on('resize orientationchange',debounce(function (evt) {
|
||||
// reset view if height has only changed by at least the threshold.
|
||||
var height = $(this).height(),
|
||||
width = $(this).width();
|
||||
|
||||
if (Math.abs(old.height - height) > that.options.heightThreshold || old.width != width) {
|
||||
changeView(that, width, height);
|
||||
old = {
|
||||
width: width,
|
||||
height: height
|
||||
};
|
||||
}
|
||||
},200));
|
||||
|
||||
if (this.options.checkOnInit) {
|
||||
var height = $(window).height(),
|
||||
width = $(window).width();
|
||||
changeView(this, width, height);
|
||||
old = {
|
||||
width: width,
|
||||
height: height
|
||||
};
|
||||
}
|
||||
};
|
||||
}(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/mobile/bootstrap-table-mobile.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";var b=function(b,c){b.options.columnsHidden.length>0&&a.each(b.columns,function(d,e){-1!==b.options.columnsHidden.indexOf(e.field)&&e.visible!==c&&b.toggleColumn(a.fn.bootstrapTable.utils.getFieldIndex(b.columns,e.field),c,!0)})},c=function(a){(a.options.height||a.options.showFooter)&&setTimeout(function(){a.resetView.call(a)},1)},d=function(a,b,d){a.options.minHeight?b<=a.options.minWidth&&d<=a.options.minHeight?e(a):b>a.options.minWidth&&d>a.options.minHeight&&f(a):b<=a.options.minWidth?e(a):b>a.options.minWidth&&f(a),c(a)},e=function(a){g(a,!1),b(a,!1)},f=function(a){g(a,!0),b(a,!0)},g=function(a,b){a.options.cardView=b,a.toggleView()},h=function(a,b){var c;return function(){var d=this,e=arguments,f=function(){c=null,a.apply(d,e)};clearTimeout(c),c=setTimeout(f,b)}};a.extend(a.fn.bootstrapTable.defaults,{mobileResponsive:!1,minWidth:562,minHeight:void 0,heightThreshold:100,checkOnInit:!0,columnsHidden:[]});var i=a.fn.bootstrapTable.Constructor,j=i.prototype.init;i.prototype.init=function(){if(j.apply(this,Array.prototype.slice.apply(arguments)),this.options.mobileResponsive&&this.options.minWidth){this.options.minWidth<100&&this.options.resizable&&(console.log("The minWidth when the resizable extension is active should be greater or equal than 100"),this.options.minWidth=100);var b=this,c={width:a(window).width(),height:a(window).height()};if(a(window).on("resize orientationchange",h(function(){var e=a(this).height(),f=a(this).width();(Math.abs(c.height-e)>b.options.heightThreshold||c.width!=f)&&(d(b,f,e),c={width:f,height:e})},200)),this.options.checkOnInit){var e=a(window).height(),f=a(window).width();d(this,f,e),c={width:f,height:e}}}}}(jQuery);
|
||||
67
public/libs/bootstrap-table/dist/extensions/multiple-search/bootstrap-table-multiple-search.js
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.0.0
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
multipleSearch: false
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_initSearch = BootstrapTable.prototype.initSearch;
|
||||
|
||||
BootstrapTable.prototype.initSearch = function () {
|
||||
if (this.options.multipleSearch) {
|
||||
var strArray = this.searchText.split(" "),
|
||||
that = this,
|
||||
f = $.isEmptyObject(this.filterColumns) ? null : this.filterColumns,
|
||||
dataFiltered = [];
|
||||
|
||||
if (strArray.length === 1) {
|
||||
_initSearch.apply(this, Array.prototype.slice.apply(arguments));
|
||||
} else {
|
||||
for (var i = 0; i < strArray.length; i++) {
|
||||
var str = strArray[i].trim();
|
||||
dataFiltered = str ? $.grep(dataFiltered.length === 0 ? this.options.data : dataFiltered, function (item, i) {
|
||||
for (var key in item) {
|
||||
key = $.isNumeric(key) ? parseInt(key, 10) : key;
|
||||
var value = item[key],
|
||||
column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, key)],
|
||||
j = $.inArray(key, that.header.fields);
|
||||
|
||||
// Fix #142: search use formated data
|
||||
if (column && column.searchFormatter) {
|
||||
value = $.fn.bootstrapTable.utils.calculateObjectValue(column,
|
||||
that.header.formatters[j], [value, item, i], value);
|
||||
}
|
||||
|
||||
var index = $.inArray(key, that.header.fields);
|
||||
if (index !== -1 && that.header.searchables[index] && (typeof value === 'string' || typeof value === 'number')) {
|
||||
if (that.options.strictSearch) {
|
||||
if ((value + '').toLowerCase() === str) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if ((value + '').toLowerCase().indexOf(str) !== -1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}) : this.data;
|
||||
}
|
||||
|
||||
this.data = dataFiltered;
|
||||
}
|
||||
} else {
|
||||
_initSearch.apply(this, Array.prototype.slice.apply(arguments));
|
||||
}
|
||||
};
|
||||
|
||||
}(jQuery);
|
||||
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";a.extend(a.fn.bootstrapTable.defaults,{multipleSearch:!1});var b=a.fn.bootstrapTable.Constructor,c=b.prototype.initSearch;b.prototype.initSearch=function(){if(this.options.multipleSearch){var b=this.searchText.split(" "),d=this,e=(a.isEmptyObject(this.filterColumns)?null:this.filterColumns,[]);if(1===b.length)c.apply(this,Array.prototype.slice.apply(arguments));else{for(var f=0;f<b.length;f++){var g=b[f].trim();e=g?a.grep(0===e.length?this.options.data:e,function(b,c){for(var e in b){e=a.isNumeric(e)?parseInt(e,10):e;var f=b[e],h=d.columns[a.fn.bootstrapTable.utils.getFieldIndex(d.columns,e)],i=a.inArray(e,d.header.fields);h&&h.searchFormatter&&(f=a.fn.bootstrapTable.utils.calculateObjectValue(h,d.header.formatters[i],[f,b,c],f));var j=a.inArray(e,d.header.fields);if(-1!==j&&d.header.searchables[j]&&("string"==typeof f||"number"==typeof f))if(d.options.strictSearch){if((f+"").toLowerCase()===g)return!0}else if(-1!==(f+"").toLowerCase().indexOf(g))return!0}return!1}):this.data}this.data=e}}else c.apply(this,Array.prototype.slice.apply(arguments))}}(jQuery);
|
||||
378
public/libs/bootstrap-table/dist/extensions/multiple-sort/bootstrap-table-multiple-sort.js
vendored
Normal file
@@ -0,0 +1,378 @@
|
||||
/**
|
||||
* @author Nadim Basalamah <dimbslmh@gmail.com>
|
||||
* @version: v1.0.0
|
||||
* https://github.com/dimbslmh/bootstrap-table/tree/master/src/extensions/multiple-sort/bootstrap-table-multiple-sort.js
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
'use strict';
|
||||
|
||||
var isSingleSort = false;
|
||||
|
||||
var sort_order = {
|
||||
asc: 'Ascending',
|
||||
desc: 'Descending'
|
||||
};
|
||||
|
||||
var showSortModal = function(that) {
|
||||
var _selector = that.$sortModal.selector,
|
||||
_id = _selector.substr(1);
|
||||
|
||||
if (!$(_id).hasClass("modal")) {
|
||||
var sModal = ' <div class="modal fade" id="' + _id + '" tabindex="-1" role="dialog" aria-labelledby="' + _id + 'Label" aria-hidden="true">';
|
||||
sModal += ' <div class="modal-dialog">';
|
||||
sModal += ' <div class="modal-content">';
|
||||
sModal += ' <div class="modal-header">';
|
||||
sModal += ' <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>';
|
||||
sModal += ' <h4 class="modal-title" id="' + _id + 'Label">' + that.options.formatMultipleSort() + '</h4>';
|
||||
sModal += ' </div>';
|
||||
sModal += ' <div class="modal-body">';
|
||||
sModal += ' <div class="bootstrap-table">';
|
||||
sModal += ' <div class="fixed-table-toolbar">';
|
||||
sModal += ' <div class="bars">';
|
||||
sModal += ' <div id="toolbar">';
|
||||
sModal += ' <button id="add" type="button" class="btn btn-default"><i class="' + that.options.iconsPrefix + ' ' + that.options.icons.plus + '"></i> ' + that.options.formatAddLevel() + '</button>';
|
||||
sModal += ' <button id="delete" type="button" class="btn btn-default" disabled><i class="' + that.options.iconsPrefix + ' ' + that.options.icons.minus + '"></i> ' + that.options.formatDeleteLevel() + '</button>';
|
||||
sModal += ' </div>';
|
||||
sModal += ' </div>';
|
||||
sModal += ' </div>';
|
||||
sModal += ' <div class="fixed-table-container">';
|
||||
sModal += ' <table id="multi-sort" class="table">';
|
||||
sModal += ' <thead>';
|
||||
sModal += ' <tr>';
|
||||
sModal += ' <th></th>';
|
||||
sModal += ' <th><div class="th-inner">' + that.options.formatColumn() + '</div></th>';
|
||||
sModal += ' <th><div class="th-inner">' + that.options.formatOrder() + '</div></th>';
|
||||
sModal += ' </tr>';
|
||||
sModal += ' </thead>';
|
||||
sModal += ' <tbody></tbody>';
|
||||
sModal += ' </table>';
|
||||
sModal += ' </div>';
|
||||
sModal += ' </div>';
|
||||
sModal += ' </div>';
|
||||
sModal += ' <div class="modal-footer">';
|
||||
sModal += ' <button type="button" class="btn btn-default" data-dismiss="modal">' + that.options.formatCancel() + '</button>';
|
||||
sModal += ' <button type="button" class="btn btn-primary">' + that.options.formatSort() + '</button>';
|
||||
sModal += ' </div>';
|
||||
sModal += ' </div>';
|
||||
sModal += ' </div>';
|
||||
sModal += ' </div>';
|
||||
|
||||
$("body").append($(sModal));
|
||||
|
||||
that.$sortModal = $(_selector);
|
||||
var $rows = that.$sortModal.find("tbody > tr");
|
||||
|
||||
that.$sortModal.off('click', '#add').on('click', '#add', function() {
|
||||
var total = that.$sortModal.find('.multi-sort-name:first option').length,
|
||||
current = that.$sortModal.find('tbody tr').length;
|
||||
|
||||
if (current < total) {
|
||||
current++;
|
||||
that.addLevel();
|
||||
that.setButtonStates();
|
||||
}
|
||||
});
|
||||
|
||||
that.$sortModal.off('click', '#delete').on('click', '#delete', function() {
|
||||
var total = that.$sortModal.find('.multi-sort-name:first option').length,
|
||||
current = that.$sortModal.find('tbody tr').length;
|
||||
|
||||
if (current > 1 && current <= total) {
|
||||
current--;
|
||||
that.$sortModal.find('tbody tr:last').remove();
|
||||
that.setButtonStates();
|
||||
}
|
||||
});
|
||||
|
||||
that.$sortModal.off('click', '.btn-primary').on('click', '.btn-primary', function() {
|
||||
var $rows = that.$sortModal.find("tbody > tr"),
|
||||
$alert = that.$sortModal.find('div.alert'),
|
||||
fields = [],
|
||||
results = [];
|
||||
|
||||
|
||||
that.options.sortPriority = $.map($rows, function(row) {
|
||||
var $row = $(row),
|
||||
name = $row.find('.multi-sort-name').val(),
|
||||
order = $row.find('.multi-sort-order').val();
|
||||
|
||||
fields.push(name);
|
||||
|
||||
return {
|
||||
sortName: name,
|
||||
sortOrder: order
|
||||
};
|
||||
});
|
||||
|
||||
var sorted_fields = fields.sort();
|
||||
|
||||
for (var i = 0; i < fields.length - 1; i++) {
|
||||
if (sorted_fields[i + 1] == sorted_fields[i]) {
|
||||
results.push(sorted_fields[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (results.length > 0) {
|
||||
if ($alert.length === 0) {
|
||||
$alert = '<div class="alert alert-danger" role="alert"><strong>' + that.options.formatDuplicateAlertTitle() + '</strong> ' + that.options.formatDuplicateAlertDescription() + '</div>';
|
||||
$($alert).insertBefore(that.$sortModal.find('.bars'));
|
||||
}
|
||||
} else {
|
||||
if ($alert.length === 1) {
|
||||
$($alert).remove();
|
||||
}
|
||||
|
||||
that.options.sortName = "";
|
||||
that.onMultipleSort();
|
||||
that.$sortModal.modal('hide');
|
||||
}
|
||||
});
|
||||
|
||||
if (that.options.sortPriority === null || that.options.sortPriority.length === 0) {
|
||||
if (that.options.sortName) {
|
||||
that.options.sortPriority = [{
|
||||
sortName: that.options.sortName,
|
||||
sortOrder: that.options.sortOrder
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
if (that.options.sortPriority !== null && that.options.sortPriority.length > 0) {
|
||||
if ($rows.length < that.options.sortPriority.length && typeof that.options.sortPriority === 'object') {
|
||||
for (var i = 0; i < that.options.sortPriority.length; i++) {
|
||||
that.addLevel(i, that.options.sortPriority[i]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
that.addLevel(0);
|
||||
}
|
||||
|
||||
that.setButtonStates();
|
||||
}
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
showMultiSort: false,
|
||||
sortPriority: null,
|
||||
onMultipleSort: function() {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults.icons, {
|
||||
sort: 'glyphicon-sort',
|
||||
plus: 'glyphicon-plus',
|
||||
minus: 'glyphicon-minus'
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
|
||||
'multiple-sort.bs.table': 'onMultipleSort'
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.locales, {
|
||||
formatMultipleSort: function() {
|
||||
return 'Multiple Sort';
|
||||
},
|
||||
formatAddLevel: function() {
|
||||
return "Add Level";
|
||||
},
|
||||
formatDeleteLevel: function() {
|
||||
return "Delete Level";
|
||||
},
|
||||
formatColumn: function() {
|
||||
return "Column";
|
||||
},
|
||||
formatOrder: function() {
|
||||
return "Order";
|
||||
},
|
||||
formatSortBy: function() {
|
||||
return "Sort by";
|
||||
},
|
||||
formatThenBy: function() {
|
||||
return "Then by";
|
||||
},
|
||||
formatSort: function() {
|
||||
return "Sort";
|
||||
},
|
||||
formatCancel: function() {
|
||||
return "Cancel";
|
||||
},
|
||||
formatDuplicateAlertTitle: function() {
|
||||
return "Duplicate(s) detected!";
|
||||
},
|
||||
formatDuplicateAlertDescription: function() {
|
||||
return "Please remove or change any duplicate column.";
|
||||
}
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_initToolbar = BootstrapTable.prototype.initToolbar;
|
||||
|
||||
BootstrapTable.prototype.initToolbar = function() {
|
||||
this.showToolbar = true;
|
||||
var that = this,
|
||||
sortModalId = '#sortModal_' + this.$el.attr('id');
|
||||
this.$sortModal = $(sortModalId);
|
||||
|
||||
_initToolbar.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (this.options.showMultiSort) {
|
||||
var $btnGroup = this.$toolbar.find('>.btn-group').first(),
|
||||
$multiSortBtn = this.$toolbar.find('div.multi-sort');
|
||||
|
||||
if (!$multiSortBtn.length) {
|
||||
$multiSortBtn = ' <button class="multi-sort btn btn-default' + (this.options.iconSize === undefined ? '' : ' btn-' + this.options.iconSize) + '" type="button" data-toggle="modal" data-target="' + sortModalId + '" title="' + this.options.formatMultipleSort() + '">';
|
||||
$multiSortBtn += ' <i class="' + this.options.iconsPrefix + ' ' + this.options.icons.sort + '"></i>';
|
||||
$multiSortBtn += '</button>';
|
||||
|
||||
$btnGroup.append($multiSortBtn);
|
||||
|
||||
showSortModal(that);
|
||||
}
|
||||
|
||||
this.$el.on('sort.bs.table', function() {
|
||||
isSingleSort = true;
|
||||
});
|
||||
|
||||
this.$el.on('multiple-sort.bs.table', function() {
|
||||
isSingleSort = false;
|
||||
});
|
||||
|
||||
this.$el.on('load-success.bs.table', function() {
|
||||
if (!isSingleSort && that.options.sortPriority !== null && typeof that.options.sortPriority === 'object') {
|
||||
that.onMultipleSort();
|
||||
}
|
||||
});
|
||||
|
||||
this.$el.on('column-switch.bs.table', function(field, checked) {
|
||||
for (var i = 0; i < that.options.sortPriority.length; i++) {
|
||||
if (that.options.sortPriority[i].sortName === checked) {
|
||||
that.options.sortPriority.splice(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
that.assignSortableArrows();
|
||||
that.$sortModal.remove();
|
||||
showSortModal(that);
|
||||
});
|
||||
|
||||
this.$el.on('reset-view.bs.table', function() {
|
||||
if (!isSingleSort && that.options.sortPriority !== null && typeof that.options.sortPriority === 'object') {
|
||||
that.assignSortableArrows();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onMultipleSort = function() {
|
||||
var that = this;
|
||||
|
||||
var cmp = function(x, y) {
|
||||
return x > y ? 1 : x < y ? -1 : 0;
|
||||
};
|
||||
|
||||
var arrayCmp = function(a, b) {
|
||||
var arr1 = [],
|
||||
arr2 = [];
|
||||
|
||||
for (var i = 0; i < that.options.sortPriority.length; i++) {
|
||||
var order = that.options.sortPriority[i].sortOrder === 'desc' ? -1 : 1,
|
||||
aa = a[that.options.sortPriority[i].sortName],
|
||||
bb = b[that.options.sortPriority[i].sortName];
|
||||
|
||||
if (aa === undefined || aa === null) {
|
||||
aa = '';
|
||||
}
|
||||
if (bb === undefined || bb === null) {
|
||||
bb = '';
|
||||
}
|
||||
if ($.isNumeric(aa) && $.isNumeric(bb)) {
|
||||
aa = parseFloat(aa);
|
||||
bb = parseFloat(bb);
|
||||
}
|
||||
if (typeof aa !== 'string') {
|
||||
aa = aa.toString();
|
||||
}
|
||||
|
||||
arr1.push(
|
||||
order * cmp(aa, bb));
|
||||
arr2.push(
|
||||
order * cmp(bb, aa));
|
||||
}
|
||||
|
||||
return cmp(arr1, arr2);
|
||||
};
|
||||
|
||||
this.data.sort(function(a, b) {
|
||||
return arrayCmp(a, b);
|
||||
});
|
||||
|
||||
this.initBody();
|
||||
this.assignSortableArrows();
|
||||
this.trigger('multiple-sort');
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.addLevel = function(index, sortPriority) {
|
||||
var text = index === 0 ? this.options.formatSortBy() : this.options.formatThenBy();
|
||||
|
||||
this.$sortModal.find('tbody')
|
||||
.append($('<tr>')
|
||||
.append($('<td>').text(text))
|
||||
.append($('<td>').append($('<select class="form-control multi-sort-name">')))
|
||||
.append($('<td>').append($('<select class="form-control multi-sort-order">')))
|
||||
);
|
||||
|
||||
var $multiSortName = this.$sortModal.find('.multi-sort-name').last(),
|
||||
$multiSortOrder = this.$sortModal.find('.multi-sort-order').last();
|
||||
|
||||
$.each(this.columns, function (i, column) {
|
||||
if (column.sortable === false || column.visible === false) {
|
||||
return true;
|
||||
}
|
||||
$multiSortName.append('<option value="' + column.field + '">' + column.title + '</option>');
|
||||
});
|
||||
|
||||
$.each(sort_order, function(value, order) {
|
||||
$multiSortOrder.append('<option value="' + value + '">' + order + '</option>');
|
||||
});
|
||||
|
||||
if (sortPriority !== undefined) {
|
||||
$multiSortName.find('option[value="' + sortPriority.sortName + '"]').attr("selected", true);
|
||||
$multiSortOrder.find('option[value="' + sortPriority.sortOrder + '"]').attr("selected", true);
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.assignSortableArrows = function() {
|
||||
var that = this,
|
||||
headers = that.$header.find('th');
|
||||
|
||||
for (var i = 0; i < headers.length; i++) {
|
||||
for (var c = 0; c < that.options.sortPriority.length; c++) {
|
||||
if ($(headers[i]).data('field') === that.options.sortPriority[c].sortName) {
|
||||
$(headers[i]).find('.sortable').removeClass('desc asc').addClass(that.options.sortPriority[c].sortOrder);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.setButtonStates = function() {
|
||||
var total = this.$sortModal.find('.multi-sort-name:first option').length,
|
||||
current = this.$sortModal.find('tbody tr').length;
|
||||
|
||||
if (current == total) {
|
||||
this.$sortModal.find('#add').attr('disabled', 'disabled');
|
||||
}
|
||||
if (current > 1) {
|
||||
this.$sortModal.find('#delete').removeAttr('disabled');
|
||||
}
|
||||
if (current < total) {
|
||||
this.$sortModal.find('#add').removeAttr('disabled');
|
||||
}
|
||||
if (current == 1) {
|
||||
this.$sortModal.find('#delete').attr('disabled', 'disabled');
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
||||
57
public/libs/bootstrap-table/dist/extensions/natural-sorting/bootstrap-table-natural-sorting.js
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
/**
|
||||
* @author: Brian Huisman
|
||||
* @webSite: http://www.greywyvern.com
|
||||
* @version: v1.0.0
|
||||
* JS functions to allow natural sorting on bootstrap-table columns
|
||||
* add data-sorter="alphanum" or data-sorter="numericOnly" to any th
|
||||
*
|
||||
* @update Dennis Hernández <http://djhvscf.github.io/Blog>
|
||||
* @update Duane May
|
||||
*/
|
||||
|
||||
function alphanum(a, b) {
|
||||
function chunkify(t) {
|
||||
var tz = [],
|
||||
x = 0,
|
||||
y = -1,
|
||||
n = 0,
|
||||
i,
|
||||
j;
|
||||
|
||||
while (i = (j = t.charAt(x++)).charCodeAt(0)) {
|
||||
var m = (i === 46 || (i >= 48 && i <= 57));
|
||||
if (m !== n) {
|
||||
tz[++y] = "";
|
||||
n = m;
|
||||
}
|
||||
tz[y] += j;
|
||||
}
|
||||
return tz;
|
||||
}
|
||||
|
||||
var aa = chunkify(a);
|
||||
var bb = chunkify(b);
|
||||
|
||||
for (x = 0; aa[x] && bb[x]; x++) {
|
||||
if (aa[x] !== bb[x]) {
|
||||
var c = Number(aa[x]),
|
||||
d = Number(bb[x]);
|
||||
|
||||
if (c == aa[x] && d == bb[x]) {
|
||||
return c - d;
|
||||
} else {
|
||||
return (aa[x] > bb[x]) ? 1 : -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return aa.length - bb.length;
|
||||
}
|
||||
|
||||
function numericOnly(a, b) {
|
||||
function stripNonNumber(s) {
|
||||
s = s.replace(new RegExp(/[^0-9]/g), "");
|
||||
return parseInt(s, 10);
|
||||
}
|
||||
|
||||
return stripNonNumber(a) - stripNonNumber(b);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
function alphanum(a,b){function c(a){for(var b,c,d=[],e=0,f=-1,g=0;b=(c=a.charAt(e++)).charCodeAt(0);){var h=46===b||b>=48&&57>=b;h!==g&&(d[++f]="",g=h),d[f]+=c}return d}var d=c(a),e=c(b);for(x=0;d[x]&&e[x];x++)if(d[x]!==e[x]){var f=Number(d[x]),g=Number(e[x]);return f==d[x]&&g==e[x]?f-g:d[x]>e[x]?1:-1}return d.length-e.length}function numericOnly(a,b){function c(a){return a=a.replace(new RegExp(/[^0-9]/g),""),parseInt(a,10)}return c(a)-c(b)}
|
||||
121
public/libs/bootstrap-table/dist/extensions/reorder-columns/bootstrap-table-reorder-columns.js
vendored
Normal file
@@ -0,0 +1,121 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.1.0
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
reorderableColumns: false,
|
||||
maxMovingRows: 10,
|
||||
onReorderColumn: function (headerFields) {
|
||||
return false;
|
||||
},
|
||||
dragaccept: null
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
|
||||
'reorder-column.bs.table': 'onReorderColumn'
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_initHeader = BootstrapTable.prototype.initHeader,
|
||||
_toggleColumn = BootstrapTable.prototype.toggleColumn,
|
||||
_toggleView = BootstrapTable.prototype.toggleView,
|
||||
_resetView = BootstrapTable.prototype.resetView;
|
||||
|
||||
BootstrapTable.prototype.initHeader = function () {
|
||||
_initHeader.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.reorderableColumns) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.makeRowsReorderable();
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.toggleColumn = function () {
|
||||
_toggleColumn.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.reorderableColumns) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.makeRowsReorderable();
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.toggleView = function () {
|
||||
_toggleView.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.reorderableColumns) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.options.cardView) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.makeRowsReorderable();
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.resetView = function () {
|
||||
_resetView.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.reorderableColumns) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.makeRowsReorderable();
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.makeRowsReorderable = function () {
|
||||
var that = this;
|
||||
try {
|
||||
$(this.$el).dragtable('destroy');
|
||||
} catch (e) {}
|
||||
$(this.$el).dragtable({
|
||||
maxMovingRows: that.options.maxMovingRows,
|
||||
dragaccept: that.options.dragaccept,
|
||||
clickDelay:200,
|
||||
beforeStop: function() {
|
||||
var ths = [],
|
||||
formatters = [],
|
||||
columns = [],
|
||||
columnsHidden = [],
|
||||
columnIndex = -1;
|
||||
that.$header.find('th').each(function (i) {
|
||||
ths.push($(this).data('field'));
|
||||
formatters.push($(this).data('formatter'));
|
||||
});
|
||||
|
||||
//Exist columns not shown
|
||||
if (ths.length < that.columns.length) {
|
||||
columnsHidden = $.grep(that.columns, function (column) {
|
||||
return !column.visible;
|
||||
});
|
||||
for (var i = 0; i < columnsHidden.length; i++) {
|
||||
ths.push(columnsHidden[i].field);
|
||||
formatters.push(columnsHidden[i].formatter);
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < ths.length; i++ ) {
|
||||
columnIndex = $.fn.bootstrapTable.utils.getFieldIndex(that.columns, ths[i]);
|
||||
if (columnIndex !== -1) {
|
||||
columns.push(that.columns[columnIndex]);
|
||||
that.columns.splice(columnIndex, 1);
|
||||
}
|
||||
}
|
||||
|
||||
that.columns = that.columns.concat(columns);
|
||||
that.header.fields = ths;
|
||||
that.header.formatters = formatters;
|
||||
that.resetView();
|
||||
that.trigger('reorder-column', ths);
|
||||
}
|
||||
});
|
||||
};
|
||||
}(jQuery);
|
||||
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";a.extend(a.fn.bootstrapTable.defaults,{reorderableColumns:!1,maxMovingRows:10,onReorderColumn:function(){return!1},dragaccept:null}),a.extend(a.fn.bootstrapTable.Constructor.EVENTS,{"reorder-column.bs.table":"onReorderColumn"});var b=a.fn.bootstrapTable.Constructor,c=b.prototype.initHeader,d=b.prototype.toggleColumn,e=b.prototype.toggleView,f=b.prototype.resetView;b.prototype.initHeader=function(){c.apply(this,Array.prototype.slice.apply(arguments)),this.options.reorderableColumns&&this.makeRowsReorderable()},b.prototype.toggleColumn=function(){d.apply(this,Array.prototype.slice.apply(arguments)),this.options.reorderableColumns&&this.makeRowsReorderable()},b.prototype.toggleView=function(){e.apply(this,Array.prototype.slice.apply(arguments)),this.options.reorderableColumns&&(this.options.cardView||this.makeRowsReorderable())},b.prototype.resetView=function(){f.apply(this,Array.prototype.slice.apply(arguments)),this.options.reorderableColumns&&this.makeRowsReorderable()},b.prototype.makeRowsReorderable=function(){var b=this;try{a(this.$el).dragtable("destroy")}catch(c){}a(this.$el).dragtable({maxMovingRows:b.options.maxMovingRows,dragaccept:b.options.dragaccept,clickDelay:200,beforeStop:function(){var c=[],d=[],e=[],f=[],g=-1;if(b.$header.find("th").each(function(){c.push(a(this).data("field")),d.push(a(this).data("formatter"))}),c.length<b.columns.length){f=a.grep(b.columns,function(a){return!a.visible});for(var h=0;h<f.length;h++)c.push(f[h].field),d.push(f[h].formatter)}for(var h=0;h<c.length;h++)g=a.fn.bootstrapTable.utils.getFieldIndex(b.columns,c[h]),-1!==g&&(e.push(b.columns[g]),b.columns.splice(g,1));b.columns=b.columns.concat(e),b.header.fields=c,b.header.formatters=d,b.resetView(),b.trigger("reorder-column",c)}})}}(jQuery);
|
||||
14
public/libs/bootstrap-table/dist/extensions/reorder-rows/bootstrap-table-reorder-rows.css
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
.reorder_rows_onDragClass td {
|
||||
background-color: #eee;
|
||||
-webkit-box-shadow: 11px 5px 12px 2px #333, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset;
|
||||
-webkit-box-shadow: 6px 3px 5px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset;
|
||||
-moz-box-shadow: 6px 4px 5px 1px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset;
|
||||
-box-shadow: 6px 4px 5px 1px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset;
|
||||
}
|
||||
|
||||
.reorder_rows_onDragClass td:last-child {
|
||||
-webkit-box-shadow: 8px 7px 12px 0 #333, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset;
|
||||
-webkit-box-shadow: 1px 8px 6px -4px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset;
|
||||
-moz-box-shadow: 0 9px 4px -4px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset, -1px 0 0 #ccc inset;
|
||||
-box-shadow: 0 9px 4px -4px #555, 0 1px 0 #ccc inset, 0 -1px 0 #ccc inset, -1px 0 0 #ccc inset;
|
||||
}
|
||||
116
public/libs/bootstrap-table/dist/extensions/reorder-rows/bootstrap-table-reorder-rows.js
vendored
Normal file
@@ -0,0 +1,116 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.0.0
|
||||
*/
|
||||
|
||||
!function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var isSearch = false;
|
||||
|
||||
var rowAttr = function (row, index) {
|
||||
return {
|
||||
id: 'customId_' + index
|
||||
};
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
reorderableRows: false,
|
||||
onDragStyle: null,
|
||||
onDropStyle: null,
|
||||
onDragClass: "reorder_rows_onDragClass",
|
||||
dragHandle: null,
|
||||
useRowAttrFunc: false,
|
||||
onReorderRowsDrag: function (table, row) {
|
||||
return false;
|
||||
},
|
||||
onReorderRowsDrop: function (table, row) {
|
||||
return false;
|
||||
},
|
||||
onReorderRow: function (newData) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
|
||||
'reorder-row.bs.table': 'onReorderRow'
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_init = BootstrapTable.prototype.init,
|
||||
_initSearch = BootstrapTable.prototype.initSearch;
|
||||
|
||||
BootstrapTable.prototype.init = function () {
|
||||
|
||||
if (!this.options.reorderableRows) {
|
||||
_init.apply(this, Array.prototype.slice.apply(arguments));
|
||||
return;
|
||||
}
|
||||
|
||||
var that = this;
|
||||
if (this.options.useRowAttrFunc) {
|
||||
this.options.rowAttributes = rowAttr;
|
||||
}
|
||||
|
||||
var onPostBody = this.options.onPostBody;
|
||||
this.options.onPostBody = function () {
|
||||
setTimeout(function () {
|
||||
that.makeRowsReorderable();
|
||||
onPostBody.apply();
|
||||
}, 1);
|
||||
};
|
||||
|
||||
_init.apply(this, Array.prototype.slice.apply(arguments));
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initSearch = function () {
|
||||
_initSearch.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.reorderableRows) {
|
||||
return;
|
||||
}
|
||||
|
||||
//Known issue after search if you reorder the rows the data is not display properly
|
||||
//isSearch = true;
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.makeRowsReorderable = function () {
|
||||
if (this.options.cardView) {
|
||||
return;
|
||||
}
|
||||
|
||||
var that = this;
|
||||
this.$el.tableDnD({
|
||||
onDragStyle: that.options.onDragStyle,
|
||||
onDropStyle: that.options.onDropStyle,
|
||||
onDragClass: that.options.onDragClass,
|
||||
onDrop: that.onDrop,
|
||||
onDragStart: that.options.onReorderRowsDrag,
|
||||
dragHandle: that.options.dragHandle
|
||||
});
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onDrop = function (table, droppedRow) {
|
||||
var tableBs = $(table),
|
||||
tableBsData = tableBs.data('bootstrap.table'),
|
||||
tableBsOptions = tableBs.data('bootstrap.table').options,
|
||||
row = null,
|
||||
newData = [];
|
||||
|
||||
for (var i = 0; i < table.tBodies[0].rows.length; i++) {
|
||||
row = $(table.tBodies[0].rows[i]);
|
||||
newData.push(tableBsOptions.data[row.data('index')]);
|
||||
row.data('index', i).attr('data-index', i);
|
||||
}
|
||||
|
||||
tableBsOptions.data = newData;
|
||||
|
||||
//Call the user defined function
|
||||
tableBsOptions.onReorderRowsDrop.apply(table, [table, droppedRow]);
|
||||
|
||||
//Call the event reorder-row
|
||||
tableBsData.trigger('reorder-row', newData);
|
||||
};
|
||||
}(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/reorder-rows/bootstrap-table-reorder-rows.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";var b=function(a,b){return{id:"customId_"+b}};a.extend(a.fn.bootstrapTable.defaults,{reorderableRows:!1,onDragStyle:null,onDropStyle:null,onDragClass:"reorder_rows_onDragClass",dragHandle:null,useRowAttrFunc:!1,onReorderRowsDrag:function(){return!1},onReorderRowsDrop:function(){return!1},onReorderRow:function(){return!1}}),a.extend(a.fn.bootstrapTable.Constructor.EVENTS,{"reorder-row.bs.table":"onReorderRow"});var c=a.fn.bootstrapTable.Constructor,d=c.prototype.init,e=c.prototype.initSearch;c.prototype.init=function(){if(!this.options.reorderableRows)return void d.apply(this,Array.prototype.slice.apply(arguments));var a=this;this.options.useRowAttrFunc&&(this.options.rowAttributes=b);var c=this.options.onPostBody;this.options.onPostBody=function(){setTimeout(function(){a.makeRowsReorderable(),c.apply()},1)},d.apply(this,Array.prototype.slice.apply(arguments))},c.prototype.initSearch=function(){e.apply(this,Array.prototype.slice.apply(arguments)),!this.options.reorderableRows},c.prototype.makeRowsReorderable=function(){if(!this.options.cardView){var a=this;this.$el.tableDnD({onDragStyle:a.options.onDragStyle,onDropStyle:a.options.onDropStyle,onDragClass:a.options.onDragClass,onDrop:a.onDrop,onDragStart:a.options.onReorderRowsDrag,dragHandle:a.options.dragHandle})}},c.prototype.onDrop=function(b,c){for(var d=a(b),e=d.data("bootstrap.table"),f=d.data("bootstrap.table").options,g=null,h=[],i=0;i<b.tBodies[0].rows.length;i++)g=a(b.tBodies[0].rows[i]),h.push(f.data[g.data("index")]),g.data("index",i).attr("data-index",i);f.data=h,f.onReorderRowsDrop.apply(b,[b,c]),e.trigger("reorder-row",h)}}(jQuery);
|
||||
74
public/libs/bootstrap-table/dist/extensions/resizable/bootstrap-table-resizable.js
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
/**
|
||||
* @author: Dennis Hernández
|
||||
* @webSite: http://djhvscf.github.io/Blog
|
||||
* @version: v1.0.0
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
var initResizable = function (that) {
|
||||
//Deletes the plugin to re-create it
|
||||
that.$el.colResizable({disable: true});
|
||||
|
||||
//Creates the plugin
|
||||
that.$el.colResizable({
|
||||
liveDrag: that.options.liveDrag,
|
||||
fixed: that.options.fixed,
|
||||
headerOnly: that.options.headerOnly,
|
||||
minWidth: that.options.minWidth,
|
||||
hoverCursor: that.options.hoverCursor,
|
||||
dragCursor: that.options.dragCursor,
|
||||
onResize: that.onResize,
|
||||
onDrag: that.options.onResizableDrag
|
||||
});
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
resizable: false,
|
||||
liveDrag: false,
|
||||
fixed: true,
|
||||
headerOnly: false,
|
||||
minWidth: 15,
|
||||
hoverCursor: 'e-resize',
|
||||
dragCursor: 'e-resize',
|
||||
onResizableResize: function (e) {
|
||||
return false;
|
||||
},
|
||||
onResizableDrag: function (e) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_toggleView = BootstrapTable.prototype.toggleView,
|
||||
_resetView = BootstrapTable.prototype.resetView;
|
||||
|
||||
BootstrapTable.prototype.toggleView = function () {
|
||||
_toggleView.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (this.options.resizable && this.options.cardView) {
|
||||
//Deletes the plugin
|
||||
$(this.$el).colResizable({disable: true});
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.resetView = function () {
|
||||
var that = this;
|
||||
|
||||
_resetView.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (this.options.resizable) {
|
||||
// because in fitHeader function, we use setTimeout(func, 100);
|
||||
setTimeout(function () {
|
||||
initResizable(that);
|
||||
}, 100);
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onResize = function (e) {
|
||||
var that = $(e.currentTarget);
|
||||
that.bootstrapTable('resetView');
|
||||
that.data('bootstrap.table').options.onResizableResize.apply(e);
|
||||
}
|
||||
})(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/resizable/bootstrap-table-resizable.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";var b=function(a){a.$el.colResizable({disable:!0}),a.$el.colResizable({liveDrag:a.options.liveDrag,fixed:a.options.fixed,headerOnly:a.options.headerOnly,minWidth:a.options.minWidth,hoverCursor:a.options.hoverCursor,dragCursor:a.options.dragCursor,onResize:a.onResize,onDrag:a.options.onResizableDrag})};a.extend(a.fn.bootstrapTable.defaults,{resizable:!1,liveDrag:!1,fixed:!0,headerOnly:!1,minWidth:15,hoverCursor:"e-resize",dragCursor:"e-resize",onResizableResize:function(){return!1},onResizableDrag:function(){return!1}});var c=a.fn.bootstrapTable.Constructor,d=c.prototype.toggleView,e=c.prototype.resetView;c.prototype.toggleView=function(){d.apply(this,Array.prototype.slice.apply(arguments)),this.options.resizable&&this.options.cardView&&a(this.$el).colResizable({disable:!0})},c.prototype.resetView=function(){var a=this;e.apply(this,Array.prototype.slice.apply(arguments)),this.options.resizable&&setTimeout(function(){b(a)},100)},c.prototype.onResize=function(b){var c=a(b.currentTarget);c.bootstrapTable("resetView"),c.data("bootstrap.table").options.onResizableResize.apply(b)}}(jQuery);
|
||||
22
public/libs/bootstrap-table/dist/extensions/sticky-header/bootstrap-table-sticky-header.css
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* @author vincent loh <vincent.ml@gmail.com>
|
||||
* @version: v1.0.0
|
||||
* https://github.com/vinzloh/bootstrap-table/
|
||||
* Sticky header for bootstrap-table
|
||||
*/
|
||||
|
||||
.fix-sticky {
|
||||
position: fixed;
|
||||
z-index: 100;
|
||||
}
|
||||
.fix-sticky thead {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.fix-sticky thead th,
|
||||
.fix-sticky thead th:first-child {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-bottom: 1px solid #eee;
|
||||
border-radius: 0;
|
||||
}
|
||||
104
public/libs/bootstrap-table/dist/extensions/sticky-header/bootstrap-table-sticky-header.js
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
/**
|
||||
* @author vincent loh <vincent.ml@gmail.com>
|
||||
* @version: v1.0.0
|
||||
* https://github.com/vinzloh/bootstrap-table/
|
||||
* Sticky header for bootstrap-table
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
var sprintf = $.fn.bootstrapTable.utils.sprintf;
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
stickyHeader: false
|
||||
});
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_initHeader = BootstrapTable.prototype.initHeader;
|
||||
|
||||
BootstrapTable.prototype.initHeader = function () {
|
||||
var that = this;
|
||||
_initHeader.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.stickyHeader) return;
|
||||
|
||||
var table = this.$tableBody.find('table');
|
||||
var table_id = table.attr('id');
|
||||
var header_id = table.attr('id') + '-sticky-header';
|
||||
var sticky_header_container_id = header_id +'-sticky-header-container';
|
||||
var anchor_begin_id = header_id +'_sticky_anchor_begin';
|
||||
var anchor_end_id = header_id +'_sticky_anchor_end';
|
||||
// add begin and end anchors to track table position
|
||||
|
||||
table.before(sprintf('<div id="%s" class="hidden"></div>', sticky_header_container_id));
|
||||
table.before(sprintf('<div id="%s"></div>', anchor_begin_id));
|
||||
table.after(sprintf('<div id="%s"></div>', anchor_end_id));
|
||||
|
||||
table.find('thead').attr('id', header_id);
|
||||
|
||||
// clone header just once, to be used as sticky header
|
||||
// deep clone header. using source header affects tbody>td width
|
||||
this.$stickyHeader = $($('#'+header_id).clone());
|
||||
// avoid id conflict
|
||||
this.$stickyHeader.removeAttr('id');
|
||||
|
||||
// render sticky on window scroll or resize
|
||||
$(window).on('resize.'+table_id, table, render_sticky_header);
|
||||
$(window).on('scroll.'+table_id, table, render_sticky_header);
|
||||
// render sticky when table scroll left-right
|
||||
table.closest('.fixed-table-container').find('.fixed-table-body').on('scroll.'+table_id, table, match_position_x);
|
||||
|
||||
function render_sticky_header(event){
|
||||
var table = event.data;
|
||||
var table_header_id = table.find('thead').attr('id');
|
||||
// console.log('render_sticky_header for > '+table_header_id);
|
||||
if (table.length < 1 || $('#'+table_id).length < 1){
|
||||
// turn off window listeners
|
||||
$(window).off('resize.'+table_id);
|
||||
$(window).off('scroll.'+table_id);
|
||||
table.closest('.fixed-table-container').find('.fixed-table-body').off('scroll.'+table_id);
|
||||
return;
|
||||
}
|
||||
// get header height
|
||||
var header_height = '0';
|
||||
if (that.options.stickyHeaderOffsetY) header_height = that.options.stickyHeaderOffsetY.replace('px','');
|
||||
// window scroll top
|
||||
var t = $(window).scrollTop();
|
||||
// top anchor scroll position, minus header height
|
||||
var e = $("#"+anchor_begin_id).offset().top - header_height;
|
||||
// bottom anchor scroll position, minus header height, minus sticky height
|
||||
var e_end = $("#"+anchor_end_id).offset().top - header_height - $('#'+table_header_id).css('height').replace('px','');
|
||||
// show sticky when top anchor touches header, and when bottom anchor not exceeded
|
||||
if (t > e && t <= e_end) {
|
||||
// ensure clone and source column widths are the same
|
||||
$.each( that.$stickyHeader.find('tr').eq(0).find('th'), function (index, item) {
|
||||
$(item).css('min-width', $('#'+table_header_id+' tr').eq(0).find('th').eq(index).css('width'));
|
||||
});
|
||||
// match bootstrap table style
|
||||
$("#"+sticky_header_container_id).removeClass('hidden').addClass("fix-sticky fixed-table-container") ;
|
||||
// stick it in position
|
||||
$("#"+sticky_header_container_id).css('top', header_height + 'px');
|
||||
// create scrollable container for header
|
||||
var scrollable_div = $('<div style="position:absolute;width:100%;overflow-x:hidden;" />');
|
||||
// append cloned header to dom
|
||||
$("#"+sticky_header_container_id).html(scrollable_div.append(that.$stickyHeader));
|
||||
// match clone and source header positions when left-right scroll
|
||||
match_position_x(event);
|
||||
} else {
|
||||
// hide sticky
|
||||
$("#"+sticky_header_container_id).removeClass("fix-sticky").addClass('hidden');
|
||||
}
|
||||
|
||||
}
|
||||
function match_position_x(event){
|
||||
var table = event.data;
|
||||
var table_header_id = table.find('thead').attr('id');
|
||||
// match clone and source header positions when left-right scroll
|
||||
$("#"+sticky_header_container_id).css(
|
||||
'width', +table.closest('.fixed-table-body').css('width').replace('px', '') + 1
|
||||
);
|
||||
$("#"+sticky_header_container_id+" thead").parent().scrollLeft(Math.abs($('#'+table_header_id).position().left));
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";var b=a.fn.bootstrapTable.utils.sprintf;a.extend(a.fn.bootstrapTable.defaults,{stickyHeader:!1});var c=a.fn.bootstrapTable.Constructor,d=c.prototype.initHeader;c.prototype.initHeader=function(){function c(b){var c=b.data,d=c.find("thead").attr("id");if(c.length<1||a("#"+h).length<1)return a(window).off("resize."+h),a(window).off("scroll."+h),void c.closest(".fixed-table-container").find(".fixed-table-body").off("scroll."+h);var g="0";f.options.stickyHeaderOffsetY&&(g=f.options.stickyHeaderOffsetY.replace("px",""));var i=a(window).scrollTop(),m=a("#"+k).offset().top-g,n=a("#"+l).offset().top-g-a("#"+d).css("height").replace("px","");if(i>m&&n>=i){a.each(f.$stickyHeader.find("tr").eq(0).find("th"),function(b,c){a(c).css("min-width",a("#"+d+" tr").eq(0).find("th").eq(b).css("width"))}),a("#"+j).removeClass("hidden").addClass("fix-sticky fixed-table-container"),a("#"+j).css("top",g+"px");var o=a('<div style="position:absolute;width:100%;overflow-x:hidden;" />');a("#"+j).html(o.append(f.$stickyHeader)),e(b)}else a("#"+j).removeClass("fix-sticky").addClass("hidden")}function e(b){var c=b.data,d=c.find("thead").attr("id");a("#"+j).css("width",+c.closest(".fixed-table-body").css("width").replace("px","")+1),a("#"+j+" thead").parent().scrollLeft(Math.abs(a("#"+d).position().left))}var f=this;if(d.apply(this,Array.prototype.slice.apply(arguments)),this.options.stickyHeader){var g=this.$tableBody.find("table"),h=g.attr("id"),i=g.attr("id")+"-sticky-header",j=i+"-sticky-header-container",k=i+"_sticky_anchor_begin",l=i+"_sticky_anchor_end";g.before(b('<div id="%s" class="hidden"></div>',j)),g.before(b('<div id="%s"></div>',k)),g.after(b('<div id="%s"></div>',l)),g.find("thead").attr("id",i),this.$stickyHeader=a(a("#"+i).clone()),this.$stickyHeader.removeAttr("id"),a(window).on("resize."+h,g,c),a(window).on("scroll."+h,g,c),g.closest(".fixed-table-container").find(".fixed-table-body").on("scroll."+h,g,e)}}}(jQuery);
|
||||
211
public/libs/bootstrap-table/dist/extensions/toolbar/bootstrap-table-toolbar.js
vendored
Normal file
@@ -0,0 +1,211 @@
|
||||
/**
|
||||
* @author: aperez <aperez@datadec.es>
|
||||
* @version: v2.0.0
|
||||
*
|
||||
* @update Dennis Hernández <http://djhvscf.github.io/Blog>
|
||||
*/
|
||||
|
||||
!function($) {
|
||||
'use strict';
|
||||
|
||||
var firstLoad = false;
|
||||
|
||||
var sprintf = $.fn.bootstrapTable.utils.sprintf;
|
||||
|
||||
var showAvdSearch = function(pColumns, searchTitle, searchText, that) {
|
||||
if (!$("#avdSearchModal" + "_" + that.options.idTable).hasClass("modal")) {
|
||||
var vModal = sprintf("<div id=\"avdSearchModal%s\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"mySmallModalLabel\" aria-hidden=\"true\">", "_" + that.options.idTable);
|
||||
vModal += "<div class=\"modal-dialog modal-xs\">";
|
||||
vModal += " <div class=\"modal-content\">";
|
||||
vModal += " <div class=\"modal-header\">";
|
||||
vModal += " <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\" >×</button>";
|
||||
vModal += sprintf(" <h4 class=\"modal-title\">%s</h4>", searchTitle);
|
||||
vModal += " </div>";
|
||||
vModal += " <div class=\"modal-body modal-body-custom\">";
|
||||
vModal += sprintf(" <div class=\"container-fluid\" id=\"avdSearchModalContent%s\" style=\"padding-right: 0px;padding-left: 0px;\" >", "_" + that.options.idTable);
|
||||
vModal += " </div>";
|
||||
vModal += " </div>";
|
||||
vModal += " </div>";
|
||||
vModal += " </div>";
|
||||
vModal += "</div>";
|
||||
|
||||
$("body").append($(vModal));
|
||||
|
||||
var vFormAvd = createFormAvd(pColumns, searchText, that),
|
||||
timeoutId = 0;;
|
||||
|
||||
$('#avdSearchModalContent' + "_" + that.options.idTable).append(vFormAvd.join(''));
|
||||
|
||||
$('#' + that.options.idForm).off('keyup blur', 'input').on('keyup blur', 'input', function (event) {
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = setTimeout(function () {
|
||||
that.onColumnAdvancedSearch(event);
|
||||
}, that.options.searchTimeOut);
|
||||
});
|
||||
|
||||
$("#btnCloseAvd" + "_" + that.options.idTable).click(function() {
|
||||
$("#avdSearchModal" + "_" + that.options.idTable).modal('hide');
|
||||
});
|
||||
|
||||
$("#avdSearchModal" + "_" + that.options.idTable).modal();
|
||||
} else {
|
||||
$("#avdSearchModal" + "_" + that.options.idTable).modal();
|
||||
}
|
||||
};
|
||||
|
||||
var createFormAvd = function(pColumns, searchText, that) {
|
||||
var htmlForm = [];
|
||||
htmlForm.push(sprintf('<form class="form-horizontal" id="%s" action="%s" >', that.options.idForm, that.options.actionForm));
|
||||
for (var i in pColumns) {
|
||||
var vObjCol = pColumns[i];
|
||||
if (!vObjCol.checkbox && vObjCol.visible && vObjCol.searchable) {
|
||||
htmlForm.push('<div class="form-group">');
|
||||
htmlForm.push(sprintf('<label class="col-sm-4 control-label">%s</label>', vObjCol.title));
|
||||
htmlForm.push('<div class="col-sm-6">');
|
||||
htmlForm.push(sprintf('<input type="text" class="form-control input-md" name="%s" placeholder="%s" id="%s">', vObjCol.field, vObjCol.title, vObjCol.field));
|
||||
htmlForm.push('</div>');
|
||||
htmlForm.push('</div>');
|
||||
}
|
||||
}
|
||||
|
||||
htmlForm.push('<div class="form-group">');
|
||||
htmlForm.push('<div class="col-sm-offset-9 col-sm-3">');
|
||||
htmlForm.push(sprintf('<button type="button" id="btnCloseAvd%s" class="btn btn-default" >%s</button>', "_" + that.options.idTable, searchText));
|
||||
htmlForm.push('</div>');
|
||||
htmlForm.push('</div>');
|
||||
htmlForm.push('</form>');
|
||||
|
||||
return htmlForm;
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, {
|
||||
advancedSearch: false,
|
||||
idForm: 'advancedSearch',
|
||||
actionForm: '',
|
||||
idTable: undefined,
|
||||
onColumnAdvancedSearch: function (field, text) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults.icons, {
|
||||
advancedSearchIcon: 'glyphicon-chevron-down'
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.Constructor.EVENTS, {
|
||||
'column-advanced-search.bs.table': 'onColumnAdvancedSearch'
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.locales, {
|
||||
formatAdvancedSearch: function() {
|
||||
return 'Advanced search';
|
||||
},
|
||||
formatAdvancedCloseButton: function() {
|
||||
return "Close";
|
||||
}
|
||||
});
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
|
||||
|
||||
var BootstrapTable = $.fn.bootstrapTable.Constructor,
|
||||
_initToolbar = BootstrapTable.prototype.initToolbar,
|
||||
_load = BootstrapTable.prototype.load,
|
||||
_initSearch = BootstrapTable.prototype.initSearch;
|
||||
|
||||
BootstrapTable.prototype.initToolbar = function() {
|
||||
_initToolbar.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.search) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.options.advancedSearch) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.options.idTable) {
|
||||
return;
|
||||
}
|
||||
|
||||
var that = this,
|
||||
html = [];
|
||||
|
||||
html.push(sprintf('<div class="columns columns-%s btn-group pull-%s" role="group">', this.options.buttonsAlign, this.options.buttonsAlign));
|
||||
html.push(sprintf('<button class="btn btn-default%s' + '" type="button" name="advancedSearch" title="%s">', that.options.iconSize === undefined ? '' : ' btn-' + that.options.iconSize, that.options.formatAdvancedSearch()));
|
||||
html.push(sprintf('<i class="%s %s"></i>', that.options.iconsPrefix, that.options.icons.advancedSearchIcon))
|
||||
html.push('</button></div>');
|
||||
|
||||
that.$toolbar.prepend(html.join(''));
|
||||
|
||||
that.$toolbar.find('button[name="advancedSearch"]')
|
||||
.off('click').on('click', function() {
|
||||
showAvdSearch(that.columns, that.options.formatAdvancedSearch(), that.options.formatAdvancedCloseButton(), that);
|
||||
});
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.load = function(data) {
|
||||
_load.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.advancedSearch) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof this.options.idTable === 'undefined') {
|
||||
return;
|
||||
} else {
|
||||
if (!firstLoad) {
|
||||
var height = parseInt($(".bootstrap-table").height());
|
||||
height += 10;
|
||||
$("#" + this.options.idTable).bootstrapTable("resetView", {height: height});
|
||||
firstLoad = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.initSearch = function () {
|
||||
_initSearch.apply(this, Array.prototype.slice.apply(arguments));
|
||||
|
||||
if (!this.options.advancedSearch) {
|
||||
return;
|
||||
}
|
||||
|
||||
var that = this;
|
||||
var fp = $.isEmptyObject(this.filterColumnsPartial) ? null : this.filterColumnsPartial;
|
||||
|
||||
this.data = fp ? $.grep(this.data, function (item, i) {
|
||||
for (var key in fp) {
|
||||
var fval = fp[key].toLowerCase();
|
||||
var value = item[key];
|
||||
value = $.fn.bootstrapTable.utils.calculateObjectValue(that.header,
|
||||
that.header.formatters[$.inArray(key, that.header.fields)],
|
||||
[value, item, i], value);
|
||||
|
||||
if (!($.inArray(key, that.header.fields) !== -1 &&
|
||||
(typeof value === 'string' || typeof value === 'number') &&
|
||||
(value + '').toLowerCase().indexOf(fval) !== -1)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}) : this.data;
|
||||
};
|
||||
|
||||
BootstrapTable.prototype.onColumnAdvancedSearch = function (event) {
|
||||
var text = $.trim($(event.currentTarget).val());
|
||||
var $field = $(event.currentTarget)[0].id;
|
||||
|
||||
if ($.isEmptyObject(this.filterColumnsPartial)) {
|
||||
this.filterColumnsPartial = {};
|
||||
}
|
||||
if (text) {
|
||||
this.filterColumnsPartial[$field] = text;
|
||||
} else {
|
||||
delete this.filterColumnsPartial[$field];
|
||||
}
|
||||
|
||||
this.options.pageNumber = 1;
|
||||
this.onSearch(event);
|
||||
this.updatePagination();
|
||||
this.trigger('column-advanced-search', $field, text);
|
||||
};
|
||||
}(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/extensions/toolbar/bootstrap-table-toolbar.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";var b=!1,c=a.fn.bootstrapTable.utils.sprintf,d=function(b,d,f,g){if(a("#avdSearchModal_"+g.options.idTable).hasClass("modal"))a("#avdSearchModal_"+g.options.idTable).modal();else{var h=c('<div id="avdSearchModal%s" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">',"_"+g.options.idTable);h+='<div class="modal-dialog modal-xs">',h+=' <div class="modal-content">',h+=' <div class="modal-header">',h+=' <button type="button" class="close" data-dismiss="modal" aria-hidden="true" >×</button>',h+=c(' <h4 class="modal-title">%s</h4>',d),h+=" </div>",h+=' <div class="modal-body modal-body-custom">',h+=c(' <div class="container-fluid" id="avdSearchModalContent%s" style="padding-right: 0px;padding-left: 0px;" >',"_"+g.options.idTable),h+=" </div>",h+=" </div>",h+=" </div>",h+=" </div>",h+="</div>",a("body").append(a(h));var i=e(b,f,g),j=0;a("#avdSearchModalContent_"+g.options.idTable).append(i.join("")),a("#"+g.options.idForm).off("keyup blur","input").on("keyup blur","input",function(a){clearTimeout(j),j=setTimeout(function(){g.onColumnAdvancedSearch(a)},g.options.searchTimeOut)}),a("#btnCloseAvd_"+g.options.idTable).click(function(){a("#avdSearchModal_"+g.options.idTable).modal("hide")}),a("#avdSearchModal_"+g.options.idTable).modal()}},e=function(a,b,d){var e=[];e.push(c('<form class="form-horizontal" id="%s" action="%s" >',d.options.idForm,d.options.actionForm));for(var f in a){var g=a[f];!g.checkbox&&g.visible&&g.searchable&&(e.push('<div class="form-group">'),e.push(c('<label class="col-sm-4 control-label">%s</label>',g.title)),e.push('<div class="col-sm-6">'),e.push(c('<input type="text" class="form-control input-md" name="%s" placeholder="%s" id="%s">',g.field,g.title,g.field)),e.push("</div>"),e.push("</div>"))}return e.push('<div class="form-group">'),e.push('<div class="col-sm-offset-9 col-sm-3">'),e.push(c('<button type="button" id="btnCloseAvd%s" class="btn btn-default" >%s</button>',"_"+d.options.idTable,b)),e.push("</div>"),e.push("</div>"),e.push("</form>"),e};a.extend(a.fn.bootstrapTable.defaults,{advancedSearch:!1,idForm:"advancedSearch",actionForm:"",idTable:void 0,onColumnAdvancedSearch:function(){return!1}}),a.extend(a.fn.bootstrapTable.defaults.icons,{advancedSearchIcon:"glyphicon-chevron-down"}),a.extend(a.fn.bootstrapTable.Constructor.EVENTS,{"column-advanced-search.bs.table":"onColumnAdvancedSearch"}),a.extend(a.fn.bootstrapTable.locales,{formatAdvancedSearch:function(){return"Advanced search"},formatAdvancedCloseButton:function(){return"Close"}}),a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales);var f=a.fn.bootstrapTable.Constructor,g=f.prototype.initToolbar,h=f.prototype.load,i=f.prototype.initSearch;f.prototype.initToolbar=function(){if(g.apply(this,Array.prototype.slice.apply(arguments)),this.options.search&&this.options.advancedSearch&&this.options.idTable){var a=this,b=[];b.push(c('<div class="columns columns-%s btn-group pull-%s" role="group">',this.options.buttonsAlign,this.options.buttonsAlign)),b.push(c('<button class="btn btn-default%s" type="button" name="advancedSearch" title="%s">',void 0===a.options.iconSize?"":" btn-"+a.options.iconSize,a.options.formatAdvancedSearch())),b.push(c('<i class="%s %s"></i>',a.options.iconsPrefix,a.options.icons.advancedSearchIcon)),b.push("</button></div>"),a.$toolbar.prepend(b.join("")),a.$toolbar.find('button[name="advancedSearch"]').off("click").on("click",function(){d(a.columns,a.options.formatAdvancedSearch(),a.options.formatAdvancedCloseButton(),a)})}},f.prototype.load=function(){if(h.apply(this,Array.prototype.slice.apply(arguments)),this.options.advancedSearch&&"undefined"!=typeof this.options.idTable&&!b){var c=parseInt(a(".bootstrap-table").height());c+=10,a("#"+this.options.idTable).bootstrapTable("resetView",{height:c}),b=!0}},f.prototype.initSearch=function(){if(i.apply(this,Array.prototype.slice.apply(arguments)),this.options.advancedSearch){var b=this,c=a.isEmptyObject(this.filterColumnsPartial)?null:this.filterColumnsPartial;this.data=c?a.grep(this.data,function(d,e){for(var f in c){var g=c[f].toLowerCase(),h=d[f];if(h=a.fn.bootstrapTable.utils.calculateObjectValue(b.header,b.header.formatters[a.inArray(f,b.header.fields)],[h,d,e],h),-1===a.inArray(f,b.header.fields)||"string"!=typeof h&&"number"!=typeof h||-1===(h+"").toLowerCase().indexOf(g))return!1}return!0}):this.data}},f.prototype.onColumnAdvancedSearch=function(b){var c=a.trim(a(b.currentTarget).val()),d=a(b.currentTarget)[0].id;a.isEmptyObject(this.filterColumnsPartial)&&(this.filterColumnsPartial={}),c?this.filterColumnsPartial[d]=c:delete this.filterColumnsPartial[d],this.options.pageNumber=1,this.onSearch(b),this.updatePagination(),this.trigger("column-advanced-search",d,c)}}(jQuery);
|
||||
40
public/libs/bootstrap-table/dist/locale/bootstrap-table-af-ZA.js
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Bootstrap Table Afrikaans translation
|
||||
* Author: Phillip Kruger <phillip.kruger@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
$.fn.bootstrapTable.locales['af-ZA'] = {
|
||||
formatLoadingMessage: function () {
|
||||
return 'Besig om te laai, wag asseblief ...';
|
||||
},
|
||||
formatRecordsPerPage: function (pageNumber) {
|
||||
return pageNumber + ' rekords per bladsy';
|
||||
},
|
||||
formatShowingRows: function (pageFrom, pageTo, totalRows) {
|
||||
return 'Resultate ' + pageFrom + ' tot ' + pageTo + ' van ' + totalRows + ' rye';
|
||||
},
|
||||
formatSearch: function () {
|
||||
return 'Soek';
|
||||
},
|
||||
formatNoMatches: function () {
|
||||
return 'Geen rekords gevind nie';
|
||||
},
|
||||
formatPaginationSwitch: function () {
|
||||
return 'Wys/verberg bladsy nummering';
|
||||
},
|
||||
formatRefresh: function () {
|
||||
return 'Herlaai';
|
||||
},
|
||||
formatToggle: function () {
|
||||
return 'Wissel';
|
||||
},
|
||||
formatColumns: function () {
|
||||
return 'Kolomme';
|
||||
}
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['af-ZA']);
|
||||
|
||||
})(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/locale/bootstrap-table-af-ZA.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";a.fn.bootstrapTable.locales["af-ZA"]={formatLoadingMessage:function(){return"Besig om te laai, wag asseblief ..."},formatRecordsPerPage:function(a){return a+" rekords per bladsy"},formatShowingRows:function(a,b,c){return"Resultate "+a+" tot "+b+" van "+c+" rye"},formatSearch:function(){return"Soek"},formatNoMatches:function(){return"Geen rekords gevind nie"},formatPaginationSwitch:function(){return"Wys/verberg bladsy nummering"},formatRefresh:function(){return"Herlaai"},formatToggle:function(){return"Wissel"},formatColumns:function(){return"Kolomme"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["af-ZA"])}(jQuery);
|
||||
40
public/libs/bootstrap-table/dist/locale/bootstrap-table-ar-SA.js
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Bootstrap Table English translation
|
||||
* Author: Zhixin Wen<wenzhixin2010@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
$.fn.bootstrapTable.locales['ar-SA'] = {
|
||||
formatLoadingMessage: function () {
|
||||
return 'جاري التحميل, يرجى الإنتظار...';
|
||||
},
|
||||
formatRecordsPerPage: function (pageNumber) {
|
||||
return pageNumber + ' سجل لكل صفحة';
|
||||
},
|
||||
formatShowingRows: function (pageFrom, pageTo, totalRows) {
|
||||
return 'الظاهر ' + pageFrom + ' إلى ' + pageTo + ' من ' + totalRows + ' سجل';
|
||||
},
|
||||
formatSearch: function () {
|
||||
return 'بحث';
|
||||
},
|
||||
formatNoMatches: function () {
|
||||
return 'لا توجد نتائج مطابقة للبحث';
|
||||
},
|
||||
formatPaginationSwitch: function () {
|
||||
return 'إخفاء\إظهار ترقيم الصفحات';
|
||||
},
|
||||
formatRefresh: function () {
|
||||
return 'تحديث';
|
||||
},
|
||||
formatToggle: function () {
|
||||
return 'تغيير';
|
||||
},
|
||||
formatColumns: function () {
|
||||
return 'أعمدة';
|
||||
}
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ar-SA']);
|
||||
|
||||
})(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/locale/bootstrap-table-ar-SA.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";a.fn.bootstrapTable.locales["ar-SA"]={formatLoadingMessage:function(){return"جاري التحميل, يرجى الإنتظار..."},formatRecordsPerPage:function(a){return a+" سجل لكل صفحة"},formatShowingRows:function(a,b,c){return"الظاهر "+a+" إلى "+b+" من "+c+" سجل"},formatSearch:function(){return"بحث"},formatNoMatches:function(){return"لا توجد نتائج مطابقة للبحث"},formatPaginationSwitch:function(){return"إخفاءإظهار ترقيم الصفحات"},formatRefresh:function(){return"تحديث"},formatToggle:function(){return"تغيير"},formatColumns:function(){return"أعمدة"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["ar-SA"])}(jQuery);
|
||||
44
public/libs/bootstrap-table/dist/locale/bootstrap-table-ca-ES.js
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* Bootstrap Table Catalan translation
|
||||
* Authors: Marc Pina<iwalkalone69@gmail.com>
|
||||
* Claudi Martinez<claudix.kernel@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
$.fn.bootstrapTable.locales['ca-ES'] = {
|
||||
formatLoadingMessage: function () {
|
||||
return 'Espereu, si us plau...';
|
||||
},
|
||||
formatRecordsPerPage: function (pageNumber) {
|
||||
return pageNumber + ' resultats per pàgina';
|
||||
},
|
||||
formatShowingRows: function (pageFrom, pageTo, totalRows) {
|
||||
return 'Mostrant de ' + pageFrom + ' fins ' + pageTo + ' - total ' + totalRows + ' resultats';
|
||||
},
|
||||
formatSearch: function () {
|
||||
return 'Cerca';
|
||||
},
|
||||
formatNoMatches: function () {
|
||||
return 'No s\'han trobat resultats';
|
||||
},
|
||||
formatPaginationSwitch: function () {
|
||||
return 'Amaga/Mostra paginació';
|
||||
},
|
||||
formatRefresh: function () {
|
||||
return 'Refresca';
|
||||
},
|
||||
formatToggle: function () {
|
||||
return 'Alterna formatació';
|
||||
},
|
||||
formatColumns: function () {
|
||||
return 'Columnes';
|
||||
},
|
||||
formatAllRows: function () {
|
||||
return 'Tots';
|
||||
}
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['ca-ES']);
|
||||
|
||||
})(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/locale/bootstrap-table-ca-ES.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";a.fn.bootstrapTable.locales["ca-ES"]={formatLoadingMessage:function(){return"Espereu, si us plau..."},formatRecordsPerPage:function(a){return a+" resultats per pàgina"},formatShowingRows:function(a,b,c){return"Mostrant de "+a+" fins "+b+" - total "+c+" resultats"},formatSearch:function(){return"Cerca"},formatNoMatches:function(){return"No s'han trobat resultats"},formatPaginationSwitch:function(){return"Amaga/Mostra paginació"},formatRefresh:function(){return"Refresca"},formatToggle:function(){return"Alterna formatació"},formatColumns:function(){return"Columnes"},formatAllRows:function(){return"Tots"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["ca-ES"])}(jQuery);
|
||||
44
public/libs/bootstrap-table/dist/locale/bootstrap-table-cs-CZ.js
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* Bootstrap Table Czech translation
|
||||
* Author: Lukas Kral (monarcha@seznam.cz)
|
||||
* Author: Jakub Svestka <svestka1999@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
$.fn.bootstrapTable.locales['cs-CZ'] = {
|
||||
formatLoadingMessage: function () {
|
||||
return 'Čekejte, prosím...';
|
||||
},
|
||||
formatRecordsPerPage: function (pageNumber) {
|
||||
return pageNumber + ' položek na stránku';
|
||||
},
|
||||
formatShowingRows: function (pageFrom, pageTo, totalRows) {
|
||||
return 'Zobrazena ' + pageFrom + '. - ' + pageTo + '. položka z celkových ' + totalRows;
|
||||
},
|
||||
formatSearch: function () {
|
||||
return 'Vyhledávání';
|
||||
},
|
||||
formatNoMatches: function () {
|
||||
return 'Nenalezena žádná vyhovující položka';
|
||||
},
|
||||
formatPaginationSwitch: function () {
|
||||
return 'Skrýt/Zobrazit stránkování';
|
||||
},
|
||||
formatRefresh: function () {
|
||||
return 'Aktualizovat';
|
||||
},
|
||||
formatToggle: function () {
|
||||
return 'Přepni';
|
||||
},
|
||||
formatColumns: function () {
|
||||
return 'Sloupce';
|
||||
},
|
||||
formatAllRows: function () {
|
||||
return 'Vše';
|
||||
}
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['cs-CZ']);
|
||||
|
||||
})(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/locale/bootstrap-table-cs-CZ.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";a.fn.bootstrapTable.locales["cs-CZ"]={formatLoadingMessage:function(){return"Čekejte, prosím..."},formatRecordsPerPage:function(a){return a+" položek na stránku"},formatShowingRows:function(a,b,c){return"Zobrazena "+a+". - "+b+". položka z celkových "+c},formatSearch:function(){return"Vyhledávání"},formatNoMatches:function(){return"Nenalezena žádná vyhovující položka"},formatPaginationSwitch:function(){return"Skrýt/Zobrazit stránkování"},formatRefresh:function(){return"Aktualizovat"},formatToggle:function(){return"Přepni"},formatColumns:function(){return"Sloupce"},formatAllRows:function(){return"Vše"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["cs-CZ"])}(jQuery);
|
||||
37
public/libs/bootstrap-table/dist/locale/bootstrap-table-da-DK.js
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Bootstrap Table danish translation
|
||||
* Author: Your Name Jan Borup Coyle, github@coyle.dk
|
||||
*/
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
$.fn.bootstrapTable.locales['da-DK'] = {
|
||||
formatLoadingMessage: function () {
|
||||
return 'Indlæser, vent venligst...';
|
||||
},
|
||||
formatRecordsPerPage: function (pageNumber) {
|
||||
return pageNumber + ' poster pr side';
|
||||
},
|
||||
formatShowingRows: function (pageFrom, pageTo, totalRows) {
|
||||
return 'Viser ' + pageFrom + ' til ' + pageTo + ' af ' + totalRows + ' rækker';
|
||||
},
|
||||
formatSearch: function () {
|
||||
return 'Søg';
|
||||
},
|
||||
formatNoMatches: function () {
|
||||
return 'Ingen poster fundet';
|
||||
},
|
||||
formatRefresh: function () {
|
||||
return 'Opdater';
|
||||
},
|
||||
formatToggle: function () {
|
||||
return 'Skift';
|
||||
},
|
||||
formatColumns: function () {
|
||||
return 'Kolonner';
|
||||
}
|
||||
};
|
||||
|
||||
$.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['da-DK']);
|
||||
|
||||
})(jQuery);
|
||||
7
public/libs/bootstrap-table/dist/locale/bootstrap-table-da-DK.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* bootstrap-table - v1.10.0 - 2016-01-18
|
||||
* https://github.com/wenzhixin/bootstrap-table
|
||||
* Copyright (c) 2016 zhixin wen
|
||||
* Licensed MIT License
|
||||
*/
|
||||
!function(a){"use strict";a.fn.bootstrapTable.locales["da-DK"]={formatLoadingMessage:function(){return"Indlæser, vent venligst..."},formatRecordsPerPage:function(a){return a+" poster pr side"},formatShowingRows:function(a,b,c){return"Viser "+a+" til "+b+" af "+c+" rækker"},formatSearch:function(){return"Søg"},formatNoMatches:function(){return"Ingen poster fundet"},formatRefresh:function(){return"Opdater"},formatToggle:function(){return"Skift"},formatColumns:function(){return"Kolonner"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["da-DK"])}(jQuery);
|
||||