diff --git a/static/js/nav.js b/static/js/nav.js
new file mode 100644
index 0000000..51b6db5
--- /dev/null
+++ b/static/js/nav.js
@@ -0,0 +1,27 @@
+$(function(){
+ // nav收缩展开
+ $('.nav-item>a').on('click',function(){
+ if (!$('.nav').hasClass('nav-mini')) {
+ if ($(this).next().css('display') == "none") {
+ //展开未展开
+ $('.nav-item').children('ul').slideUp(300);
+ $(this).next('ul').slideDown(300);
+ $(this).parent('li').addClass('nav-show').siblings('li').removeClass('nav-show');
+ }else{
+ //收缩已展开
+ $(this).next('ul').slideUp(300);
+ $('.nav-item.nav-show').removeClass('nav-show');
+ }
+ }
+ });
+ //nav-mini切换
+ $('#mini').on('click',function(){
+ if (!$('.nav').hasClass('nav-mini')) {
+ $('.nav-item.nav-show').removeClass('nav-show');
+ $('.nav-item').children('ul').removeAttr('style');
+ $('.nav').addClass('nav-mini');
+ }else{
+ $('.nav').removeClass('nav-mini');
+ }
+ });
+});
\ No newline at end of file
diff --git a/static/js/npm.js b/static/js/npm.js
new file mode 100644
index 0000000..bf6aa80
--- /dev/null
+++ b/static/js/npm.js
@@ -0,0 +1,13 @@
+// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
+require('../../js/transition.js')
+require('../../js/alert.js')
+require('../../js/button.js')
+require('../../js/carousel.js')
+require('../../js/collapse.js')
+require('../../js/dropdown.js')
+require('../../js/modal.js')
+require('../../js/tooltip.js')
+require('../../js/popover.js')
+require('../../js/scrollspy.js')
+require('../../js/tab.js')
+require('../../js/affix.js')
\ No newline at end of file
diff --git a/static/js/pintuer.js b/static/js/pintuer.js
new file mode 100644
index 0000000..131aa38
--- /dev/null
+++ b/static/js/pintuer.js
@@ -0,0 +1,503 @@
+$(function(){
+ $(".win-homepage").click(function(){
+ if(document.all){
+ document.body.style.behavior = 'url(#default#homepage)';
+ document.body.setHomePage(document.URL);
+ }else{alert("设置首页失败,请手动设置!");}
+ });
+ $(".win-favorite").click(function(){
+ var sURL=document.URL;
+ var sTitle=document.title;
+ try {window.external.addFavorite(sURL, sTitle);}
+ catch(e){
+ try{window.sidebar.addPanel(sTitle, sURL, "");}
+ catch(e){alert("加入收藏失败,请使用Ctrl+D进行添加");}
+ }
+ });
+ $(".win-forward").click(function(){
+ window.history.forward(1);
+ });
+ $(".win-back").click(function(){
+ window.history.back(-1);
+ });
+ $(".win-backtop").click(function(){$('body,html').animate({scrollTop:0},1000);return false;});
+ $(".win-refresh").click(function(){
+ window.location.reload();
+ });
+ $(".win-print").click(function(){
+ window.print();
+ });
+ $(".win-close").click(function(){
+ window.close();
+ });
+ $('.checkall').click(function(){
+ var e=$(this);
+ var name=e.attr("name");
+ var checkfor=e.attr("checkfor");
+ var type;
+ if (checkfor!='' && checkfor!=null && checkfor!=undefined){
+ type=e.closest('form').find("input[name='"+checkfor+"']");
+ }else{
+ type=e.closest('form').find("input[type='checkbox']");
+ };
+ if (name=="checkall"){
+ $(type).each(function(index, element){
+ element.checked=true;
+ });
+ e.attr("name","ok");
+ }else{
+ $(type).each(function(index, element){
+ element.checked=false;
+ });
+ e.attr("name","checkall");
+ }
+ });
+ $('.dropdown-toggle').click(function(){
+ $(this).closest('.button-group, .drop').addClass("open");
+ });
+ $(document).bind("click",function(e){
+ if($(e.target).closest(".button-group.open, .drop.open").length == 0){
+ $(".button-group, .drop").removeClass("open");
+ }
+ });
+ $checkplaceholder=function(){
+ var input = document.createElement('input');
+ return 'placeholder' in input;
+ };
+ if(!$checkplaceholder()){
+ $("textarea[placeholder], input[placeholder]").each(function(index, element){
+ var content=false;
+ if($(this).val().length ===0 || $(this).val()==$(this).attr("placeholder")){content=true};
+ if(content){
+ $(element).val($(element).attr("placeholder"));
+ $(element).css("color","rgb(169,169,169)");
+ $(element).data("pintuerholder",$(element).css("color"));
+ $(element).focus(function(){$hideplaceholder($(this));});
+ $(element).blur(function(){$showplaceholder($(this));});
+ }
+ })
+ };
+ $showplaceholder=function(element){
+ if( ($(element).val().length ===0 || $(element).val()==$(element).attr("placeholder")) && $(element).attr("type")!="password"){
+ $(element).val($(element).attr("placeholder"));
+ $(element).data("pintuerholder",$(element).css("color"));
+ $(element).css("color","rgb(169,169,169)");
+ }
+ };
+ var $hideplaceholder=function(element){
+ if($(element).data("pintuerholder")){
+ $(element).val("");
+ $(element).css("color", $(element).data("pintuerholder"));
+ $(element).removeData("pintuerholder");
+ }
+ };
+ $('textarea, input, select').blur(function(){
+ var e=$(this);
+ if(e.attr("data-validate")){
+ e.closest('.field').find(".input-help").remove();
+ var $checkdata=e.attr("data-validate").split(',');
+ var $checkvalue=e.val();
+ var $checkstate=true;
+ var $checktext="";
+ if(e.attr("placeholder")==$checkvalue){$checkvalue="";}
+ if($checkvalue!="" || e.attr("data-validate").indexOf("required")>=0){
+ for(var i=0;i<$checkdata.length;i++){
+ var $checktype=$checkdata[i].split(':');
+ if(! $pintuercheck(e,$checktype[0],$checkvalue)){
+ $checkstate=false;
+ $checktext=$checktext+"
"+$checktype[1]+"";
+ }
+ }
+ };
+ if($checkstate){
+ e.closest('.form-group').removeClass("check-error");
+ e.parent().find(".input-help").remove();
+ e.closest('.form-group').addClass("check-success");
+ }else{
+ e.closest('.form-group').removeClass("check-success");
+ e.closest('.form-group').addClass("check-error");
+ e.closest('.field').append('');
+ }
+ }
+ });
+ $pintuercheck=function(element,type,value){
+ $pintu=value.replace(/(^\s*)|(\s*$)/g, "");
+ switch(type){
+ case "required":return /[^(^\s*)|(\s*$)]/.test($pintu);break;
+ case "chinese":return /^[\u0391-\uFFE5]+$/.test($pintu);break;
+ case "number":return /^\d+$/.test($pintu);break;
+ case "integer":return /^[-\+]?\d+$/.test($pintu);break;
+ case "plusinteger":return /^[+]?\d+$/.test($pintu);break;
+ case "double":return /^[-\+]?\d+(\.\d+)?$/.test($pintu);break;
+ case "plusdouble":return /^[+]?\d+(\.\d+)?$/.test($pintu);break;
+ case "english":return /^[A-Za-z]+$/.test($pintu);break;
+ case "username":return /^[a-z]\w{3,}$/i.test($pintu);break;
+ case "mobile":return /^((\(\d{3}\))|(\d{3}\-))?13[0-9]\d{8}?$|15[89]\d{8}?$|170\d{8}?$|147\d{8}?$/.test($pintu);break;
+ case "phone":return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/.test($pintu);break;
+ case "tel":return /^((\(\d{3}\))|(\d{3}\-))?13[0-9]\d{8}?$|15[89]\d{8}?$|170\d{8}?$|147\d{8}?$/.test($pintu) || /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/.test($pintu);break;
+ case "email":return /^[^@]+@[^@]+\.[^@]+$/.test($pintu);break;
+ case "url":return /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/.test($pintu);break;
+ case "ip":return /^[\d\.]{7,15}$/.test($pintu);break;
+ case "qq":return /^[1-9]\d{4,10}$/.test($pintu);break;
+ case "currency":return /^\d+(\.\d+)?$/.test($pintu);break;
+ case "zip":return /^[1-9]\d{5}$/.test($pintu);break;
+ case "radio":
+ var radio=element.closest('form').find('input[name="'+element.attr("name")+'"]:checked').length;
+ return eval(radio==1);
+ break;
+ default:
+ var $test=type.split('#');
+ if($test.length>1){
+ switch($test[0]){
+ case "compare":
+ return eval(Number($pintu)+$test[1]);
+ break;
+ case "regexp":
+ return new RegExp($test[1],"gi").test($pintu);
+ break;
+ case "length":
+ var $length;
+ if(element.attr("type")=="checkbox"){
+ $length=element.closest('form').find('input[name="'+element.attr("name")+'"]:checked').length;
+ }else{
+ $length=$pintu.replace(/[\u4e00-\u9fa5]/g,"***").length;
+ }
+ return eval($length+$test[1]);
+ break;
+ case "ajax":
+ var $getdata;
+ var $url=$test[1]+$pintu;
+ $.ajaxSetup({async:false});
+ $.getJSON($url,function(data){
+ //alert(data.getdata);
+ $getdata=data.getdata;
+ });
+ if($getdata=="true"){return true;}
+ break;
+ case "repeat":
+ return $pintu==jQuery('input[name="'+$test[1]+'"]').eq(0).val();
+ break;
+ default:return true;break;
+ }
+ break;
+ }else{
+ return true;
+ }
+ }
+ };
+ $('form').submit(function(){
+ $(this).find('input[data-validate],textarea[data-validate],select[data-validate]').trigger("blur");
+ $(this).find('input[placeholder],textarea[placeholder]').each(function(){$hideplaceholder($(this));});
+ var numError = $(this).find('.check-error').length;
+ if(numError){
+ $(this).find('.check-error').first().find('input[data-validate],textarea[data-validate],select[data-validate]').first().focus().select();
+ return false;
+ }
+ });
+ $('.form-reset').click(function(){
+ $(this).closest('form').find(".input-help").remove();
+ $(this).closest('form').find('.form-submit').removeAttr('disabled');
+ $(this).closest('form').find('.form-group').removeClass("check-error");
+ $(this).closest('form').find('.form-group').removeClass("check-success");
+ });
+ $('.tab .tab-nav li').each(function(){
+ var e=$(this);
+ var trigger=e.closest('.tab').attr("data-toggle");
+ if (trigger=="hover"){
+ e.mouseover(function(){
+ $showtabs(e);
+ });
+ e.click(function(){
+ return false;
+ });
+ }else{
+ e.click(function(){
+ $showtabs(e);
+ return false;
+ });
+ }
+ });
+ $showtabs=function(e){
+ var detail=e.children("a").attr("href");
+ e.closest('.tab .tab-nav').find("li").removeClass("active");
+ e.closest('.tab').find(".tab-body .tab-panel").removeClass("active");
+ e.addClass("active");
+ $(detail).addClass("active");
+ };
+ $('.dialogs').each(function(){
+ var e=$(this);
+ var trigger=e.attr("data-toggle");
+ if (trigger=="hover"){
+ e.mouseover(function(){
+ $showdialogs(e);
+ });
+ }else if(trigger=="click"){
+ e.click(function(){
+ $showdialogs(e);
+ });
+ }
+ });
+ $showdialogs=function(e){
+ var trigger=e.attr("data-toggle");
+ var getid=e.attr("data-target");
+ var data=e.attr("data-url");
+ var mask=e.attr("data-mask");
+ var width=e.attr("data-width");
+ var detail="";
+ var masklayout=$('');
+ if(width==null){width="80%";}
+
+ if (mask=="1"){
+ $("body").append(masklayout);
+ }
+ detail='';
+ if(getid!=null){detail=detail+$(getid).html();}
+ if(data!=null){detail=detail+$.ajax({url:data,async:false}).responseText;}
+ //alert(detail);
+ detail=detail+'
';
+
+ var win=$(detail);
+ win.find(".dialog").addClass("open");
+ $("body").append(win);
+ var x=parseInt($(window).width()-win.outerWidth())/2;
+ var y=parseInt($(window).height()-win.outerHeight())/2;
+ if (y<=10){y="10"}
+ win.css({"left":x,"top":y});
+ win.find(".dialog-close,.close").each(function(){
+ $(this).click(function(){
+ win.remove();
+ $('.dialog-mask').remove();
+ });
+ });
+ masklayout.click(function(){
+ win.remove();
+ $(this).remove();
+ });
+ };
+ $('.tips').each(function(){
+ var e=$(this);
+ var title=e.attr("title");
+ var trigger=e.attr("data-toggle");
+ e.attr("title","");
+ if (trigger=="" || trigger==null){trigger="hover";}
+ if (trigger=="hover"){
+ e.mouseover(function(){
+ $showtips(e,title);
+ });
+ }else if(trigger=="click"){
+ e.click(function(){
+ $showtips(e,title);
+ });
+ }else if(trigger=="show"){
+ e.ready(function(){
+ $showtips(e,title);
+ });
+ }
+ });
+ $showtips=function(e,title){
+ var trigger=e.attr("data-toggle");
+ var place=e.attr("data-place");
+ var width=e.attr("data-width");
+ var css=e.attr("data-style");
+ var image=e.attr("data-image");
+ var content=e.attr("content");
+ var getid=e.attr("data-target");
+ var data=e.attr("data-url");
+ var x=0;
+ var y=0;
+ var html="";
+ var detail="";
+
+ if(image!=null){detail=detail+'
';}
+ if(content!=null){detail=detail+''+content+'
';}
+ if(getid!=null){detail=detail+$(getid).html();}
+ if(data!=null){detail=detail+$.ajax({url:data,async:false}).responseText;}
+ if(title!=null && title!=""){
+ if(detail!=null && detail!=""){detail=''+title+'
'+detail;}else{detail=''+title+'
';}
+ }
+ detail=''+detail+'
';
+ html=$(detail);
+
+ $("body").append( html );
+ if(width!=null){
+ html.css("width",width);
+ }
+ if(place=="" || place==null){place="top";}
+ if(place=="left"){
+ x=e.offset().left - html.outerWidth()-5;
+ y=e.offset().top - html.outerHeight()/2 + e.outerHeight()/2;
+ }else if(place=="top"){
+ x=e.offset().left - html.outerWidth()/2 + e.outerWidth()/2;
+ y=e.offset().top - html.outerHeight()-5;
+ }else if(place=="right"){
+ x=e.offset().left + e.outerWidth()+5;
+ y=e.offset().top - html.outerHeight()/2 + e.outerHeight()/2;
+ }else if(place=="bottom"){
+ x=e.offset().left - html.outerWidth()/2 + e.outerWidth()/2;
+ y=e.offset().top + e.outerHeight()+5;
+ }
+ if (css!=""){html.addClass(css);}
+ html.css({"left":x+"px","top":y+"px","position":"absolute"});
+ if (trigger=="hover" || trigger=="click" || trigger==null){
+ e.mouseout(function(){html.remove();e.attr("title",title)});
+ }
+ };
+ $('.alert .close').each(function(){
+ $(this).click(function(){
+ $(this).closest('.alert').remove();
+ });
+ });
+ $('.radio label').each(function(){
+ var e=$(this);
+ e.click(function(){
+ e.closest('.radio').find("label").removeClass("active");
+ e.addClass("active");
+ });
+ });
+ $('.checkbox label').each(function(){
+ var e=$(this);
+ e.click(function(){
+ if(e.find('input').is(':checked')){
+ e.addClass("active");
+ }else{
+ e.removeClass("active");
+ };
+ });
+ });
+ $('.collapse .panel-head').each(function(){
+ var e=$(this);
+ e.click(function(){
+ e.closest('.collapse').find(".panel").removeClass("active");
+ e.closest('.panel').addClass("active");
+ });
+ });
+ $('.icon-navicon').each(function(){
+ var e=$(this);
+ var target=e.attr("data-target");
+ e.click(function(){
+ $(target).toggleClass("nav-navicon");
+ });
+ });
+ $('.banner').each(function(){
+ var e=$(this);
+ var pointer=e.attr("data-pointer");
+ var interval=e.attr("data-interval");
+ var style=e.attr("data-style");
+ var items=e.attr("data-item");
+ var items_s=e.attr("data-small");
+ var items_m=e.attr("data-middle");
+ var items_b=e.attr("data-big");
+ var num=e.find(".carousel .item").length;
+ var win=$(window).width();
+ var i=1;
+
+ if(interval==null){interval=5};
+ if(items==null || items<1){items=1};
+ if(items_s!=null && win>760){items=items_s};
+ if(items_m!=null && win>1000){items=items_m};
+ if(items_b!=null && win>1200){items=items_b};
+
+ var itemWidth=Math.ceil(e.outerWidth()/items);
+ var page=Math.ceil(num/items);
+ e.find(".carousel .item").css("width",itemWidth+ "px");
+ e.find(".carousel").css("width",itemWidth*num + "px");
+
+ var carousel=function(){
+ i++;
+ if(i>page){i=1;}
+ $showbanner(e,i,items,num);
+ };
+ var play=setInterval(carousel,interval*600);
+
+ e.mouseover(function(){clearInterval(play);});
+ e.mouseout(function(){play=setInterval(carousel,interval*600);});
+
+ if(pointer!=0 && page>1){
+ var point='';
+ for (var j=1;j';
+ };
+ point=point+'
';
+ var pager=$(point);
+ if(style!=null){pager.addClass(style);};
+ e.append(pager);
+ pager.css("left",e.outerWidth()*0.5 - pager.outerWidth()*0.5+"px");
+ pager.find("li").click(function(){
+ $showbanner(e,$(this).val(),items,num);
+ });
+ var lefter=$('');
+ var righter=$('');
+ if(style!=null){lefter.addClass(style);righter.addClass(style);};
+ e.append(lefter);
+ e.append(righter);
+
+ lefter.click(function(){
+ i--;
+ if(i<1){i=page;}
+ $showbanner(e,i,items,num);
+ });
+ righter.click(function(){
+ i++;
+ if(i>page){i=1;}
+ $showbanner(e,i,items,num);
+ });
+ };
+ });
+ $showbanner=function(e,i,items,num){
+ var after=0,leftx=0;
+ leftx = - Math.ceil(e.outerWidth()/items)*(items)*(i-1);
+ if(i*items > num){after=i*items-num;leftx= - Math.ceil(e.outerWidth()/items)*(num-items);};
+ e.find(".carousel").stop(true, true).animate({"left":leftx+"px"},800);
+ e.find(".pointer li").removeClass("active");
+ e.find(".pointer li").eq(i-1).addClass("active");
+ };
+ $(".spy a").each(function(){
+ var e=$(this);
+ var t=e.closest(".spy");
+ var target=t.attr("data-target");
+ var top=t.attr("data-offset-spy");
+ var thistarget="";
+ var thistop="";
+ if(top==null){top=0;};
+ if(target==null){thistarget=$(window);}else{thistarget=$(target);};
+
+ thistarget.bind("scroll",function(){
+ if(target==null){
+ thistop=$(e.attr("href")).offset().top - $(window).scrollTop() - parseInt(top);
+ }else{
+ thistop=$(e.attr("href")).offset().top - thistarget.offset().top - parseInt(top);
+ };
+
+ if(thistop<0){
+ t.find('li').removeClass("active");
+ e.parents('li').addClass("active");
+ };
+
+ });
+ });
+ $(".fixed").each(function(){
+ var e=$(this);
+ var style=e.attr("data-style");
+ var top=e.attr("data-offset-fixed");
+ if(top==null){top=e.offset().top;}else{top=e.offset().top - parseInt(top);};
+ if(style==null){style="fixed-top";};
+
+ $(window).bind("scroll",function(){
+ var thistop=top - $(window).scrollTop();
+ if(style=="fixed-top" && thistop<0){
+ e.addClass("fixed-top");
+ }else{
+ e.removeClass("fixed-top");
+ };
+
+ var thisbottom=top - $(window).scrollTop()-$(window).height();
+ if(style=="fixed-bottom" && thisbottom>0){
+ e.addClass("fixed-bottom");
+ }else{
+ e.removeClass("fixed-bottom");
+ };
+ });
+
+ });
+
+})
\ No newline at end of file