├── .gitignore ├── LICENSE ├── README.md ├── config.py ├── dbutil ├── __init__.py └── dbutil.py ├── flask_web.py ├── static ├── img │ └── favicon.ico └── vendor │ ├── alert │ ├── sweet-alert.css │ └── sweet-alert.min.js │ ├── animate.css │ ├── bootstrap │ ├── css │ │ └── bootstrap.min.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ └── js │ │ └── bootstrap.js │ ├── datatable │ ├── datatable.css │ └── datatable.js │ ├── datepicker │ ├── bootstrap-datepicker.min.js │ ├── bootstrap-datepicker.zh-CN.min.js │ └── bootstrap-datepicker3.min.css │ ├── echarts │ └── echarts-all.js │ ├── flatui │ ├── css │ │ └── flat-ui.min.css │ ├── fonts │ │ ├── glyphicons │ │ │ ├── flat-ui-icons-regular.eot │ │ │ ├── flat-ui-icons-regular.svg │ │ │ ├── flat-ui-icons-regular.ttf │ │ │ ├── flat-ui-icons-regular.woff │ │ │ └── selection.json │ │ └── lato │ │ │ ├── lato-black.eot │ │ │ ├── lato-black.svg │ │ │ ├── lato-black.ttf │ │ │ ├── lato-black.woff │ │ │ ├── lato-bold.eot │ │ │ ├── lato-bold.svg │ │ │ ├── lato-bold.ttf │ │ │ ├── lato-bold.woff │ │ │ ├── lato-bolditalic.eot │ │ │ ├── lato-bolditalic.svg │ │ │ ├── lato-bolditalic.ttf │ │ │ ├── lato-bolditalic.woff │ │ │ ├── lato-italic.eot │ │ │ ├── lato-italic.svg │ │ │ ├── lato-italic.ttf │ │ │ ├── lato-italic.woff │ │ │ ├── lato-light.eot │ │ │ ├── lato-light.svg │ │ │ ├── lato-light.ttf │ │ │ ├── lato-light.woff │ │ │ ├── lato-regular.eot │ │ │ ├── lato-regular.svg │ │ │ ├── lato-regular.ttf │ │ │ └── lato-regular.woff │ └── img │ │ ├── icons │ │ ├── png │ │ │ ├── Book.png │ │ │ ├── Calendar.png │ │ │ ├── Chat.png │ │ │ ├── Clipboard.png │ │ │ ├── Compas.png │ │ │ ├── Gift-Box.png │ │ │ ├── Infinity-Loop.png │ │ │ ├── Mail.png │ │ │ ├── Map.png │ │ │ ├── Pensils.png │ │ │ ├── Pocket.png │ │ │ ├── Retina-Ready.png │ │ │ ├── Toilet-Paper.png │ │ │ └── Watches.png │ │ └── svg │ │ │ ├── book.svg │ │ │ ├── calendar.svg │ │ │ ├── chat.svg │ │ │ ├── clipboard.svg │ │ │ ├── clocks.svg │ │ │ ├── compas.svg │ │ │ ├── gift-box.svg │ │ │ ├── loop.svg │ │ │ ├── mail.svg │ │ │ ├── map.svg │ │ │ ├── paper-bag.svg │ │ │ ├── pencils.svg │ │ │ ├── retina.svg │ │ │ ├── ribbon.svg │ │ │ └── toilet-paper.svg │ │ └── login │ │ ├── imac-2x.png │ │ └── imac.png │ ├── font-awesome │ ├── css │ │ └── font-awesome.min.css │ └── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ ├── jquery │ └── jquery.min.js │ ├── metismenu │ ├── metis-menu.min.css │ └── metis-menu.min.js │ ├── ngprogress │ ├── ngprogress.css │ └── ngprogress.js │ ├── sb-admin-2.css │ ├── sb-admin-2.js │ ├── select │ ├── select2.min.css │ ├── select2.min.js │ └── zh-CN.js │ ├── timeline.css │ ├── underscore.js │ └── validate │ ├── bootstrap.js │ └── validate.js ├── templates ├── index.html ├── layout.html ├── login.html └── page │ ├── caninet.html │ ├── host.html │ ├── product.html │ ├── raidtype.html │ └── user.html └── woniu-build.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | *.egg-info/ 23 | .installed.cfg 24 | *.egg 25 | 26 | # PyInstaller 27 | # Usually these files are written by a python script from a template 28 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 29 | *.manifest 30 | *.spec 31 | 32 | # Installer logs 33 | pip-log.txt 34 | pip-delete-this-directory.txt 35 | 36 | # Unit test / coverage reports 37 | htmlcov/ 38 | .tox/ 39 | .coverage 40 | .coverage.* 41 | .cache 42 | nosetests.xml 43 | coverage.xml 44 | *,cover 45 | 46 | # Translations 47 | *.mo 48 | *.pot 49 | 50 | # Django stuff: 51 | *.log 52 | 53 | # Sphinx documentation 54 | docs/_build/ 55 | 56 | # PyBuilder 57 | target/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 woniuppp 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | # [woniu-cmdb](http://shengxinjing.cn/woniu-cmdb/) 5 | ### :snail: 奇技淫巧--写配置文件生成增删改查系统:mushroom: 6 | ### [视频教程](http://v.qq.com/page/u/p/9/u01775jmmp9.html) 7 | 8 | 9 | ### 进度表 10 | 11 | 12 | 13 | 14 | 需求 | 负责人 | 进度 | (预计) 完成时间 | 您可以做什么 15 | ---|:---:|---|:---:|:---: 16 | 干掉配置,前端控制 | 蜗牛 |  | **1** | 使用 17 | 18 | 19 | 20 | 21 | [线上demo](http://admin.51reboot.com/),此页面都是一个配置文件自动生成的 22 | 23 | 详细的文章介绍和实现原理分析会发布在我的[博客](https://github.com/shengxinjing/my_blog/issues),敬请期待 24 | 25 | 26 | > 运维人员都不喜欢搞CMDB,因为有很多前端的内容,但CMDB却在运维圈占有重要的地位,开发CMDB就是各种增删改查,之后我有个想法,做一个写配置文件就自动生成页面的CMDB, 请支持我的woniu-cmdb,喜欢请star 27 | 28 | ### 写好配置文件,自从生成页增删改查面不是梦 29 | 30 | 此项目不仅限于cmdb,各种管理系统,都可以用此项目配置,改成学生老师啥的,就变成了学校内部的mis系统,我会一直维护这个项目,大家有新需求请提issue 31 | 32 | ### 效果图(我们只写左边的配置,右边的是自动生成的) 33 |  34 | 35 | 36 | ### 简单配置,生成页面 37 | 命令只有两个 38 | 39 | ``` 40 | python woniu-build.py init # 初始化数据库+根据配置生成文件 41 | 42 | python woniu-build.py 仅根据配置生成文件 43 | ``` 44 | ### 使用指南 45 | 46 | 1. 下载该项目到本地 47 | 2. config.py是我们唯一要修改的文件 48 | 2. 修改config.py里的db_config变量,配置数据库的host,用户名,密码和要操作的数据库 49 | 50 | ```python 51 | db_config = { 52 | 'host':'localhost', 53 | 'user':'root', 54 | 'passwd':"", 55 | 'db':'cmdb' 56 | } 57 | 58 | ``` 59 | 60 | 61 | 3. 修改config.py的page_config变量,此变量是设置具体的页面变量,先做一个简单的配置 62 | 63 | ``` 64 | 65 | page_config = { 66 | # menu是一个list,包含所有的页面信息 67 | "menu":[{ 68 | //页面的名字,和数据库表一致 69 | "name": 'user', 70 | // 显示的页面标题 71 | "title": '用户管理', 72 | 73 | # 页面里具体的字段,如果有两个字段,配置两个即可,包含name和title 74 | "data": [{ 75 | "name": 'username', 76 | "title": '用户名' 77 | },{ 78 | "name":'password', 79 | "title":'密码' 80 | }] 81 | }}] 82 | } 83 | 84 | ``` 85 | 86 | 4. 执行 python woniu-build.py 处理文件,启动flask_web.py,浏览器访问http://localhost:9092/ 87 | 5. 默认有一个用户,账号和密码都是51reboot 88 | 89 | 90 | ### 字段详解 91 | 92 | 1. page_config配置 93 | 94 | ``` 95 | menu:下面具体介绍,页面具体的字段 96 | favicon:页面标签的小logo 默认用reboot的 97 | title:页面标签的标题,默认是woniu-cmdb 98 | brand_name:项目左上角显示文字,默认是woniu-cmdb 99 | 100 | ``` 101 | 102 | 2. menu配置详解 103 | ``` 104 | 105 | { 106 | name:名字和数据库表名一直 107 | titile:中文 108 | modal_detail:是否用模态窗展示详情(有隐藏字段没展示) 109 | 具体字段数据 110 | data:[ 111 | { 112 | name: 113 | title: 114 | type:类型,默认input text 115 | value:select直接从value里渲染,不发ajax和preload,如果没有type,就是input里的value属性 116 | 117 | select_type:获取数据的action_type的值,和对应的name字段一致 118 | toname:preload数据里,完成id到name得转换显示,select默认true 119 | hide:默认false,true的话隐藏此字段 120 | 121 | option_val list的显示字段 默认id 122 | option_name list的显示字段 默认name 123 | 124 | } 125 | ] 126 | } 127 | ``` 128 | 129 | todolist: 130 | * 登录权限+页面权限 131 | * 更丰富的前端组件,现在只支持输入,日期和下啦框 132 | * 大家有需求请提issues 我会持续维护这个项目, 133 | 134 | ### 依赖 135 | 136 | 本项目python依赖flask和mysqldb模块,直接pip安装一下即可 137 | 138 | 139 | 140 | 如果您觉得有我写的东西对你帮助,可以打赏点钱给我支付宝支付宝316783812@qq.com或者扫二维码 141 | 142 |  143 | -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | 4 | # 数据库配置 5 | 6 | 7 | db_config = { 8 | 'host':'localhost', 9 | 'user':'root', 10 | 'passwd':"", 11 | 'db':'cmdb' 12 | } 13 | 14 | 15 | page_config = { 16 | "brand_name":'51Reboot', 17 | 'title':'hello reboot', 18 | "favicon":'https://pic1.zhimg.com/6d660dd4156c64bfad13ff97d79c2f98_l.jpg', 19 | "menu":[ 20 | { 21 | # user配置最好不要修改,是和登陆认证相关的,直接在下面加配置即可 22 | "name": 'user', 23 | "title": '用户管理', 24 | "data": [{ 25 | "name": 'username', 26 | "title": '用户名' 27 | },{ 28 | "name":'password', 29 | "title":'密码' 30 | }] 31 | }, 32 | { 33 | # user配置最好不要修改,是和登陆认证相关的,直接在下面加配置即可 34 | "name": 'test', 35 | "title": '测试', 36 | "data": [{ 37 | "name": 'username', 38 | "title": '用户名' 39 | },{ 40 | "name":'password', 41 | "title":'密码', 42 | "empty":"yes" 43 | 44 | }] 45 | }, 46 | { 47 | "name":'caninet', 48 | "title":'机柜', 49 | "data":[{ 50 | "name":"name", 51 | "title":'机柜名' 52 | }] 53 | }, 54 | { 55 | "name":"host", 56 | "title":"服务器", 57 | "data":[{ 58 | "name":"caninet", 59 | "title":'机柜', 60 | "type":'select', 61 | "select_type":'caninet' 62 | },{ 63 | "name":"hostname", 64 | "title":'主机名' 65 | },{ 66 | 'name':'asset_no', 67 | 'title':'资产号' 68 | },{ 69 | "name":'end_time', 70 | "title":"过期日期", 71 | "type":'date' 72 | },{ 73 | "name":'ups', 74 | "title":'是否开启', 75 | "type":'select', 76 | "value":{0:'开启',1:'关闭'} 77 | }] 78 | } 79 | ] 80 | } 81 | 82 | 83 | 84 | 85 | 86 | # ,{ 87 | # "name": 'host', 88 | # "title": '服务器', 89 | # "data": [{ 90 | # "name": 'cabinet', 91 | # "title": '机柜' 92 | # },{ 93 | # "name":'hostname', 94 | # "title":'主机名' 95 | # }] 96 | # },{ 97 | # "title": '业务', 98 | # "sub":[ 99 | # { 100 | # 'name': 'product', 101 | # 'title': '业务线', 102 | # 'data': [{ 103 | # 'name': 'service_name', 104 | # 'title': '服务名' 105 | # },{ 106 | # 'name':'module_letter', 107 | # 'title':'模块简称' 108 | # },{ 109 | # 'name':'dev_interface', 110 | # 'title':'开发者' 111 | # },{ 112 | # 'name':'op_interface', 113 | # 'title':'运维接口人' 114 | # }] 115 | # }, 116 | # { 117 | # 'name': 'raidtype', 118 | # 'title': 'Raid厂商', 119 | # 'data': [{ 120 | # 'name': 'name', 121 | # 'title': 'Raid厂商' 122 | # }] 123 | # } 124 | 125 | 126 | # ] 127 | # } -------------------------------------------------------------------------------- /dbutil/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/dbutil/__init__.py -------------------------------------------------------------------------------- /dbutil/dbutil.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | #encoding:utf8 3 | import json 4 | import time,random 5 | import datetime 6 | import MySQLdb 7 | import MySQLdb.cursors 8 | 9 | class DB: 10 | conn = None 11 | db = None 12 | host = None 13 | 14 | def __init__(self, host, mysql_user, mysql_pass, mysql_db): 15 | self.host = host 16 | self.mysql_user = mysql_user 17 | self.mysql_pass = mysql_pass 18 | self.mysql_db = mysql_db 19 | def connect(self): 20 | self.conn = MySQLdb.connect(host=self.host, user=self.mysql_user, passwd=self.mysql_pass, db=self.mysql_db, charset="utf8", connect_timeout=600, compress=True,cursorclass = MySQLdb.cursors.DictCursor) 21 | self.conn.autocommit(True) 22 | def execute(self, sql): 23 | try: 24 | cursor = self.conn.cursor() 25 | cursor.execute(sql) 26 | except (AttributeError, MySQLdb.OperationalError): 27 | try: 28 | cursor.close() 29 | self.conn.close() 30 | except: 31 | pass 32 | time.sleep(1) 33 | try: 34 | self.connect() 35 | print "reconnect DB" 36 | cursor = self.conn.cursor() 37 | cursor.execute(sql) 38 | except (AttributeError, MySQLdb.OperationalError): 39 | time.sleep(2) 40 | self.connect() 41 | print "reconnect DB" 42 | cursor = self.conn.cursor() 43 | cursor.execute(sql) 44 | 45 | return cursor 46 | -------------------------------------------------------------------------------- /flask_web.py: -------------------------------------------------------------------------------- 1 | from flask import Flask,request,render_template,redirect,url_for,session 2 | from config import db_config,page_config 3 | from dbutil.dbutil import DB 4 | # import requests 5 | import json 6 | import sys 7 | reload(sys) 8 | sys.setdefaultencoding("utf-8") 9 | app = Flask(__name__) 10 | app.secret_key = '\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\' 11 | db = DB(host=db_config['host'], mysql_user=db_config['user'], mysql_pass=db_config['passwd'], \ 12 | mysql_db=db_config['db']) 13 | page_config.setdefault('favicon','/static/img/favicon.ico') 14 | page_config.setdefault('title','Woniu-cmdb') 15 | page_config.setdefault('brand_name','Woniu-cmdb') 16 | 17 | @app.route('/login',methods=['GET','POST']) 18 | def login(): 19 | if 'username' in session: 20 | return redirect('/') 21 | if request.method == "POST": 22 | name = request.form.get('username') 23 | passwd = request.form.get('password') 24 | print name 25 | print passwd 26 | obj = {"result":1} 27 | if name and passwd: 28 | sql = 'select * from user where username="%s" and password="%s"'%(name,passwd) 29 | print sql 30 | cur = db.execute(sql) 31 | # print cur.fetchone() 32 | if cur.fetchone(): 33 | obj["result"] = 0 34 | session['username'] = name 35 | return json.dumps(obj) 36 | else: 37 | return render_template('login.html') 38 | @app.route('/logout') 39 | def logout(): 40 | session.pop('username') 41 | return redirect('/login') 42 | 43 | @app.route('/page/') 44 | def render(template): 45 | if 'username' in session: 46 | return render_template('page/'+template+'.html',data=page_config,username=session['username']) 47 | else: 48 | return redirect('/login') 49 | @app.route('/addapi', methods=['POST']) 50 | def addapi(): 51 | 52 | obj = request.form.to_dict() 53 | table = obj.pop('action_type') 54 | keys = obj.keys() 55 | values = obj.values() 56 | 57 | sql = 'insert into %s (%s) values ("%s")' % (table,','.join(keys),'","'.join(values)) 58 | print sql 59 | db.execute(sql) 60 | res = {'result':'ok'} 61 | return json.dumps(res) 62 | @app.route('/delapi', methods=['POST']) 63 | def delapi(): 64 | 65 | obj = request.form.to_dict() 66 | table = obj.pop('action_type') 67 | table_id = obj.pop('id') 68 | sql = 'delete from %s where id=%s' %(table,table_id) 69 | # sql = 'insert into %s (%s) values ("%s")' % (table,','.join(keys),'","'.join(values)) 70 | print sql 71 | db.execute(sql) 72 | res = {'result':'ok'} 73 | return json.dumps(res) 74 | 75 | @app.route('/listapi') 76 | def listapi(): 77 | action_type = request.args.get('action_type') 78 | sql = 'select * from '+action_type 79 | cur = db.execute(sql) 80 | res = {"result":cur.fetchall()} 81 | return json.dumps(res) 82 | 83 | @app.route('/updateapi',methods=['POST']) 84 | def updateapi(): 85 | obj = request.form.to_dict() 86 | table = obj.pop('action_type') 87 | table_id = obj.pop('id') 88 | arr = [] 89 | for key,val in obj.items(): 90 | arr.append('%s="%s"'%(key,val)) 91 | print arr 92 | keys = obj.keys() 93 | values = obj.values() 94 | sql = 'update %s set '%(table) 95 | 96 | sql += ','.join(arr) 97 | sql += ' where id='+table_id 98 | print sql 99 | db.execute(sql) 100 | res = {'result':'ok'} 101 | return json.dumps(res) 102 | 103 | @app.route('/') 104 | def index(): 105 | return redirect('/page/user') 106 | # return render_template('index.html') 107 | 108 | 109 | 110 | if __name__ == '__main__': 111 | app.run(debug=True,port=9092,host='0.0.0.0') 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/img/favicon.ico -------------------------------------------------------------------------------- /static/vendor/alert/sweet-alert.css: -------------------------------------------------------------------------------- 1 | @-webkit-keyframes showSweetAlert { 2 | 0% { 3 | transform: scale(0.7); 4 | -webkit-transform: scale(0.7); 5 | } 6 | 45% { 7 | transform: scale(1.05); 8 | -webkit-transform: scale(1.05); 9 | } 10 | 80% { 11 | transform: scale(0.95); 12 | -webkit-tranform: scale(0.95); 13 | } 14 | 100% { 15 | transform: scale(1); 16 | -webkit-transform: scale(1); 17 | } 18 | } 19 | @keyframes showSweetAlert { 20 | 0% { 21 | transform: scale(0.7); 22 | -webkit-transform: scale(0.7); 23 | } 24 | 45% { 25 | transform: scale(1.05); 26 | -webkit-transform: scale(1.05); 27 | } 28 | 80% { 29 | transform: scale(0.95); 30 | -webkit-tranform: scale(0.95); 31 | } 32 | 100% { 33 | transform: scale(1); 34 | -webkit-transform: scale(1); 35 | } 36 | } 37 | @-webkit-keyframes hideSweetAlert { 38 | 0% { 39 | transform: scale(1); 40 | -webkit-transform: scale(1); 41 | } 42 | 100% { 43 | transform: scale(0.5); 44 | -webkit-transform: scale(0.5); 45 | } 46 | } 47 | @keyframes hideSweetAlert { 48 | 0% { 49 | transform: scale(1); 50 | -webkit-transform: scale(1); 51 | } 52 | 100% { 53 | transform: scale(0.5); 54 | -webkit-transform: scale(0.5); 55 | } 56 | } 57 | .showSweetAlert { 58 | -webkit-animation: showSweetAlert 0.3s; 59 | animation: showSweetAlert 0.3s; 60 | } 61 | .hideSweetAlert { 62 | -webkit-animation: hideSweetAlert 0.2s; 63 | animation: hideSweetAlert 0.2s; 64 | } 65 | @-webkit-keyframes animateSuccessTip { 66 | 0% { 67 | width: 0; 68 | left: 1px; 69 | top: 19px; 70 | } 71 | 54% { 72 | width: 0; 73 | left: 1px; 74 | top: 19px; 75 | } 76 | 70% { 77 | width: 50px; 78 | left: -8px; 79 | top: 37px; 80 | } 81 | 84% { 82 | width: 17px; 83 | left: 21px; 84 | top: 48px; 85 | } 86 | 100% { 87 | width: 25px; 88 | left: 14px; 89 | top: 45px; 90 | } 91 | } 92 | @keyframes animateSuccessTip { 93 | 0% { 94 | width: 0; 95 | left: 1px; 96 | top: 19px; 97 | } 98 | 54% { 99 | width: 0; 100 | left: 1px; 101 | top: 19px; 102 | } 103 | 70% { 104 | width: 50px; 105 | left: -8px; 106 | top: 37px; 107 | } 108 | 84% { 109 | width: 17px; 110 | left: 21px; 111 | top: 48px; 112 | } 113 | 100% { 114 | width: 25px; 115 | left: 14px; 116 | top: 45px; 117 | } 118 | } 119 | @-webkit-keyframes animateSuccessLong { 120 | 0% { 121 | width: 0; 122 | right: 46px; 123 | top: 54px; 124 | } 125 | 65% { 126 | width: 0; 127 | right: 46px; 128 | top: 54px; 129 | } 130 | 84% { 131 | width: 55px; 132 | right: 0px; 133 | top: 35px; 134 | } 135 | 100% { 136 | width: 47px; 137 | right: 8px; 138 | top: 38px; 139 | } 140 | } 141 | @keyframes animateSuccessLong { 142 | 0% { 143 | width: 0; 144 | right: 46px; 145 | top: 54px; 146 | } 147 | 65% { 148 | width: 0; 149 | right: 46px; 150 | top: 54px; 151 | } 152 | 84% { 153 | width: 55px; 154 | right: 0px; 155 | top: 35px; 156 | } 157 | 100% { 158 | width: 47px; 159 | right: 8px; 160 | top: 38px; 161 | } 162 | } 163 | @-webkit-keyframes rotatePlaceholder { 164 | 0% { 165 | transform: rotate(-45deg); 166 | -webkit-transform: rotate(-45deg); 167 | } 168 | 5% { 169 | transform: rotate(-45deg); 170 | -webkit-transform: rotate(-45deg); 171 | } 172 | 12% { 173 | transform: rotate(-405deg); 174 | -webkit-transform: rotate(-405deg); 175 | } 176 | 100% { 177 | transform: rotate(-405deg); 178 | -webkit-transform: rotate(-405deg); 179 | } 180 | } 181 | @keyframes rotatePlaceholder { 182 | 0% { 183 | transform: rotate(-45deg); 184 | -webkit-transform: rotate(-45deg); 185 | } 186 | 5% { 187 | transform: rotate(-45deg); 188 | -webkit-transform: rotate(-45deg); 189 | } 190 | 12% { 191 | transform: rotate(-405deg); 192 | -webkit-transform: rotate(-405deg); 193 | } 194 | 100% { 195 | transform: rotate(-405deg); 196 | -webkit-transform: rotate(-405deg); 197 | } 198 | } 199 | .animateSuccessTip { 200 | -webkit-animation: animateSuccessTip 0.75s; 201 | animation: animateSuccessTip 0.75s; 202 | } 203 | .animateSuccessLong { 204 | -webkit-animation: animateSuccessLong 0.75s; 205 | animation: animateSuccessLong 0.75s; 206 | } 207 | .icon.success.animate::after { 208 | -webkit-animation: rotatePlaceholder 4.25s ease-in; 209 | animation: rotatePlaceholder 4.25s ease-in; 210 | } 211 | @-webkit-keyframes animateErrorIcon { 212 | 0% { 213 | transform: rotateX(100deg); 214 | -webkit-transform: rotateX(100deg); 215 | opacity: 0; 216 | } 217 | 100% { 218 | transform: rotateX(0deg); 219 | -webkit-transform: rotateX(0deg); 220 | opacity: 1; 221 | } 222 | } 223 | @keyframes animateErrorIcon { 224 | 0% { 225 | transform: rotateX(100deg); 226 | -webkit-transform: rotateX(100deg); 227 | opacity: 0; 228 | } 229 | 100% { 230 | transform: rotateX(0deg); 231 | -webkit-transform: rotateX(0deg); 232 | opacity: 1; 233 | } 234 | } 235 | .animateErrorIcon { 236 | -webkit-animation: animateErrorIcon 0.5s; 237 | animation: animateErrorIcon 0.5s; 238 | } 239 | @-webkit-keyframes animateXMark { 240 | 0% { 241 | transform: scale(0.4); 242 | -webkit-transform: scale(0.4); 243 | margin-top: 26px; 244 | opacity: 0; 245 | } 246 | 50% { 247 | transform: scale(0.4); 248 | -webkit-transform: scale(0.4); 249 | margin-top: 26px; 250 | opacity: 0; 251 | } 252 | 80% { 253 | transform: scale(1.15); 254 | -webkit-transform: scale(1.15); 255 | margin-top: -6px; 256 | } 257 | 100% { 258 | transform: scale(1); 259 | -webkit-transform: scale(1); 260 | margin-top: 0; 261 | opacity: 1; 262 | } 263 | } 264 | @keyframes animateXMark { 265 | 0% { 266 | transform: scale(0.4); 267 | -webkit-transform: scale(0.4); 268 | margin-top: 26px; 269 | opacity: 0; 270 | } 271 | 50% { 272 | transform: scale(0.4); 273 | -webkit-transform: scale(0.4); 274 | margin-top: 26px; 275 | opacity: 0; 276 | } 277 | 80% { 278 | transform: scale(1.15); 279 | -webkit-transform: scale(1.15); 280 | margin-top: -6px; 281 | } 282 | 100% { 283 | transform: scale(1); 284 | -webkit-transform: scale(1); 285 | margin-top: 0; 286 | opacity: 1; 287 | } 288 | } 289 | .animateXMark { 290 | -webkit-animation: animateXMark 0.5s; 291 | animation: animateXMark 0.5s; 292 | } 293 | @-webkit-keyframes pulseWarning { 294 | 0% { 295 | border-color: #F8D486; 296 | } 297 | 100% { 298 | border-color: #F8BB86; 299 | } 300 | } 301 | @keyframes pulseWarning { 302 | 0% { 303 | border-color: #F8D486; 304 | } 305 | 100% { 306 | border-color: #F8BB86; 307 | } 308 | } 309 | .pulseWarning { 310 | -webkit-animation: pulseWarning 0.75s infinite alternate; 311 | animation: pulseWarning 0.75s infinite alternate; 312 | } 313 | @-webkit-keyframes pulseWarningIns { 314 | 0% { 315 | background-color: #F8D486; 316 | } 317 | 100% { 318 | background-color: #F8BB86; 319 | } 320 | } 321 | @keyframes pulseWarningIns { 322 | 0% { 323 | background-color: #F8D486; 324 | } 325 | 100% { 326 | background-color: #F8BB86; 327 | } 328 | } 329 | .pulseWarningIns { 330 | -webkit-animation: pulseWarningIns 0.75s infinite alternate; 331 | animation: pulseWarningIns 0.75s infinite alternate; 332 | } 333 | .sweet-overlay { 334 | background-color: rgba(0, 0, 0, 0.4); 335 | position: fixed; 336 | left: 0; 337 | right: 0; 338 | top: 0; 339 | bottom: 0; 340 | display: none; 341 | z-index: 1040; 342 | } 343 | .sweet-alert { 344 | background-color: #ffffff; 345 | width: 478px; 346 | padding: 17px; 347 | border-radius: 5px; 348 | text-align: center; 349 | position: fixed; 350 | left: 50%; 351 | top: 50%; 352 | margin-left: -256px; 353 | margin-top: -200px; 354 | overflow: hidden; 355 | display: none; 356 | z-index: 2000; 357 | } 358 | @media all and (max-width: 767px) { 359 | .sweet-alert { 360 | width: auto; 361 | margin-left: 0; 362 | margin-right: 0; 363 | left: 15px; 364 | right: 15px; 365 | } 366 | } 367 | .sweet-alert .icon { 368 | width: 80px; 369 | height: 80px; 370 | border: 4px solid gray; 371 | border-radius: 50%; 372 | margin: 20px auto; 373 | position: relative; 374 | box-sizing: content-box; 375 | } 376 | .sweet-alert .icon.error { 377 | border-color: #d43f3a; 378 | } 379 | .sweet-alert .icon.error .x-mark { 380 | position: relative; 381 | display: block; 382 | } 383 | .sweet-alert .icon.error .line { 384 | position: absolute; 385 | height: 5px; 386 | width: 47px; 387 | background-color: #d9534f; 388 | display: block; 389 | top: 37px; 390 | border-radius: 2px; 391 | } 392 | .sweet-alert .icon.error .line.left { 393 | -webkit-transform: rotate(45deg); 394 | transform: rotate(45deg); 395 | left: 17px; 396 | } 397 | .sweet-alert .icon.error .line.right { 398 | -webkit-transform: rotate(-45deg); 399 | transform: rotate(-45deg); 400 | right: 16px; 401 | } 402 | .sweet-alert .icon.warning { 403 | border-color: #eea236; 404 | } 405 | .sweet-alert .icon.warning .body { 406 | position: absolute; 407 | width: 5px; 408 | height: 47px; 409 | left: 50%; 410 | top: 10px; 411 | border-radius: 2px; 412 | margin-left: -2px; 413 | background-color: #f0ad4e; 414 | } 415 | .sweet-alert .icon.warning .dot { 416 | position: absolute; 417 | width: 7px; 418 | height: 7px; 419 | border-radius: 50%; 420 | margin-left: -3px; 421 | left: 50%; 422 | bottom: 10px; 423 | background-color: #f0ad4e; 424 | } 425 | .sweet-alert .icon.info { 426 | border-color: #46b8da; 427 | } 428 | .sweet-alert .icon.info::before { 429 | content: ""; 430 | position: absolute; 431 | width: 5px; 432 | height: 29px; 433 | left: 50%; 434 | bottom: 17px; 435 | border-radius: 2px; 436 | margin-left: -2px; 437 | background-color: #5bc0de; 438 | } 439 | .sweet-alert .icon.info::after { 440 | content: ""; 441 | position: absolute; 442 | width: 7px; 443 | height: 7px; 444 | border-radius: 50%; 445 | margin-left: -3px; 446 | top: 19px; 447 | background-color: #5bc0de; 448 | } 449 | .sweet-alert .icon.success { 450 | border-color: #4cae4c; 451 | } 452 | .sweet-alert .icon.success::before, 453 | .sweet-alert .icon.success::after { 454 | content: ''; 455 | border-radius: 50%; 456 | position: absolute; 457 | width: 60px; 458 | height: 120px; 459 | background: white; 460 | -webkit-transform: rotate(45deg); 461 | transform: rotate(45deg); 462 | } 463 | .sweet-alert .icon.success::before { 464 | border-radius: 120px 0 0 120px; 465 | top: -7px; 466 | left: -33px; 467 | -webkit-transform: rotate(-45deg); 468 | transform: rotate(-45deg); 469 | -webkit-transform-origin: 60px 60px; 470 | transform-origin: 60px 60px; 471 | } 472 | .sweet-alert .icon.success::after { 473 | border-radius: 0 120px 120px 0; 474 | top: -11px; 475 | left: 30px; 476 | -webkit-transform: rotate(-45deg); 477 | transform: rotate(-45deg); 478 | -webkit-transform-origin: 0px 60px; 479 | transform-origin: 0px 60px; 480 | } 481 | .sweet-alert .icon.success .placeholder { 482 | width: 80px; 483 | height: 80px; 484 | border: 4px solid rgba(92, 184, 92, 0.2); 485 | border-radius: 50%; 486 | box-sizing: content-box; 487 | position: absolute; 488 | left: -4px; 489 | top: -4px; 490 | z-index: 2; 491 | } 492 | .sweet-alert .icon.success .fix { 493 | width: 5px; 494 | height: 90px; 495 | background-color: #ffffff; 496 | position: absolute; 497 | left: 28px; 498 | top: 8px; 499 | z-index: 1; 500 | -webkit-transform: rotate(-45deg); 501 | transform: rotate(-45deg); 502 | } 503 | .sweet-alert .icon.success .line { 504 | height: 5px; 505 | background-color: #5cb85c; 506 | display: block; 507 | border-radius: 2px; 508 | position: absolute; 509 | z-index: 2; 510 | } 511 | .sweet-alert .icon.success .line.tip { 512 | width: 25px; 513 | left: 14px; 514 | top: 46px; 515 | -webkit-transform: rotate(45deg); 516 | transform: rotate(45deg); 517 | } 518 | .sweet-alert .icon.success .line.long { 519 | width: 47px; 520 | right: 8px; 521 | top: 38px; 522 | -webkit-transform: rotate(-45deg); 523 | transform: rotate(-45deg); 524 | } 525 | .sweet-alert .icon.custom { 526 | background-size: contain; 527 | border-radius: 0; 528 | border: none; 529 | background-position: center center; 530 | background-repeat: no-repeat; 531 | } 532 | .sweet-alert .btn-default:focus { 533 | border-color: #cccccc; 534 | outline: 0; 535 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(204, 204, 204, 0.6); 536 | box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(204, 204, 204, 0.6); 537 | } 538 | .sweet-alert .btn-success:focus { 539 | border-color: #4cae4c; 540 | outline: 0; 541 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(76, 174, 76, 0.6); 542 | box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(76, 174, 76, 0.6); 543 | } 544 | .sweet-alert .btn-info:focus { 545 | border-color: #46b8da; 546 | outline: 0; 547 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(70, 184, 218, 0.6); 548 | box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(70, 184, 218, 0.6); 549 | } 550 | .sweet-alert .btn-danger:focus { 551 | border-color: #d43f3a; 552 | outline: 0; 553 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(212, 63, 58, 0.6); 554 | box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(212, 63, 58, 0.6); 555 | } 556 | .sweet-alert .btn-warning:focus { 557 | border-color: #eea236; 558 | outline: 0; 559 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(238, 162, 54, 0.6); 560 | box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(238, 162, 54, 0.6); 561 | } 562 | .sweet-alert button::-moz-focus-inner { 563 | border: 0; 564 | } 565 | -------------------------------------------------------------------------------- /static/vendor/alert/sweet-alert.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){function c(b){var c=p(),d=c.querySelector("h2"),e=c.querySelector("p"),f=c.querySelector("button.cancel"),g=c.querySelector("button.confirm");if(d.innerHTML=u(b.title).split("\n").join(""),e.innerHTML=u(b.text||"").split("\n").join(""),b.text&&w(e),y(c.querySelectorAll(".icon")),b.type){for(var h=!1,i=0;i=0;)c=c.replace(" "+b+" "," ");a.className=c.replace(/^\s+|\s+$/g,"")}},u=function(a){var c=b.createElement("div");return c.appendChild(b.createTextNode(a)),c.innerHTML},v=function(a){a.style.opacity="",a.style.display="block"},w=function(a){if(a&&!a.length)return v(a);for(var b=0;b0?setTimeout(d,b):a.style.display="none"};d()},D=function(c){if(MouseEvent){var d=new MouseEvent("click",{view:a,bubbles:!1,cancelable:!0});c.dispatchEvent(d)}else if(b.createEvent){var e=b.createEvent("MouseEvents");e.initEvent("click",!1,!1),c.dispatchEvent(e)}else b.createEventObject?c.fireEvent("onclick"):"function"==typeof c.onclick&&c.onclick()},E=function(b){"function"==typeof b.stopPropagation?(b.stopPropagation(),b.preventDefault()):a.event&&a.event.hasOwnProperty("cancelBubble")&&(a.event.cancelBubble=!0)};a.sweetAlertInitialize=function(){var a=' TitleTextCancel OK',c=b.createElement("div");c.innerHTML=a,b.body.appendChild(c)},a.sweetAlert=a.swal=function(){function h(a){var b=a.keyCode||a.which;if(-1!==[9,13,32,27].indexOf(b)){for(var c=a.target||a.srcElement,d=-1,e=0;e-1,d=r(n,"visible"),e=m.doneFunction&&"true"===n.getAttribute("data-has-done-function");switch(a.type){case"click":if(c&&e&&d)m.doneFunction(!0),m.closeOnConfirm&&f();else if(e&&d){var g=String(m.doneFunction).replace(/\s/g,""),h="function("===g.substring(0,9)&&")"!==g.substring(9,10);h&&m.doneFunction(!1),m.closeOnCancel&&f()}else f()}},s=n.querySelectorAll("button"),t=0;t.sorting_1, table.dataTable.order-column tbody tr>.sorting_2, table.dataTable.order-column tbody tr>.sorting_3, table.dataTable.display tbody tr>.sorting_1, table.dataTable.display tbody tr>.sorting_2, table.dataTable.display tbody tr>.sorting_3 { 83 | background-color: #fafafa 84 | } 85 | table.dataTable.order-column tbody tr.selected>.sorting_1, table.dataTable.order-column tbody tr.selected>.sorting_2, table.dataTable.order-column tbody tr.selected>.sorting_3, table.dataTable.display tbody tr.selected>.sorting_1, table.dataTable.display tbody tr.selected>.sorting_2, table.dataTable.display tbody tr.selected>.sorting_3 { 86 | background-color: #acbad5 87 | } 88 | table.dataTable.display tbody tr.odd>.sorting_1, table.dataTable.order-column.stripe tbody tr.odd>.sorting_1 { 89 | background-color: #f1f1f1 90 | } 91 | table.dataTable.display tbody tr.odd>.sorting_2, table.dataTable.order-column.stripe tbody tr.odd>.sorting_2 { 92 | background-color: #f3f3f3 93 | } 94 | table.dataTable.display tbody tr.odd>.sorting_3, table.dataTable.order-column.stripe tbody tr.odd>.sorting_3 { 95 | background-color: whitesmoke 96 | } 97 | table.dataTable.display tbody tr.odd.selected>.sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1 { 98 | background-color: #a6b4cd 99 | } 100 | table.dataTable.display tbody tr.odd.selected>.sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2 { 101 | background-color: #a8b5cf 102 | } 103 | table.dataTable.display tbody tr.odd.selected>.sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3 { 104 | background-color: #a9b7d1 105 | } 106 | table.dataTable.display tbody tr.even>.sorting_1, table.dataTable.order-column.stripe tbody tr.even>.sorting_1 { 107 | background-color: #fafafa 108 | } 109 | table.dataTable.display tbody tr.even>.sorting_2, table.dataTable.order-column.stripe tbody tr.even>.sorting_2 { 110 | background-color: #fcfcfc 111 | } 112 | table.dataTable.display tbody tr.even>.sorting_3, table.dataTable.order-column.stripe tbody tr.even>.sorting_3 { 113 | background-color: #fefefe 114 | } 115 | table.dataTable.display tbody tr.even.selected>.sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1 { 116 | background-color: #acbad5 117 | } 118 | table.dataTable.display tbody tr.even.selected>.sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2 { 119 | background-color: #aebcd6 120 | } 121 | table.dataTable.display tbody tr.even.selected>.sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3 { 122 | background-color: #afbdd8 123 | } 124 | table.dataTable.display tbody tr:hover>.sorting_1, table.dataTable.order-column.hover tbody tr:hover>.sorting_1 { 125 | background-color: #eaeaea 126 | } 127 | table.dataTable.display tbody tr:hover>.sorting_2, table.dataTable.order-column.hover tbody tr:hover>.sorting_2 { 128 | background-color: #ececec 129 | } 130 | table.dataTable.display tbody tr:hover>.sorting_3, table.dataTable.order-column.hover tbody tr:hover>.sorting_3 { 131 | background-color: #efefef 132 | } 133 | table.dataTable.display tbody tr:hover.selected>.sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1 { 134 | background-color: #a2aec7 135 | } 136 | table.dataTable.display tbody tr:hover.selected>.sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2 { 137 | background-color: #a3b0c9 138 | } 139 | table.dataTable.display tbody tr:hover.selected>.sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3 { 140 | background-color: #a5b2cb 141 | } 142 | table.dataTable.no-footer { 143 | border-bottom: 1px solid #111 144 | } 145 | table.dataTable.nowrap th, table.dataTable.nowrap td { 146 | white-space: nowrap 147 | } 148 | table.dataTable.compact thead th, table.dataTable.compact thead td { 149 | padding: 4px 17px 4px 4px 150 | } 151 | table.dataTable.compact tfoot th, table.dataTable.compact tfoot td { 152 | padding: 4px 153 | } 154 | table.dataTable.compact tbody th, table.dataTable.compact tbody td { 155 | padding: 4px 156 | } 157 | table.dataTable th.dt-left, table.dataTable td.dt-left { 158 | text-align: left 159 | } 160 | table.dataTable th.dt-center, table.dataTable td.dt-center, table.dataTable td.dataTables_empty { 161 | text-align: center 162 | } 163 | table.dataTable th.dt-right, table.dataTable td.dt-right { 164 | text-align: right 165 | } 166 | table.dataTable th.dt-justify, table.dataTable td.dt-justify { 167 | text-align: justify 168 | } 169 | table.dataTable th.dt-nowrap, table.dataTable td.dt-nowrap { 170 | white-space: nowrap 171 | } 172 | table.dataTable thead th.dt-head-left, table.dataTable thead td.dt-head-left, table.dataTable tfoot th.dt-head-left, table.dataTable tfoot td.dt-head-left { 173 | text-align: left 174 | } 175 | table.dataTable thead th.dt-head-center, table.dataTable thead td.dt-head-center, table.dataTable tfoot th.dt-head-center, table.dataTable tfoot td.dt-head-center { 176 | text-align: center 177 | } 178 | table.dataTable thead th.dt-head-right, table.dataTable thead td.dt-head-right, table.dataTable tfoot th.dt-head-right, table.dataTable tfoot td.dt-head-right { 179 | text-align: right 180 | } 181 | table.dataTable thead th.dt-head-justify, table.dataTable thead td.dt-head-justify, table.dataTable tfoot th.dt-head-justify, table.dataTable tfoot td.dt-head-justify { 182 | text-align: justify 183 | } 184 | table.dataTable thead th.dt-head-nowrap, table.dataTable thead td.dt-head-nowrap, table.dataTable tfoot th.dt-head-nowrap, table.dataTable tfoot td.dt-head-nowrap { 185 | white-space: nowrap 186 | } 187 | table.dataTable tbody th.dt-body-left, table.dataTable tbody td.dt-body-left { 188 | text-align: left 189 | } 190 | table.dataTable tbody th.dt-body-center, table.dataTable tbody td.dt-body-center { 191 | text-align: center 192 | } 193 | table.dataTable tbody th.dt-body-right, table.dataTable tbody td.dt-body-right { 194 | text-align: right 195 | } 196 | table.dataTable tbody th.dt-body-justify, table.dataTable tbody td.dt-body-justify { 197 | text-align: justify 198 | } 199 | table.dataTable tbody th.dt-body-nowrap, table.dataTable tbody td.dt-body-nowrap { 200 | white-space: nowrap 201 | } 202 | table.dataTable, table.dataTable th, table.dataTable td { 203 | -webkit-box-sizing: content-box; 204 | -moz-box-sizing: content-box; 205 | box-sizing: content-box 206 | } 207 | .dataTables_wrapper { 208 | position: relative; 209 | clear: both; 210 | *zoom: 1; 211 | zoom: 1 212 | } 213 | .dataTables_wrapper .dataTables_length { 214 | float: left 215 | } 216 | .dataTables_wrapper .dataTables_filter { 217 | float: right; 218 | text-align: right 219 | } 220 | .dataTables_wrapper .dataTables_filter input { 221 | margin-left: 0.5em 222 | } 223 | .dataTables_wrapper .dataTables_info { 224 | clear: both; 225 | float: left; 226 | padding-top: 0.755em 227 | } 228 | .dataTables_wrapper .dataTables_paginate { 229 | float: right; 230 | text-align: right; 231 | padding-top: 0.25em 232 | } 233 | .dataTables_wrapper .dataTables_paginate .paginate_button { 234 | box-sizing: border-box; 235 | display: inline-block; 236 | min-width: 1.5em; 237 | padding: 0.5em 1em; 238 | margin-left: 2px; 239 | text-align: center; 240 | text-decoration: none !important; 241 | cursor: pointer; 242 | *cursor: hand; 243 | color: #333 !important; 244 | border: 1px solid transparent; 245 | border-radius: 2px 246 | } 247 | .dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { 248 | color: #333 !important; 249 | border: 1px solid #979797; 250 | background-color: white; 251 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc)); 252 | background: -webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%); 253 | background: -moz-linear-gradient(top, #fff 0%, #dcdcdc 100%); 254 | background: -ms-linear-gradient(top, #fff 0%, #dcdcdc 100%); 255 | background: -o-linear-gradient(top, #fff 0%, #dcdcdc 100%); 256 | background: linear-gradient(to bottom, #fff 0%, #dcdcdc 100%) 257 | } 258 | .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { 259 | cursor: default; 260 | color: #666 !important; 261 | border: 1px solid transparent; 262 | background: transparent; 263 | box-shadow: none 264 | } 265 | .dataTables_wrapper .dataTables_paginate .paginate_button:hover { 266 | /*color: white !important;*/ 267 | /*background: #1ab394;*/ 268 | /*border: 1px solid #111;*/ 269 | /* background-color: #585858; 270 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); 271 | background: -webkit-linear-gradient(top, #585858 0%, #111 100%); 272 | background: -moz-linear-gradient(top, #585858 0%, #111 100%); 273 | background: -ms-linear-gradient(top, #585858 0%, #111 100%); 274 | background: -o-linear-gradient(top, #585858 0%, #111 100%); 275 | background: linear-gradient(to bottom, #585858 0%, #111 100%)*/ 276 | } 277 | .dataTables_wrapper .dataTables_paginate .paginate_button:active { 278 | outline: none; 279 | /* background-color: #2b2b2b; 280 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); 281 | background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); 282 | background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); 283 | background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); 284 | background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); 285 | background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); 286 | box-shadow: inset 0 0 3px #111*/ 287 | } 288 | .dataTables_wrapper .dataTables_paginate .ellipsis { 289 | padding: 0 1em 290 | } 291 | .dataTables_wrapper .dataTables_processing { 292 | position: absolute; 293 | top: 50%; 294 | left: 50%; 295 | width: 100%; 296 | height: 40px; 297 | margin-left: -50%; 298 | margin-top: -25px; 299 | padding-top: 20px; 300 | text-align: center; 301 | font-size: 1.2em; 302 | background-color: white; 303 | background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); 304 | background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); 305 | background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); 306 | background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); 307 | background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); 308 | background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%) 309 | } 310 | .dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter, .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing, .dataTables_wrapper .dataTables_paginate { 311 | color: #333 312 | } 313 | .dataTables_wrapper .dataTables_scroll { 314 | clear: both 315 | } 316 | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { 317 | *margin-top: -1px; 318 | -webkit-overflow-scrolling: touch 319 | } 320 | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td { 321 | vertical-align: middle 322 | } 323 | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing { 324 | height: 0; 325 | overflow: hidden; 326 | margin: 0 !important; 327 | padding: 0 !important 328 | } 329 | .dataTables_wrapper.no-footer .dataTables_scrollBody { 330 | border-bottom: 1px solid #111 331 | } 332 | .dataTables_wrapper.no-footer div.dataTables_scrollHead table, .dataTables_wrapper.no-footer div.dataTables_scrollBody table { 333 | border-bottom: none 334 | } 335 | .dataTables_wrapper:after { 336 | visibility: hidden; 337 | display: block; 338 | content: ""; 339 | clear: both; 340 | height: 0 341 | } 342 | @media screen and (max-width:767px) { 343 | .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_paginate { 344 | float: none; 345 | text-align: center 346 | } 347 | .dataTables_wrapper .dataTables_paginate { 348 | margin-top: 0.5em 349 | } 350 | } 351 | @media screen and (max-width:640px) { 352 | .dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter { 353 | float: none; 354 | text-align: center 355 | } 356 | .dataTables_wrapper .dataTables_filter { 357 | margin-top: 0.5em 358 | } 359 | } 360 | table.dataTable { 361 | clear: both; 362 | margin-top: 6px !important; 363 | margin-bottom: 6px !important; 364 | max-width: none !important 365 | } 366 | table.dataTable td, table.dataTable th { 367 | -webkit-box-sizing: content-box; 368 | -moz-box-sizing: content-box; 369 | box-sizing: content-box 370 | } 371 | table.dataTable td.dataTables_empty, table.dataTable th.dataTables_empty { 372 | text-align: center 373 | } 374 | table.dataTable.nowrap th, table.dataTable.nowrap td { 375 | white-space: nowrap 376 | } 377 | div.dataTables_wrapper div.dataTables_length label { 378 | font-weight: normal; 379 | text-align: left; 380 | white-space: nowrap 381 | } 382 | div.dataTables_wrapper div.dataTables_length select { 383 | width: 75px; 384 | display: inline-block 385 | } 386 | div.dataTables_wrapper div.dataTables_filter { 387 | text-align: right 388 | } 389 | div.dataTables_wrapper div.dataTables_filter label { 390 | font-weight: normal; 391 | white-space: nowrap; 392 | text-align: left 393 | } 394 | div.dataTables_wrapper div.dataTables_filter input { 395 | margin-left: 0.5em; 396 | display: inline-block; 397 | width: auto 398 | } 399 | div.dataTables_wrapper div.dataTables_info { 400 | padding-top: 8px; 401 | white-space: nowrap 402 | } 403 | div.dataTables_wrapper div.dataTables_paginate { 404 | margin: 0; 405 | white-space: nowrap; 406 | text-align: right 407 | } 408 | div.dataTables_wrapper div.dataTables_paginate ul.pagination { 409 | margin: 2px 0; 410 | white-space: nowrap 411 | } 412 | div.dataTables_wrapper div.dataTables_processing { 413 | position: absolute; 414 | top: 50%; 415 | left: 50%; 416 | width: 200px; 417 | margin-left: -100px; 418 | margin-top: -26px; 419 | text-align: center; 420 | padding: 1em 0 421 | } 422 | table.dataTable thead>tr>th.sorting_asc, table.dataTable thead>tr>th.sorting_desc, table.dataTable thead>tr>th.sorting, table.dataTable thead>tr>td.sorting_asc, table.dataTable thead>tr>td.sorting_desc, table.dataTable thead>tr>td.sorting { 423 | padding-right: 30px 424 | } 425 | table.dataTable thead>tr>th:active, table.dataTable thead>tr>td:active { 426 | outline: none 427 | } 428 | table.dataTable thead .sorting, table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled { 429 | cursor: pointer; 430 | position: relative 431 | } 432 | table.dataTable thead .sorting:after, table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc:after, table.dataTable thead .sorting_asc_disabled:after, table.dataTable thead .sorting_desc_disabled:after { 433 | position: absolute; 434 | bottom: 8px; 435 | right: 8px; 436 | display: block; 437 | font-family: 'Glyphicons Halflings'; 438 | opacity: 0.5 439 | } 440 | table.dataTable thead .sorting:after { 441 | opacity: 0.2; 442 | content: "\e150" 443 | } 444 | table.dataTable thead .sorting_asc:after { 445 | content: "\e155" 446 | } 447 | table.dataTable thead .sorting_desc:after { 448 | content: "\e156" 449 | } 450 | table.dataTable thead .sorting_asc_disabled:after, table.dataTable thead .sorting_desc_disabled:after { 451 | color: #eee 452 | } 453 | div.dataTables_scrollHead table.dataTable { 454 | margin-bottom: 0 !important 455 | } 456 | div.dataTables_scrollBody table { 457 | border-top: none; 458 | margin-top: 0 !important; 459 | margin-bottom: 0 !important 460 | } 461 | div.dataTables_scrollBody table thead .sorting:after, div.dataTables_scrollBody table thead .sorting_asc:after, div.dataTables_scrollBody table thead .sorting_desc:after { 462 | display: none 463 | } 464 | div.dataTables_scrollBody table tbody tr:first-child th, div.dataTables_scrollBody table tbody tr:first-child td { 465 | border-top: none 466 | } 467 | div.dataTables_scrollFoot table { 468 | margin-top: 0 !important; 469 | border-top: none 470 | } 471 | @media screen and (max-width:767px) { 472 | div.dataTables_wrapper div.dataTables_length, div.dataTables_wrapper div.dataTables_filter, div.dataTables_wrapper div.dataTables_info, div.dataTables_wrapper div.dataTables_paginate { 473 | text-align: center 474 | } 475 | } 476 | table.dataTable.table-condensed>thead>tr>th { 477 | padding-right: 20px 478 | } 479 | table.dataTable.table-condensed .sorting:after, table.dataTable.table-condensed .sorting_asc:after, table.dataTable.table-condensed .sorting_desc:after { 480 | top: 6px; 481 | right: 6px 482 | } 483 | table.table-bordered.dataTable { 484 | border-collapse: separate !important 485 | } 486 | table.table-bordered.dataTable th, table.table-bordered.dataTable td { 487 | border-left-width: 0 488 | } 489 | table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable td:last-child, table.table-bordered.dataTable td:last-child { 490 | border-right-width: 0 491 | } 492 | table.table-bordered.dataTable tbody th, table.table-bordered.dataTable tbody td { 493 | border-bottom-width: 0 494 | } 495 | div.dataTables_scrollHead table.table-bordered { 496 | border-bottom-width: 0 497 | } 498 | div.table-responsive>div.dataTables_wrapper>div.row { 499 | margin: 0 500 | } 501 | div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child { 502 | padding-left: 0 503 | } 504 | div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child { 505 | padding-right: 0 506 | } -------------------------------------------------------------------------------- /static/vendor/datepicker/bootstrap-datepicker.zh-CN.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["zh-CN"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],daysShort:["周日","周一","周二","周三","周四","周五","周六"],daysMin:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今日",clear:"清除",format:"yyyy年mm月dd日",titleFormat:"yyyy年mm月",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /static/vendor/datepicker/bootstrap-datepicker3.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Datepicker for Bootstrap v1.6.0-dev (https://github.com/eternicode/bootstrap-datepicker) 3 | * 4 | * Copyright 2012 Stefan Petre 5 | * Improvements by Andrew Rowls 6 | * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) 7 | */ 8 | .datepicker{border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker.datepicker-rtl{direction:rtl}.datepicker.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0;padding:4px}.datepicker-dropdown:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(0,0,0,.15);border-top:0;border-bottom-color:rgba(0,0,0,.2);position:absolute}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;border-top:0;position:absolute}.datepicker-dropdown.datepicker-orient-left:before{left:6px}.datepicker-dropdown.datepicker-orient-left:after{left:7px}.datepicker-dropdown.datepicker-orient-right:before{right:6px}.datepicker-dropdown.datepicker-orient-right:after{right:7px}.datepicker-dropdown.datepicker-orient-bottom:before{top:-7px}.datepicker-dropdown.datepicker-orient-bottom:after{top:-6px}.datepicker-dropdown.datepicker-orient-top:before{bottom:-7px;border-bottom:0;border-top:7px solid rgba(0,0,0,.15)}.datepicker-dropdown.datepicker-orient-top:after{bottom:-6px;border-bottom:0;border-top:6px solid #fff}.datepicker>div{display:none}.datepicker table{margin:0;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker table tr td,.datepicker table tr th{text-align:center;width:30px;height:30px;border-radius:4px;border:none}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.new,.datepicker table tr td.old{color:#777}.datepicker table tr td.day:hover,.datepicker table tr td.focused{background:#eee;cursor:pointer}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:0 0;color:#777;cursor:default}.datepicker table tr td.highlighted{color:#000;background-color:#d9edf7;border-color:#85c5e5;border-radius:0}.datepicker table tr td.highlighted.focus,.datepicker table tr td.highlighted:focus{color:#000;background-color:#afd9ee;border-color:#298fc2}.datepicker table tr td.highlighted:hover{color:#000;background-color:#afd9ee;border-color:#52addb}.datepicker table tr td.highlighted.active,.datepicker table tr td.highlighted:active{color:#000;background-color:#afd9ee;border-color:#52addb}.datepicker table tr td.highlighted.active.focus,.datepicker table tr td.highlighted.active:focus,.datepicker table tr td.highlighted.active:hover,.datepicker table tr td.highlighted:active.focus,.datepicker table tr td.highlighted:active:focus,.datepicker table tr td.highlighted:active:hover{color:#000;background-color:#91cbe8;border-color:#298fc2}.datepicker table tr td.highlighted.disabled.focus,.datepicker table tr td.highlighted.disabled:focus,.datepicker table tr td.highlighted.disabled:hover,.datepicker table tr td.highlighted[disabled].focus,.datepicker table tr td.highlighted[disabled]:focus,.datepicker table tr td.highlighted[disabled]:hover,fieldset[disabled] .datepicker table tr td.highlighted.focus,fieldset[disabled] .datepicker table tr td.highlighted:focus,fieldset[disabled] .datepicker table tr td.highlighted:hover{background-color:#d9edf7;border-color:#85c5e5}.datepicker table tr td.highlighted.focused{background:#afd9ee}.datepicker table tr td.highlighted.disabled,.datepicker table tr td.highlighted.disabled:active{background:#d9edf7;color:#777}.datepicker table tr td.today{color:#000;background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today.focus,.datepicker table tr td.today:focus{color:#000;background-color:#ffc966;border-color:#b37400}.datepicker table tr td.today:hover{color:#000;background-color:#ffc966;border-color:#f59e00}.datepicker table tr td.today.active,.datepicker table tr td.today:active{color:#000;background-color:#ffc966;border-color:#f59e00}.datepicker table tr td.today.active.focus,.datepicker table tr td.today.active:focus,.datepicker table tr td.today.active:hover,.datepicker table tr td.today:active.focus,.datepicker table tr td.today:active:focus,.datepicker table tr td.today:active:hover{color:#000;background-color:#ffbc42;border-color:#b37400}.datepicker table tr td.today.disabled.focus,.datepicker table tr td.today.disabled:focus,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today[disabled].focus,.datepicker table tr td.today[disabled]:focus,.datepicker table tr td.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.today.focus,fieldset[disabled] .datepicker table tr td.today:focus,fieldset[disabled] .datepicker table tr td.today:hover{background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today.focused{background:#ffc966}.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:active{background:#ffdb99;color:#777}.datepicker table tr td.range{color:#000;background-color:#eee;border-color:#bbb;border-radius:0}.datepicker table tr td.range.focus,.datepicker table tr td.range:focus{color:#000;background-color:#d5d5d5;border-color:#7c7c7c}.datepicker table tr td.range:hover{color:#000;background-color:#d5d5d5;border-color:#9d9d9d}.datepicker table tr td.range.active,.datepicker table tr td.range:active{color:#000;background-color:#d5d5d5;border-color:#9d9d9d}.datepicker table tr td.range.active.focus,.datepicker table tr td.range.active:focus,.datepicker table tr td.range.active:hover,.datepicker table tr td.range:active.focus,.datepicker table tr td.range:active:focus,.datepicker table tr td.range:active:hover{color:#000;background-color:#c3c3c3;border-color:#7c7c7c}.datepicker table tr td.range.disabled.focus,.datepicker table tr td.range.disabled:focus,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range[disabled].focus,.datepicker table tr td.range[disabled]:focus,.datepicker table tr td.range[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.focus,fieldset[disabled] .datepicker table tr td.range:focus,fieldset[disabled] .datepicker table tr td.range:hover{background-color:#eee;border-color:#bbb}.datepicker table tr td.range.focused{background:#d5d5d5}.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:active{background:#eee;color:#777}.datepicker table tr td.range.highlighted{color:#000;background-color:#e4eef3;border-color:#9dc1d3}.datepicker table tr td.range.highlighted.focus,.datepicker table tr td.range.highlighted:focus{color:#000;background-color:#c1d7e3;border-color:#4b88a6}.datepicker table tr td.range.highlighted:hover{color:#000;background-color:#c1d7e3;border-color:#73a6c0}.datepicker table tr td.range.highlighted.active,.datepicker table tr td.range.highlighted:active{color:#000;background-color:#c1d7e3;border-color:#73a6c0}.datepicker table tr td.range.highlighted.active.focus,.datepicker table tr td.range.highlighted.active:focus,.datepicker table tr td.range.highlighted.active:hover,.datepicker table tr td.range.highlighted:active.focus,.datepicker table tr td.range.highlighted:active:focus,.datepicker table tr td.range.highlighted:active:hover{color:#000;background-color:#a8c8d8;border-color:#4b88a6}.datepicker table tr td.range.highlighted.disabled.focus,.datepicker table tr td.range.highlighted.disabled:focus,.datepicker table tr td.range.highlighted.disabled:hover,.datepicker table tr td.range.highlighted[disabled].focus,.datepicker table tr td.range.highlighted[disabled]:focus,.datepicker table tr td.range.highlighted[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.highlighted.focus,fieldset[disabled] .datepicker table tr td.range.highlighted:focus,fieldset[disabled] .datepicker table tr td.range.highlighted:hover{background-color:#e4eef3;border-color:#9dc1d3}.datepicker table tr td.range.highlighted.focused{background:#c1d7e3}.datepicker table tr td.range.highlighted.disabled,.datepicker table tr td.range.highlighted.disabled:active{background:#e4eef3;color:#777}.datepicker table tr td.range.today{color:#000;background-color:#f7ca77;border-color:#f1a417}.datepicker table tr td.range.today.focus,.datepicker table tr td.range.today:focus{color:#000;background-color:#f4b747;border-color:#815608}.datepicker table tr td.range.today:hover{color:#000;background-color:#f4b747;border-color:#bf800c}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today:active{color:#000;background-color:#f4b747;border-color:#bf800c}.datepicker table tr td.range.today.active.focus,.datepicker table tr td.range.today.active:focus,.datepicker table tr td.range.today.active:hover,.datepicker table tr td.range.today:active.focus,.datepicker table tr td.range.today:active:focus,.datepicker table tr td.range.today:active:hover{color:#000;background-color:#f2aa25;border-color:#815608}.datepicker table tr td.range.today.disabled.focus,.datepicker table tr td.range.today.disabled:focus,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today[disabled].focus,.datepicker table tr td.range.today[disabled]:focus,.datepicker table tr td.range.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.today.focus,fieldset[disabled] .datepicker table tr td.range.today:focus,fieldset[disabled] .datepicker table tr td.range.today:hover{background-color:#f7ca77;border-color:#f1a417}.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:active{background:#f7ca77;color:#777}.datepicker table tr td.selected,.datepicker table tr td.selected.highlighted{color:#fff;background-color:#777;border-color:#555;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.focus,.datepicker table tr td.selected.highlighted.focus,.datepicker table tr td.selected.highlighted:focus,.datepicker table tr td.selected:focus{color:#fff;background-color:#5e5e5e;border-color:#161616}.datepicker table tr td.selected.highlighted:hover,.datepicker table tr td.selected:hover{color:#fff;background-color:#5e5e5e;border-color:#373737}.datepicker table tr td.selected.active,.datepicker table tr td.selected.highlighted.active,.datepicker table tr td.selected.highlighted:active,.datepicker table tr td.selected:active{color:#fff;background-color:#5e5e5e;border-color:#373737}.datepicker table tr td.selected.active.focus,.datepicker table tr td.selected.active:focus,.datepicker table tr td.selected.active:hover,.datepicker table tr td.selected.highlighted.active.focus,.datepicker table tr td.selected.highlighted.active:focus,.datepicker table tr td.selected.highlighted.active:hover,.datepicker table tr td.selected.highlighted:active.focus,.datepicker table tr td.selected.highlighted:active:focus,.datepicker table tr td.selected.highlighted:active:hover,.datepicker table tr td.selected:active.focus,.datepicker table tr td.selected:active:focus,.datepicker table tr td.selected:active:hover{color:#fff;background-color:#4c4c4c;border-color:#161616}.datepicker table tr td.selected.disabled.focus,.datepicker table tr td.selected.disabled:focus,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.highlighted.disabled.focus,.datepicker table tr td.selected.highlighted.disabled:focus,.datepicker table tr td.selected.highlighted.disabled:hover,.datepicker table tr td.selected.highlighted[disabled].focus,.datepicker table tr td.selected.highlighted[disabled]:focus,.datepicker table tr td.selected.highlighted[disabled]:hover,.datepicker table tr td.selected[disabled].focus,.datepicker table tr td.selected[disabled]:focus,.datepicker table tr td.selected[disabled]:hover,fieldset[disabled] .datepicker table tr td.selected.focus,fieldset[disabled] .datepicker table tr td.selected.highlighted.focus,fieldset[disabled] .datepicker table tr td.selected.highlighted:focus,fieldset[disabled] .datepicker table tr td.selected.highlighted:hover,fieldset[disabled] .datepicker table tr td.selected:focus,fieldset[disabled] .datepicker table tr td.selected:hover{background-color:#777;border-color:#555}.datepicker table tr td.active,.datepicker table tr td.active.highlighted{color:#fff;background-color:#337ab7;border-color:#2e6da4;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.focus,.datepicker table tr td.active.highlighted.focus,.datepicker table tr td.active.highlighted:focus,.datepicker table tr td.active:focus{color:#fff;background-color:#286090;border-color:#122b40}.datepicker table tr td.active.highlighted:hover,.datepicker table tr td.active:hover{color:#fff;background-color:#286090;border-color:#204d74}.datepicker table tr td.active.active,.datepicker table tr td.active.highlighted.active,.datepicker table tr td.active.highlighted:active,.datepicker table tr td.active:active{color:#fff;background-color:#286090;border-color:#204d74}.datepicker table tr td.active.active.focus,.datepicker table tr td.active.active:focus,.datepicker table tr td.active.active:hover,.datepicker table tr td.active.highlighted.active.focus,.datepicker table tr td.active.highlighted.active:focus,.datepicker table tr td.active.highlighted.active:hover,.datepicker table tr td.active.highlighted:active.focus,.datepicker table tr td.active.highlighted:active:focus,.datepicker table tr td.active.highlighted:active:hover,.datepicker table tr td.active:active.focus,.datepicker table tr td.active:active:focus,.datepicker table tr td.active:active:hover{color:#fff;background-color:#204d74;border-color:#122b40}.datepicker table tr td.active.disabled.focus,.datepicker table tr td.active.disabled:focus,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.highlighted.disabled.focus,.datepicker table tr td.active.highlighted.disabled:focus,.datepicker table tr td.active.highlighted.disabled:hover,.datepicker table tr td.active.highlighted[disabled].focus,.datepicker table tr td.active.highlighted[disabled]:focus,.datepicker table tr td.active.highlighted[disabled]:hover,.datepicker table tr td.active[disabled].focus,.datepicker table tr td.active[disabled]:focus,.datepicker table tr td.active[disabled]:hover,fieldset[disabled] .datepicker table tr td.active.focus,fieldset[disabled] .datepicker table tr td.active.highlighted.focus,fieldset[disabled] .datepicker table tr td.active.highlighted:focus,fieldset[disabled] .datepicker table tr td.active.highlighted:hover,fieldset[disabled] .datepicker table tr td.active:focus,fieldset[disabled] .datepicker table tr td.active:hover{background-color:#337ab7;border-color:#2e6da4}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;border-radius:4px}.datepicker table tr td span:hover{background:#eee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:0 0;color:#777;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{color:#fff;background-color:#337ab7;border-color:#2e6da4;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.disabled.focus,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover.focus,.datepicker table tr td span.active.disabled:hover:focus,.datepicker table tr td span.active.focus,.datepicker table tr td span.active:focus,.datepicker table tr td span.active:hover.focus,.datepicker table tr td span.active:hover:focus{color:#fff;background-color:#286090;border-color:#122b40}.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover:hover{color:#fff;background-color:#286090;border-color:#204d74}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active{color:#fff;background-color:#286090;border-color:#204d74}.datepicker table tr td span.active.active.focus,.datepicker table tr td span.active.active:focus,.datepicker table tr td span.active.active:hover,.datepicker table tr td span.active.disabled.active.focus,.datepicker table tr td span.active.disabled.active:focus,.datepicker table tr td span.active.disabled.active:hover,.datepicker table tr td span.active.disabled:active.focus,.datepicker table tr td span.active.disabled:active:focus,.datepicker table tr td span.active.disabled:active:hover,.datepicker table tr td span.active.disabled:hover.active.focus,.datepicker table tr td span.active.disabled:hover.active:focus,.datepicker table tr td span.active.disabled:hover.active:hover,.datepicker table tr td span.active.disabled:hover:active.focus,.datepicker table tr td span.active.disabled:hover:active:focus,.datepicker table tr td span.active.disabled:hover:active:hover,.datepicker table tr td span.active:active.focus,.datepicker table tr td span.active:active:focus,.datepicker table tr td span.active:active:hover,.datepicker table tr td span.active:hover.active.focus,.datepicker table tr td span.active:hover.active:focus,.datepicker table tr td span.active:hover.active:hover,.datepicker table tr td span.active:hover:active.focus,.datepicker table tr td span.active:hover:active:focus,.datepicker table tr td span.active:hover:active:hover{color:#fff;background-color:#204d74;border-color:#122b40}.datepicker table tr td span.active.disabled.disabled.focus,.datepicker table tr td span.active.disabled.disabled:focus,.datepicker table tr td span.active.disabled.disabled:hover,.datepicker table tr td span.active.disabled.focus,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.disabled.focus,.datepicker table tr td span.active.disabled:hover.disabled:focus,.datepicker table tr td span.active.disabled:hover.disabled:hover,.datepicker table tr td span.active.disabled:hover[disabled].focus,.datepicker table tr td span.active.disabled:hover[disabled]:focus,.datepicker table tr td span.active.disabled:hover[disabled]:hover,.datepicker table tr td span.active.disabled[disabled].focus,.datepicker table tr td span.active.disabled[disabled]:focus,.datepicker table tr td span.active.disabled[disabled]:hover,.datepicker table tr td span.active:hover.disabled.focus,.datepicker table tr td span.active:hover.disabled:focus,.datepicker table tr td span.active:hover.disabled:hover,.datepicker table tr td span.active:hover[disabled].focus,.datepicker table tr td span.active:hover[disabled]:focus,.datepicker table tr td span.active:hover[disabled]:hover,.datepicker table tr td span.active[disabled].focus,.datepicker table tr td span.active[disabled]:focus,.datepicker table tr td span.active[disabled]:hover,fieldset[disabled] .datepicker table tr td span.active.disabled.focus,fieldset[disabled] .datepicker table tr td span.active.disabled:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover,fieldset[disabled] .datepicker table tr td span.active.disabled:hover.focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,fieldset[disabled] .datepicker table tr td span.active.focus,fieldset[disabled] .datepicker table tr td span.active:focus,fieldset[disabled] .datepicker table tr td span.active:hover,fieldset[disabled] .datepicker table tr td span.active:hover.focus,fieldset[disabled] .datepicker table tr td span.active:hover:focus,fieldset[disabled] .datepicker table tr td span.active:hover:hover{background-color:#337ab7;border-color:#2e6da4}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#777}.datepicker .datepicker-switch{width:145px}.datepicker .datepicker-switch,.datepicker .next,.datepicker .prev,.datepicker tfoot tr th{cursor:pointer}.datepicker .datepicker-switch:hover,.datepicker .next:hover,.datepicker .prev:hover,.datepicker tfoot tr th:hover{background:#eee}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.input-group.date .input-group-addon{cursor:pointer}.input-daterange{width:100%}.input-daterange input{text-align:center}.input-daterange input:first-child{border-radius:3px 0 0 3px}.input-daterange input:last-child{border-radius:0 3px 3px 0}.input-daterange .input-group-addon{width:auto;min-width:16px;padding:4px 5px;line-height:1.42857143;text-shadow:0 1px 0 #fff;border-width:1px 0;margin-left:-5px;margin-right:-5px} 9 | /*# sourceMappingURL=bootstrap-datepicker3.min.css.map */ -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/glyphicons/flat-ui-icons-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/glyphicons/flat-ui-icons-regular.eot -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/glyphicons/flat-ui-icons-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/glyphicons/flat-ui-icons-regular.ttf -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/glyphicons/flat-ui-icons-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/glyphicons/flat-ui-icons-regular.woff -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-black.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-black.eot -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-black.ttf -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-black.woff -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-bold.eot -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-bold.ttf -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-bold.woff -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-bolditalic.eot -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-bolditalic.ttf -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-bolditalic.woff -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-italic.eot -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-italic.ttf -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-italic.woff -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-light.eot -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-light.ttf -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-light.woff -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-regular.eot -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-regular.ttf -------------------------------------------------------------------------------- /static/vendor/flatui/fonts/lato/lato-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/fonts/lato/lato-regular.woff -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Book.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Calendar.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Chat.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Clipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Clipboard.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Compas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Compas.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Gift-Box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Gift-Box.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Infinity-Loop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Infinity-Loop.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Mail.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Map.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Pensils.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Pensils.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Pocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Pocket.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Retina-Ready.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Retina-Ready.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Toilet-Paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Toilet-Paper.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/png/Watches.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/icons/png/Watches.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/book.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/calendar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/chat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/clipboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/clocks.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/compas.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/gift-box.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/loop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/mail.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/map.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/paper-bag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/pencils.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/retina.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/ribbon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | POPULAR 9 | 10 | 14 | 21 | 25 | 29 | 30 | 33 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/icons/svg/toilet-paper.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/vendor/flatui/img/login/imac-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/login/imac-2x.png -------------------------------------------------------------------------------- /static/vendor/flatui/img/login/imac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/flatui/img/login/imac.png -------------------------------------------------------------------------------- /static/vendor/font-awesome/css/font-awesome.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} -------------------------------------------------------------------------------- /static/vendor/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /static/vendor/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /static/vendor/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /static/vendor/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /static/vendor/metismenu/metis-menu.min.css: -------------------------------------------------------------------------------- 1 | /* 2 | * metismenu - v1.1.3 3 | * Easy menu jQuery plugin for Twitter Bootstrap 3 4 | * https://github.com/onokumus/metisMenu 5 | * 6 | * Made by Osman Nuri Okumus 7 | * Under MIT License 8 | */ 9 | 10 | .arrow{float:right;line-height:1.42857}.glyphicon.arrow:before{content:"\e079"}.active>a>.glyphicon.arrow:before{content:"\e114"}.fa.arrow:before{content:"\f104"}.active>a>.fa.arrow:before{content:"\f107"}.plus-times{float:right}.fa.plus-times:before{content:"\f067"}.active>a>.fa.plus-times{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.plus-minus{float:right}.fa.plus-minus:before{content:"\f067"}.active>a>.fa.plus-minus:before{content:"\f068"} -------------------------------------------------------------------------------- /static/vendor/metismenu/metis-menu.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * metismenu - v1.1.3 3 | * Easy menu jQuery plugin for Twitter Bootstrap 3 4 | * https://github.com/onokumus/metisMenu 5 | * 6 | * Made by Osman Nuri Okumus 7 | * Under MIT License 8 | */ 9 | !function(a,b,c){function d(b,c){this.element=a(b),this.settings=a.extend({},f,c),this._defaults=f,this._name=e,this.init()}var e="metisMenu",f={toggle:!0,doubleTapToGo:!1};d.prototype={init:function(){var b=this.element,d=this.settings.toggle,f=this;this.isIE()<=9?(b.find("li.active").has("ul").children("ul").collapse("show"),b.find("li").not(".active").has("ul").children("ul").collapse("hide")):(b.find("li.active").has("ul").children("ul").addClass("collapse in"),b.find("li").not(".active").has("ul").children("ul").addClass("collapse")),f.settings.doubleTapToGo&&b.find("li.active").has("ul").children("a").addClass("doubleTapToGo"),b.find("li").has("ul").children("a").on("click."+e,function(b){return b.preventDefault(),f.settings.doubleTapToGo&&f.doubleTapToGo(a(this))&&"#"!==a(this).attr("href")&&""!==a(this).attr("href")?(b.stopPropagation(),void(c.location=a(this).attr("href"))):(a(this).parent("li").toggleClass("active").children("ul").collapse("toggle"),void(d&&a(this).parent("li").siblings().removeClass("active").children("ul.in").collapse("hide")))})},isIE:function(){for(var a,b=3,d=c.createElement("div"),e=d.getElementsByTagName("i");d.innerHTML="",e[0];)return b>4?b:a},doubleTapToGo:function(a){var b=this.element;return a.hasClass("doubleTapToGo")?(a.removeClass("doubleTapToGo"),!0):a.parent().children("ul").length?(b.find(".doubleTapToGo").removeClass("doubleTapToGo"),a.addClass("doubleTapToGo"),!1):void 0},remove:function(){this.element.off("."+e),this.element.removeData(e)}},a.fn[e]=function(b){return this.each(function(){var c=a(this);c.data(e)&&c.data(e).remove(),c.data(e,new d(this,b))}),this}}(jQuery,window,document); -------------------------------------------------------------------------------- /static/vendor/ngprogress/ngprogress.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/ngprogress/ngprogress.css -------------------------------------------------------------------------------- /static/vendor/ngprogress/ngprogress.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxinjing/woniu-cmdb/64722689dd1e9334a89a93683cdad825b9ef76d8/static/vendor/ngprogress/ngprogress.js -------------------------------------------------------------------------------- /static/vendor/sb-admin-2.js: -------------------------------------------------------------------------------- 1 | // 扩展jquery 2 | // 多个ajax执行完毕,出发函数 3 | $.whenAll = function() { 4 | var lastResolved = 0; 5 | 6 | var wrappedDeferreds = []; 7 | 8 | for (var i = 0; i < arguments.length; i++) { 9 | wrappedDeferreds.push(jQuery.Deferred()); 10 | 11 | arguments[i].always(function() { 12 | wrappedDeferreds[lastResolved++].resolve(arguments); 13 | }); 14 | } 15 | 16 | return jQuery.when.apply(jQuery, wrappedDeferreds).promise(); 17 | }; 18 | // 工具函数 提交 19 | // 传入form的id,成功函数 20 | $.rajax = function(form, fn, data) { 21 | var $form = $('#' + form) 22 | var url = $form.attr('action') 23 | var formstr = $form.serialize() 24 | if (data) { 25 | $.each(data, function(k, v) { 26 | formstr += "&" + k + "=" + v 27 | }) 28 | }; 29 | $.ajax({ 30 | url: url, 31 | data: formstr, 32 | type: 'post', 33 | dataType: 'json', 34 | error: function(res) { 35 | swal("出错了!", '', 'error'); 36 | }, 37 | success: function(data) { 38 | if (data.result) { 39 | fn(data) 40 | } else { 41 | swal("出错了!", data.error, 'error'); 42 | } 43 | } 44 | }) 45 | } 46 | // 工具函数 获取json 47 | $.jajax = function(url, fn) { 48 | $.ajax({ 49 | url: url, 50 | type: 'get', 51 | dataType: 'json', 52 | error: function(res) { 53 | swal("出错了!", '', 'error'); 54 | }, 55 | success: function(data) { 56 | if (data.result) { 57 | fn(data) 58 | } else { 59 | swal("出错了!", data.error, 'error'); 60 | } 61 | } 62 | }) 63 | } 64 | 65 | $.pajax = function(url, data,fn) { 66 | $.ajax({ 67 | url: url, 68 | data:data, 69 | type: 'post', 70 | dataType: 'json', 71 | error: function(res) { 72 | swal("出错了!", '', 'error'); 73 | }, 74 | success: function(data) { 75 | if (data.result) { 76 | fn(data) 77 | } else { 78 | swal("出错了!", data.error, 'error'); 79 | } 80 | } 81 | }) 82 | } 83 | 84 | 85 | 86 | // 使用规范 87 | // { 88 | // name:名字 89 | // titile:中文 90 | // modal_detail:是否用模态窗展示详情(有隐藏字段没展示) 91 | // 具体字段数据 92 | // data:[ 93 | // { 94 | // name: 95 | // title: 96 | // type:类型,默认input text 97 | // select_type:获取数据的action_type的值 98 | // option_val list的显示字段 默认id 99 | // option_name list的显示字段 默认name 100 | // toname:preload数据里,完成id到name得转换显示,select默认true 101 | // value:select直接从value里渲染,不发ajax和preload,如果没有type,就是input里的value属性 102 | // hide:默认false,true的话隐藏此字段 103 | 104 | 105 | // } 106 | // ] 107 | // } 108 | var RebootPage = function(opt) { 109 | // name,决定操作的type 110 | this.name = opt.name 111 | // 中文名,显示文字 112 | this.title = opt.title 113 | // 初始化data 114 | this.data = opt.data 115 | // 添加地址,addurl或者默认addapi 116 | this.addurl = opt.addurl || '' 117 | // 更新地址 默认updateapi 118 | this.updateurl = opt.updateurl || '' 119 | // 表单验证数据 120 | this.validators = {} 121 | // 是否显示详情按钮 122 | this.modal_detail = opt.modal_detail 123 | // 预加载数据,预加载完毕之后,才渲染页面 124 | this.preload = {} 125 | //弹出窗的标签 126 | this.modalArr = ['', 127 | '', 128 | '', 129 | '', 130 | '×', 131 | '', 132 | '', 133 | '', 134 | '', 135 | '', 136 | '', 137 | '' 138 | ], 139 | this.isInit = true 140 | } 141 | 142 | var oLanguage = { 143 | "oAria": { 144 | "sSortAscending": ": 升序排列", 145 | "sSortDescending": ": 降序排列" 146 | }, 147 | "oPaginate": { 148 | "sFirst": "首页", 149 | "sLast": "末页", 150 | "sNext": "下页", 151 | "sPrevious": "上页" 152 | }, 153 | "sEmptyTable": "没有相关记录", 154 | "sInfo": "第 _START_ 到 _END_ 条记录,共 _TOTAL_ 条", 155 | "sInfoEmpty": "第 0 到 0 条记录,共 0 条", 156 | "sInfoFiltered": "(从 _MAX_ 条记录中检索)", 157 | "sInfoPostFix": "", 158 | "sDecimal": "", 159 | "sThousands": ",", 160 | "sLengthMenu": "每页显示条数: _MENU_", 161 | "sLoadingRecords": "正在载入...", 162 | "sProcessing": "正在载入...", 163 | "sSearch": "搜索:", 164 | "sSearchPlaceholder": "", 165 | "sUrl": "", 166 | "sZeroRecords": "没有相关记录" 167 | } 168 | $.fn.dataTable.defaults.oLanguage = oLanguage; 169 | $.extend(RebootPage.prototype, { 170 | // 启动函数 171 | init: function() { 172 | var that = this 173 | //所有ajax请求 174 | var arr = [] 175 | // 所有类型 176 | var typearr = [] 177 | // 有select_type字段的,都是需要预加载的 178 | $.each(this.data, function(i, v) { 179 | if (v.value) { 180 | that.preload[v.name] = v.value 181 | } 182 | if (v.select_type) { 183 | var url = '/listapi?action_type=' + v.select_type 184 | typearr.push(v) 185 | // console.log(url) 186 | arr.push($.getJSON(url)) 187 | // console.log(v) 188 | }; 189 | 190 | }) 191 | // 所有ajax请求完成之后,启动页面,预加载的数据存在this.preload中 192 | $.whenAll.apply($, arr).then(function() { 193 | $.each(arguments, function(index, value) { 194 | var config = typearr[index] 195 | var obj = that.preload[config.select_type] = {} 196 | // 默认是id=》name, 197 | var val = config.option_val || 'id' 198 | var name = config.option_name || 'name' 199 | $.each(value[0].result, function(i, v) { 200 | obj[v[val]] = v[name] 201 | }) 202 | 203 | }) 204 | that.initPage() 205 | }) 206 | 207 | }, 208 | initPage: function() { 209 | // 启动页面 210 | var that = this 211 | that.initForm() 212 | that.initAddModal() 213 | that.initUpdateModal() 214 | if (that.modal_detail) { 215 | that.initDetailModal() 216 | }; 217 | that.initAddBtn() 218 | that.initTable() 219 | that.getlist() 220 | that.bindEvents() 221 | // console.log(that.preload) 222 | 223 | }, 224 | // 初始化表单 根据传入的opt,循环,拼接bootstrap风格的表单字符串,放倒this上 225 | // 注意对select和input的不同处理 226 | initForm: function() { 227 | var that = this 228 | var formArr = [''] 229 | $.each(this.data, function(indev, val) { 230 | // 表单验证配置 231 | if (!val.empty) { 232 | that.validators[val.name] = { 233 | validators: { 234 | notEmpty: { 235 | message: val.msg || '请输入' + val.title 236 | } 237 | } 238 | } 239 | }; 240 | 241 | val.placeholder = val.placeholder || '请输入' + val.title 242 | val.type = val.type || 'text' 243 | formArr.push('') 244 | formArr.push('' + val.title + '') 245 | formArr.push('') 246 | if (val.type == 'select') { 247 | var optionData = that.preload[val.select_type || val.name] 248 | // console.log(optionData) 249 | var temp = [''] 250 | $.each(optionData, function(k, v) { 251 | temp.push('' + v + '') 252 | }) 253 | temp.push('') 254 | formArr.push(temp.join('')) 255 | 256 | } else if (val.type == 'date') { 257 | formArr.push('') 258 | } else { 259 | if (val.value) { 260 | formArr.push('') 261 | } else { 262 | formArr.push('') 263 | } 264 | 265 | } 266 | formArr.push('') 267 | }) 268 | formArr.push('' + 269 | '' + 270 | '' + 271 | '' + 272 | ' 取消' + 273 | '' + 274 | '') 275 | formArr.push('') 276 | this.formStr = formArr.join('') 277 | }, 278 | // initForm之后,加上添加的属性,就是一个添加的表单 279 | // 设置id 按钮的文字 280 | initAddForm: function() { 281 | var that = this 282 | var addForm = $(this.formStr).attr('id', 'add' + this.name + 'Form') 283 | .find('[type="submit"]').val('添加').end() 284 | //添加地址,addurl或者默认add+name 285 | // addForm.attr('action', this.addurl || 'add' + this.name) 286 | addForm.attr('action', this.addurl || '/addapi') 287 | addForm.append('') 288 | this.addForm = addForm 289 | this.addFormValidate() 290 | }, 291 | // initForm之后,加上更新的属性,就是一个更新的表单 292 | // 设置id 按钮的文字 293 | 294 | initUpdateForm: function() { 295 | var that = this 296 | var updateForm = $(this.formStr).attr('id', 'update' + this.name + 'Form') 297 | .find('[type="submit"]').val('编辑').end() 298 | // updateForm.attr('action', this.updateurl || 'update' + this.name) 299 | updateForm.attr('action', this.updateurl || '/updateapi') 300 | updateForm.append('') 301 | this.updateForm = updateForm 302 | this.updateFormValidate() 303 | }, 304 | // 初始化新增项目的弹出窗,把表单塞进去,最后放到文档里 305 | initAddModal: function() { 306 | this.initAddForm() 307 | this.addModal = $(this.modalArr.join('')).attr('id', 'add' + this.name + 'modal') 308 | .find('.modal-title').html('添加' + this.title) 309 | .end() 310 | .find('.modal-body').append(this.addForm) 311 | .end() 312 | $('body').append(this.addModal) 313 | }, 314 | // 初始化更新项目的modal,只是把表单塞进去,还没有数据渲染 315 | initUpdateModal: function() { 316 | this.initUpdateForm() 317 | this.updateModal = $(this.modalArr.join('')).attr('id', 'update' + this.name + 'modal') 318 | .find('.modal-title').html('更新' + this.title) 319 | .end() 320 | .find('.modal-body').append(this.updateForm) 321 | .end() 322 | $('body').append(this.updateModal) 323 | }, 324 | // 详情弹出窗口 325 | initDetailModal:function(){ 326 | this.detailModal = $(this.modalArr.join('')).attr('id', 'detail' + this.name + 'modal') 327 | .find('.modal-title').html( this.title+'详情') 328 | .end() 329 | $('body').append(this.detailModal) 330 | }, 331 | // 添加一个addBTN在表格上面,和添加的表单对应,点击能打开 332 | initAddBtn: function() { 333 | $('#main-content').prepend('' + 335 | '添加' + this.title + '') 336 | $('#main-content').on('click.add','.add-modal',function(){ 337 | var modalName = $(this).data('target') 338 | $(modalName).modal('show') 339 | }) 340 | }, 341 | // 添加表单验证 342 | addFormValidate: function() { 343 | var that = this 344 | that.addForm.formValidation({ 345 | framework: 'bootstrap', 346 | icon: { 347 | valid: 'glyphicon glyphicon-ok', 348 | invalid: 'glyphicon glyphicon-remove', 349 | validating: 'glyphicon glyphicon-refresh' 350 | }, 351 | fields: that.validators 352 | }).off('success.form.fv').on('success.form.fv', function(e) { 353 | e.preventDefault(); 354 | var $form = $(e.target), // The form instance 355 | fv = $(e.target).data('formValidation'); // FormValidation instance 356 | $.rajax($form.attr('id'), function(data) { 357 | swal("添加成功!", '', 'success'); 358 | that.addForm[0].reset() 359 | that.addModal.modal('hide') 360 | that.getlist() 361 | // getManu() 362 | }) 363 | 364 | }); 365 | 366 | }, 367 | // 更新表单验证 368 | updateFormValidate: function() { 369 | var that = this 370 | that.updateForm.formValidation({ 371 | framework: 'bootstrap', 372 | icon: { 373 | valid: 'glyphicon glyphicon-ok', 374 | invalid: 'glyphicon glyphicon-remove', 375 | validating: 'glyphicon glyphicon-refresh' 376 | }, 377 | fields: that.validators 378 | }).off('success.form.fv').on('success.form.fv', function(e) { 379 | e.preventDefault(); 380 | var $form = $(e.target), // The form instance 381 | fv = $(e.target).data('formValidation'); // FormValidation instance 382 | $.rajax($form.attr('id'), function(data) { 383 | swal("更新成功!", '', 'success'); 384 | that.updateModal.modal('hide') 385 | that.updateForm.find('[type="hidden"]').remove() 386 | .end().append('')[0].reset() 387 | that.getlist() 388 | }) 389 | 390 | }); 391 | }, 392 | // 绑定事件,现在之后更新按钮的事件,后续再扩展吧 393 | bindEvents: function() { 394 | var that = this 395 | $('.input-datepicker').datepicker({ 396 | format: "yyyy-mm-dd", 397 | language: "zh-CN" 398 | }); 399 | // that.initSelect() 400 | $(document).off('click.update').on('click.update', '.update', function() { 401 | var obj = $(this).data() 402 | console.log(obj) 403 | $.each(obj, function(key, val) { 404 | if (that.updateForm.find('[name="' + key + '"]').length) { 405 | that.updateForm.find('[name="' + key + '"]').val(val) 406 | } else { 407 | that.updateForm.prepend('') 408 | } 409 | }) 410 | that.updateModal.modal('show') 411 | }) 412 | $(document).off('click.delete').on('click.delete', '.delete', function() { 413 | var id = $(this).data('id') 414 | var type=that.name 415 | 416 | swal({ 417 | title: "确认删除吗?", 418 | type: "warning", 419 | showCancelButton: true, 420 | confirmButtonColor: "#DD6B55", 421 | confirmButtonText: "删除", 422 | closeOnConfirm: false 423 | }, function() { 424 | 425 | $.pajax('/delapi',{id:id,action_type:type},function(res){ 426 | swal("删除!", '', 'success'); 427 | that.getlist() 428 | 429 | }) 430 | }); 431 | 432 | 433 | 434 | 435 | 436 | }) 437 | $(document).off('click.detail').on('click.detail', '.detail', function() { 438 | var obj = $(this).data() 439 | var tableArr = [''] 440 | $.each(that.data,function(index,value){ 441 | var name 442 | if (value.type == 'select' && value.name !== 'service_id') { 443 | var type = value.select_type || value.name 444 | name = that.preload[type][obj[value.name]] 445 | } else { 446 | name = obj[value.name] 447 | } 448 | 449 | tableArr.push(''+value.title+''+name+'') 450 | }) 451 | tableArr.push('') 452 | that.detailModal.find('.modal-body').html(tableArr.join('')) 453 | .end().modal('show') 454 | }) 455 | }, 456 | // 初始化table字符串,表头信息 457 | initTable: function() { 458 | var that = this 459 | var tableArr = [''] 460 | 461 | var thead = ['', ''] 462 | $.each(that.data, function(i, v) { 463 | if (!v.hide) { 464 | thead.push('' + v.title + '') 465 | }; 466 | 467 | }) 468 | thead.push('操作') 469 | tableArr.push(thead.join('')) 470 | tableArr.push('') 471 | var table = $(tableArr.join('')) 472 | this.tbody = table.find('tbody') 473 | $('#main-content').append(table) 474 | }, 475 | // 调用ajax接口,获取对应list,listapi,渲染表格 476 | getlist: function() { 477 | var that = this 478 | $.jajax('/listapi?action_type=' + that.name, function(data) { 479 | var arr = [] 480 | // 循环result,每个数据是一行 481 | $.each(data.result, function(i, v) { 482 | var btn = ['') 484 | //将数据放在data里,编辑的时候从这里取数据渲染表单 485 | $.each(v, function(key, val) { 486 | if (val || val === 0) { 487 | btn.push(' data-' + key + '=' + val) 488 | }; 489 | 490 | }) 491 | btn.push('>') 492 | 493 | // 编辑传进来的data,取每一列的key,再从result的数据里取数据渲染 494 | // 如果data里hide是true,则隐藏 495 | $.each(that.data, function(index, value) { 496 | // console.log(value) 497 | if (!value.hide) { 498 | var name 499 | if (value.type == 'select' && value.name !== 'service_id') { 500 | var type = value.select_type || value.name 501 | name = that.preload[type][v[value.name]] 502 | } else { 503 | name = v[value.name] 504 | } 505 | arr.push('' + name + '') 506 | }; 507 | 508 | }) 509 | var operateBtn = $(btn.join('')).addClass('update').html('更新').prop('outerHTML') 510 | if (that.modal_detail) { 511 | operateBtn += $(btn.join('')).addClass('detail').html('详细').prop('outerHTML') 512 | }; 513 | operateBtn += $(btn.join('')).removeClass('btn-primary').addClass('delete').addClass('btn-danger').html('删除').prop('outerHTML') 514 | 515 | arr.push('' + operateBtn+ '') 516 | arr.push('') 517 | 518 | }) 519 | that.renderDatatable(arr.join('')) 520 | 521 | }) 522 | }, 523 | 524 | // 用datatable启动分页和查询,ajax更新的时候,销毁再重新启动 525 | renderDatatable: function(str) { 526 | if (this.isInit) { 527 | this.isInit = false 528 | this.tbody.html(str) 529 | } else { 530 | $('.table').dataTable().fnClearTable(); //清空一下table 531 | $('.table').dataTable().fnDestroy(); //还原初始化了的datatable 532 | this.tbody.html(str) 533 | } 534 | // $('.table').DataTable().destory(); 535 | $('.table').DataTable({ 536 | responsive: true, 537 | bLengthChange: false 538 | // bFilter:false, 539 | // iDisplayLength:5 540 | }); 541 | }, 542 | }) 543 | $.rebootOps = function(opt) { 544 | var reboot = new RebootPage(opt) 545 | reboot.init() 546 | } 547 | 548 | 549 | $(function() { 550 | $('#side-menu').metisMenu(); 551 | 552 | 553 | $(window).bind("load resize", function() { 554 | topOffset = 50; 555 | width = (this.window.innerWidth > 0) ? this.window.innerWidth : this.screen.width; 556 | if (width < 768) { 557 | $('div.navbar-collapse').addClass('collapse'); 558 | topOffset = 100; // 2-row-menu 559 | } else { 560 | $('div.navbar-collapse').removeClass('collapse'); 561 | } 562 | 563 | height = ((this.window.innerHeight > 0) ? this.window.innerHeight : this.screen.height) - 1; 564 | height = height - topOffset; 565 | if (height < 1) height = 1; 566 | if (height > topOffset) { 567 | $("#page-wrapper").css("min-height", (height) + "px"); 568 | } 569 | }); 570 | 571 | var url = window.location; 572 | var element = $('ul.nav a').filter(function() { 573 | return this.href == url || url.href.indexOf(this.href) == 0; 574 | }).addClass('active').parent().parent().addClass('in').parent(); 575 | if (element.is('li')) { 576 | element.addClass('active'); 577 | } 578 | $('.form-control-static .fa').addClass('text-primary') 579 | 580 | }); -------------------------------------------------------------------------------- /static/vendor/select/select2.min.css: -------------------------------------------------------------------------------- 1 | .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid #000 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} 2 | -------------------------------------------------------------------------------- /static/vendor/select/zh-CN.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /static/vendor/timeline.css: -------------------------------------------------------------------------------- 1 | .timeline { 2 | position: relative; 3 | padding: 20px 0 20px; 4 | list-style: none; 5 | } 6 | 7 | .timeline:before { 8 | content: " "; 9 | position: absolute; 10 | top: 0; 11 | bottom: 0; 12 | left: 50%; 13 | width: 3px; 14 | margin-left: -1.5px; 15 | background-color: #eeeeee; 16 | } 17 | 18 | .timeline > li { 19 | position: relative; 20 | margin-bottom: 20px; 21 | } 22 | 23 | .timeline > li:before, 24 | .timeline > li:after { 25 | content: " "; 26 | display: table; 27 | } 28 | 29 | .timeline > li:after { 30 | clear: both; 31 | } 32 | 33 | .timeline > li:before, 34 | .timeline > li:after { 35 | content: " "; 36 | display: table; 37 | } 38 | 39 | .timeline > li:after { 40 | clear: both; 41 | } 42 | 43 | .timeline > li > .timeline-panel { 44 | float: left; 45 | position: relative; 46 | width: 46%; 47 | padding: 20px; 48 | border: 1px solid #d4d4d4; 49 | border-radius: 2px; 50 | -webkit-box-shadow: 0 1px 6px rgba(0,0,0,0.175); 51 | box-shadow: 0 1px 6px rgba(0,0,0,0.175); 52 | } 53 | 54 | .timeline > li > .timeline-panel:before { 55 | content: " "; 56 | display: inline-block; 57 | position: absolute; 58 | top: 26px; 59 | right: -15px; 60 | border-top: 15px solid transparent; 61 | border-right: 0 solid #ccc; 62 | border-bottom: 15px solid transparent; 63 | border-left: 15px solid #ccc; 64 | } 65 | 66 | .timeline > li > .timeline-panel:after { 67 | content: " "; 68 | display: inline-block; 69 | position: absolute; 70 | top: 27px; 71 | right: -14px; 72 | border-top: 14px solid transparent; 73 | border-right: 0 solid #fff; 74 | border-bottom: 14px solid transparent; 75 | border-left: 14px solid #fff; 76 | } 77 | 78 | .timeline > li > .timeline-badge { 79 | z-index: 100; 80 | position: absolute; 81 | top: 16px; 82 | left: 50%; 83 | width: 50px; 84 | height: 50px; 85 | margin-left: -25px; 86 | border-radius: 50% 50% 50% 50%; 87 | text-align: center; 88 | font-size: 1.4em; 89 | line-height: 50px; 90 | color: #fff; 91 | background-color: #999999; 92 | } 93 | 94 | .timeline > li.timeline-inverted > .timeline-panel { 95 | float: right; 96 | } 97 | 98 | .timeline > li.timeline-inverted > .timeline-panel:before { 99 | right: auto; 100 | left: -15px; 101 | border-right-width: 15px; 102 | border-left-width: 0; 103 | } 104 | 105 | .timeline > li.timeline-inverted > .timeline-panel:after { 106 | right: auto; 107 | left: -14px; 108 | border-right-width: 14px; 109 | border-left-width: 0; 110 | } 111 | 112 | .timeline-badge.primary { 113 | background-color: #2e6da4 !important; 114 | } 115 | 116 | .timeline-badge.success { 117 | background-color: #3f903f !important; 118 | } 119 | 120 | .timeline-badge.warning { 121 | background-color: #f0ad4e !important; 122 | } 123 | 124 | .timeline-badge.danger { 125 | background-color: #d9534f !important; 126 | } 127 | 128 | .timeline-badge.info { 129 | background-color: #5bc0de !important; 130 | } 131 | 132 | .timeline-title { 133 | margin-top: 0; 134 | color: inherit; 135 | } 136 | 137 | .timeline-body > p, 138 | .timeline-body > ul { 139 | margin-bottom: 0; 140 | } 141 | 142 | .timeline-body > p + p { 143 | margin-top: 5px; 144 | } 145 | 146 | @media(max-width:767px) { 147 | ul.timeline:before { 148 | left: 40px; 149 | } 150 | 151 | ul.timeline > li > .timeline-panel { 152 | width: calc(100% - 90px); 153 | width: -moz-calc(100% - 90px); 154 | width: -webkit-calc(100% - 90px); 155 | } 156 | 157 | ul.timeline > li > .timeline-badge { 158 | top: 16px; 159 | left: 15px; 160 | margin-left: 0; 161 | } 162 | 163 | ul.timeline > li > .timeline-panel { 164 | float: right; 165 | } 166 | 167 | ul.timeline > li > .timeline-panel:before { 168 | right: auto; 169 | left: -15px; 170 | border-right-width: 15px; 171 | border-left-width: 0; 172 | } 173 | 174 | ul.timeline > li > .timeline-panel:after { 175 | right: auto; 176 | left: -14px; 177 | border-right-width: 14px; 178 | border-left-width: 0; 179 | } 180 | } -------------------------------------------------------------------------------- /static/vendor/underscore.js: -------------------------------------------------------------------------------- 1 | // Underscore.js 1.8.2 2 | // http://underscorejs.org 3 | // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 4 | // Underscore may be freely distributed under the MIT license. 5 | (function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=d(e,i,4);var o=!w(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=b(r,e);for(var u=null!=t&&t.length,i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function r(n,t){var r=S.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||o,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=S[r],i in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var e=this,u=e._,i=Array.prototype,o=Object.prototype,a=Function.prototype,c=i.push,l=i.slice,f=o.toString,s=o.hasOwnProperty,p=Array.isArray,h=Object.keys,v=a.bind,g=Object.create,y=function(){},m=function(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=m),exports._=m):e._=m,m.VERSION="1.8.2";var d=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}},b=function(n,t,r){return null==n?m.identity:m.isFunction(n)?d(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return b(n,t,1/0)};var x=function(n,t){return function(r){var e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var l=o[c];t&&r[l]!==void 0||(r[l]=i[l])}return r}},_=function(n){if(!m.isObject(n))return{};if(g)return g(n);y.prototype=n;var t=new y;return y.prototype=null,t},j=Math.pow(2,53)-1,w=function(n){var t=n&&n.length;return"number"==typeof t&&t>=0&&j>=t};m.each=m.forEach=function(n,t,r){t=d(t,r);var e,u;if(w(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},m.map=m.collect=function(n,t,r){t=b(t,r);for(var e=!w(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var a=e?e[o]:o;i[o]=t(n[a],a,n)}return i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var e;return e=w(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return t=b(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return m.filter(n,m.negate(b(t)),r)},m.every=m.all=function(n,t,r){t=b(t,r);for(var e=!w(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=b(t,r);for(var e=!w(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r){return w(n)||(n=m.values(n)),m.indexOf(n,t,"number"==typeof r&&r)>=0},m.invoke=function(n,t){var r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return m.map(n,m.property(t))},m.where=function(n,t){return m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return m.find(n,m.matcher(t))},m.max=function(n,t,r){var e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=w(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else t=b(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},m.min=function(n,t,r){var e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=w(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else t=b(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return i},m.shuffle=function(n){for(var t,r=w(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},m.sample=function(n,t,r){return null==t||r?(w(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return t=b(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var A=function(n){return function(t,r,e){var u={};return r=b(r,e),m.each(t,function(e,i){var o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=A(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=A(function(n,t,r){n[r]=t}),m.countBy=A(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return n?m.isArray(n)?l.call(n):w(n)?m.map(n,m.identity):m.values(n):[]},m.size=function(n){return null==n?0:w(n)?n.length:m.keys(n).length},m.partition=function(n,t,r){t=b(t,r);var e=[],u=[];return m.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},m.first=m.head=m.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:m.initial(n,n.length-t)},m.initial=function(n,t,r){return l.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},m.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:m.rest(n,Math.max(0,n.length-t))},m.rest=m.tail=m.drop=function(n,t,r){return l.call(n,null==t||r?1:t)},m.compact=function(n){return m.filter(n,m.identity)};var k=function(n,t,r,e){for(var u=[],i=0,o=e||0,a=n&&n.length;a>o;o++){var c=n[o];if(w(c)&&(m.isArray(c)||m.isArguments(c))){t||(c=k(c,t,r));var l=0,f=c.length;for(u.length+=f;f>l;)u[i++]=c[l++]}else r||(u[i++]=c)}return u};m.flatten=function(n,t){return k(n,t,!1)},m.without=function(n){return m.difference(n,l.call(arguments,1))},m.uniq=m.unique=function(n,t,r,e){if(null==n)return[];m.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=b(r,e));for(var u=[],i=[],o=0,a=n.length;a>o;o++){var c=n[o],l=r?r(c,o,n):c;t?(o&&i===l||u.push(c),i=l):r?m.contains(i,l)||(i.push(l),u.push(c)):m.contains(u,c)||u.push(c)}return u},m.union=function(){return m.uniq(k(arguments,!0,!0))},m.intersection=function(n){if(null==n)return[];for(var t=[],r=arguments.length,e=0,u=n.length;u>e;e++){var i=n[e];if(!m.contains(t,i)){for(var o=1;r>o&&m.contains(arguments[o],i);o++);o===r&&t.push(i)}}return t},m.difference=function(n){var t=k(arguments,!0,!0,1);return m.filter(n,function(n){return!m.contains(t,n)})},m.zip=function(){return m.unzip(arguments)},m.unzip=function(n){for(var t=n&&m.max(n,"length").length||0,r=Array(t),e=0;t>e;e++)r[e]=m.pluck(n,e);return r},m.object=function(n,t){for(var r={},e=0,u=n&&n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},m.indexOf=function(n,t,r){var e=0,u=n&&n.length;if("number"==typeof r)e=0>r?Math.max(0,u+r):r;else if(r&&u)return e=m.sortedIndex(n,t),n[e]===t?e:-1;if(t!==t)return m.findIndex(l.call(n,e),m.isNaN);for(;u>e;e++)if(n[e]===t)return e;return-1},m.lastIndexOf=function(n,t,r){var e=n?n.length:0;if("number"==typeof r&&(e=0>r?e+r+1:Math.min(e,r+1)),t!==t)return m.findLastIndex(l.call(n,0,e),m.isNaN);for(;--e>=0;)if(n[e]===t)return e;return-1},m.findIndex=t(1),m.findLastIndex=t(-1),m.sortedIndex=function(n,t,r,e){r=b(r,e,1);for(var u=r(t),i=0,o=n.length;o>i;){var a=Math.floor((i+o)/2);r(n[a])i;i++,n+=r)u[i]=n;return u};var O=function(n,t,r,e,u){if(!(e instanceof t))return n.apply(r,u);var i=_(n.prototype),o=n.apply(i,u);return m.isObject(o)?o:i};m.bind=function(n,t){if(v&&n.bind===v)return v.apply(n,l.call(arguments,1));if(!m.isFunction(n))throw new TypeError("Bind must be called on a function");var r=l.call(arguments,2),e=function(){return O(n,e,t,this,r.concat(l.call(arguments)))};return e},m.partial=function(n){var t=l.call(arguments,1),r=function(){for(var e=0,u=t.length,i=Array(u),o=0;u>o;o++)i[o]=t[o]===m?arguments[e++]:t[o];for(;e=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=m.bind(n[r],n);return n},m.memoize=function(n,t){var r=function(e){var u=r.cache,i=""+(t?t.apply(this,arguments):e);return m.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},m.delay=function(n,t){var r=l.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(n,t,r){var e,u,i,o=null,a=0;r||(r={});var c=function(){a=r.leading===!1?0:m.now(),o=null,i=n.apply(e,u),o||(e=u=null)};return function(){var l=m.now();a||r.leading!==!1||(a=l);var f=t-(l-a);return e=this,u=arguments,0>=f||f>t?(o&&(clearTimeout(o),o=null),a=l,i=n.apply(e,u),o||(e=u=null)):o||r.trailing===!1||(o=setTimeout(c,f)),i}},m.debounce=function(n,t,r){var e,u,i,o,a,c=function(){var l=m.now()-o;t>l&&l>=0?e=setTimeout(c,t-l):(e=null,r||(a=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,o=m.now();var l=r&&!e;return e||(e=setTimeout(c,t)),l&&(a=n.apply(i,u),i=u=null),a}},m.wrap=function(n,t){return m.partial(t,n)},m.negate=function(n){return function(){return!n.apply(this,arguments)}},m.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},m.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},m.before=function(n,t){var r;return function(){return--n>0&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}},m.once=m.partial(m.before,2);var F=!{toString:null}.propertyIsEnumerable("toString"),S=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];m.keys=function(n){if(!m.isObject(n))return[];if(h)return h(n);var t=[];for(var e in n)m.has(n,e)&&t.push(e);return F&&r(n,t),t},m.allKeys=function(n){if(!m.isObject(n))return[];var t=[];for(var e in n)t.push(e);return F&&r(n,t),t},m.values=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},m.mapObject=function(n,t,r){t=b(t,r);for(var e,u=m.keys(n),i=u.length,o={},a=0;i>a;a++)e=u[a],o[e]=t(n[e],e,n);return o},m.pairs=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},m.invert=function(n){for(var t={},r=m.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},m.functions=m.methods=function(n){var t=[];for(var r in n)m.isFunction(n[r])&&t.push(r);return t.sort()},m.extend=x(m.allKeys),m.extendOwn=m.assign=x(m.keys),m.findKey=function(n,t,r){t=b(t,r);for(var e,u=m.keys(n),i=0,o=u.length;o>i;i++)if(e=u[i],t(n[e],e,n))return e},m.pick=function(n,t,r){var e,u,i={},o=n;if(null==o)return i;m.isFunction(t)?(u=m.allKeys(o),e=d(t,r)):(u=k(arguments,!1,!1,1),e=function(n,t,r){return t in r},o=Object(o));for(var a=0,c=u.length;c>a;a++){var l=u[a],f=o[l];e(f,l,o)&&(i[l]=f)}return i},m.omit=function(n,t,r){if(m.isFunction(t))t=m.negate(t);else{var e=m.map(k(arguments,!1,!1,1),String);t=function(n,t){return!m.contains(e,t)}}return m.pick(n,t,r)},m.defaults=x(m.allKeys,!0),m.clone=function(n){return m.isObject(n)?m.isArray(n)?n.slice():m.extend({},n):n},m.tap=function(n,t){return t(n),n},m.isMatch=function(n,t){var r=m.keys(t),e=r.length;if(null==n)return!e;for(var u=Object(n),i=0;e>i;i++){var o=r[i];if(t[o]!==u[o]||!(o in u))return!1}return!0};var E=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof m&&(n=n._wrapped),t instanceof m&&(t=t._wrapped);var u=f.call(n);if(u!==f.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof t)return!1;var o=n.constructor,a=t.constructor;if(o!==a&&!(m.isFunction(o)&&o instanceof o&&m.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[],e=e||[];for(var c=r.length;c--;)if(r[c]===n)return e[c]===t;if(r.push(n),e.push(t),i){if(c=n.length,c!==t.length)return!1;for(;c--;)if(!E(n[c],t[c],r,e))return!1}else{var l,s=m.keys(n);if(c=s.length,m.keys(t).length!==c)return!1;for(;c--;)if(l=s[c],!m.has(t,l)||!E(n[l],t[l],r,e))return!1}return r.pop(),e.pop(),!0};m.isEqual=function(n,t){return E(n,t)},m.isEmpty=function(n){return null==n?!0:w(n)&&(m.isArray(n)||m.isString(n)||m.isArguments(n))?0===n.length:0===m.keys(n).length},m.isElement=function(n){return!(!n||1!==n.nodeType)},m.isArray=p||function(n){return"[object Array]"===f.call(n)},m.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},m.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(n){m["is"+n]=function(t){return f.call(t)==="[object "+n+"]"}}),m.isArguments(arguments)||(m.isArguments=function(n){return m.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(m.isFunction=function(n){return"function"==typeof n||!1}),m.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},m.isNaN=function(n){return m.isNumber(n)&&n!==+n},m.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===f.call(n)},m.isNull=function(n){return null===n},m.isUndefined=function(n){return n===void 0},m.has=function(n,t){return null!=n&&s.call(n,t)},m.noConflict=function(){return e._=u,this},m.identity=function(n){return n},m.constant=function(n){return function(){return n}},m.noop=function(){},m.property=function(n){return function(t){return null==t?void 0:t[n]}},m.propertyOf=function(n){return null==n?function(){}:function(t){return n[t]}},m.matcher=m.matches=function(n){return n=m.extendOwn({},n),function(t){return m.isMatch(t,n)}},m.times=function(n,t,r){var e=Array(Math.max(0,n));t=d(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},m.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},m.now=Date.now||function(){return(new Date).getTime()};var M={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},N=m.invert(M),I=function(n){var t=function(t){return n[t]},r="(?:"+m.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};m.escape=I(M),m.unescape=I(N),m.result=function(n,t,r){var e=null==n?void 0:n[t];return e===void 0&&(e=r),m.isFunction(e)?e.call(n):e};var B=0;m.uniqueId=function(n){var t=++B+"";return n?n+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var T=/(.)^/,R={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},q=/\\|'|\r|\n|\u2028|\u2029/g,K=function(n){return"\\"+R[n]};m.template=function(n,t,r){!t&&r&&(t=r),t=m.defaults({},t,m.templateSettings);var e=RegExp([(t.escape||T).source,(t.interpolate||T).source,(t.evaluate||T).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,o,a){return i+=n.slice(u,a).replace(q,K),u=a+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(a){throw a.source=i,a}var c=function(n){return o.call(this,n,m)},l=t.variable||"obj";return c.source="function("+l+"){\n"+i+"}",c},m.chain=function(n){var t=m(n);return t._chain=!0,t};var z=function(n,t){return n._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(t){var r=m[t]=n[t];m.prototype[t]=function(){var n=[this._wrapped];return c.apply(n,arguments),z(this,r.apply(m,n))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=i[n];m.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],z(this,r)}}),m.each(["concat","join","slice"],function(n){var t=i[n];m.prototype[n]=function(){return z(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return m})}).call(this); 6 | //# sourceMappingURL=underscore-min.map -------------------------------------------------------------------------------- /static/vendor/validate/bootstrap.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * FormValidation (http://formvalidation.io) 3 | * The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks 4 | * 5 | * @version v0.7.0-dev, built on 2015-06-04 4:32:32 PM 6 | * @author https://twitter.com/formvalidation 7 | * @copyright (c) 2013 - 2015 Nguyen Huu Phuoc 8 | * @license http://formvalidation.io/license/ 9 | */ 10 | !function(a){FormValidation.Framework.Bootstrap=function(b,c,d){c=a.extend(!0,{button:{selector:'[type="submit"]:not([formnovalidate])',disabled:"disabled"},err:{clazz:"help-block",parent:"^(.*)col-(xs|sm|md|lg)-(offset-){0,1}[0-9]+(.*)$"},icon:{valid:null,invalid:null,validating:null,feedback:"form-control-feedback"},row:{selector:".form-group",valid:"has-success",invalid:"has-error",feedback:"has-feedback"}},c),FormValidation.Base.apply(this,[b,c,d])},FormValidation.Framework.Bootstrap.prototype=a.extend({},FormValidation.Base.prototype,{_fixIcon:function(a,b){var c=this._namespace,d=a.attr("type"),e=a.attr("data-"+c+"-field"),f=this.options.fields[e].row||this.options.row.selector,g=a.closest(f);if("checkbox"===d||"radio"===d){var h=a.parent();h.hasClass(d)?b.insertAfter(h):h.parent().hasClass(d)&&b.insertAfter(h.parent())}0===g.find("label").length&&b.addClass("fv-icon-no-label"),0!==g.find(".input-group").length&&b.addClass("fv-bootstrap-icon-input-group").insertAfter(g.find(".input-group").eq(0))},_createTooltip:function(a,b,c){var d=this._namespace,e=a.data(d+".icon");if(e)switch(c){case"popover":e.css({cursor:"pointer","pointer-events":"auto"}).popover("destroy").popover({container:"body",content:b,html:!0,placement:"auto top",trigger:"hover click"});break;case"tooltip":default:e.css({cursor:"pointer","pointer-events":"auto"}).tooltip("destroy").tooltip({container:"body",html:!0,placement:"auto top",title:b})}},_destroyTooltip:function(a,b){var c=this._namespace,d=a.data(c+".icon");if(d)switch(b){case"popover":d.css({cursor:"","pointer-events":"none"}).popover("destroy");break;case"tooltip":default:d.css({cursor:"","pointer-events":"none"}).tooltip("destroy")}},_hideTooltip:function(a,b){var c=this._namespace,d=a.data(c+".icon");if(d)switch(b){case"popover":d.popover("hide");break;case"tooltip":default:d.tooltip("hide")}},_showTooltip:function(a,b){var c=this._namespace,d=a.data(c+".icon");if(d)switch(b){case"popover":d.popover("show");break;case"tooltip":default:d.tooltip("show")}}}),a.fn.bootstrapValidator=function(b){var c=arguments;return this.each(function(){var d=a(this),e=d.data("formValidation")||d.data("bootstrapValidator"),f="object"==typeof b&&b;e||(e=new FormValidation.Framework.Bootstrap(this,a.extend({},{events:{formInit:"init.form.bv",formPreValidate:"prevalidate.form.bv",formError:"error.form.bv",formSuccess:"success.form.bv",fieldAdded:"added.field.bv",fieldRemoved:"removed.field.bv",fieldInit:"init.field.bv",fieldError:"error.field.bv",fieldSuccess:"success.field.bv",fieldStatus:"status.field.bv",localeChanged:"changed.locale.bv",validatorError:"error.validator.bv",validatorSuccess:"success.validator.bv"}},f),"bv"),d.addClass("fv-form-bootstrap").data("formValidation",e).data("bootstrapValidator",e)),"string"==typeof b&&e[b].apply(e,Array.prototype.slice.call(c,1))})},a.fn.bootstrapValidator.Constructor=FormValidation.Framework.Bootstrap}(jQuery); -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | 3 | {% block body %} 4 | {{ super() }} 5 | 首页 6 | {% endblock %} -------------------------------------------------------------------------------- /templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {{data.title}} 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | {{data.brand_name}} 106 | 107 | 108 | 109 | 首页 110 | 118 | 119 | 120 | 121 | {{username}} 122 | 123 | 124 | 退出 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | {% for menu in data.menu %} 139 | {% if menu.sub %} 140 | 141 | 142 | {{menu.title}} 143 | 144 | {% for s in menu.sub%} 145 | 146 | {{s.title}} 147 | 148 | 149 | {% endfor %} 150 | 151 | 152 | 153 | {% else %} 154 | 155 | {{menu.title}} 156 | 157 | 158 | {% endif %} 159 | 160 | {% endfor %} 161 | 162 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | {% block body %} 192 | {% endblock %} 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | {% block js %} 221 | {% endblock %} 222 | 223 | 224 | 225 | 226 | -------------------------------------------------------------------------------- /templates/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 登录 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 欢迎使用 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 登录 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /templates/page/caninet.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends "layout.html" %} 3 | {% block body %} 4 | {% endblock %} 5 | 6 | {% block js %} 7 | 14 | {% endblock %} 15 | 16 | -------------------------------------------------------------------------------- /templates/page/host.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends "layout.html" %} 3 | {% block body %} 4 | {% endblock %} 5 | 6 | {% block js %} 7 | 14 | {% endblock %} 15 | 16 | -------------------------------------------------------------------------------- /templates/page/product.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends "layout.html" %} 3 | {% block body %} 4 | {% endblock %} 5 | 6 | {% block js %} 7 | 14 | {% endblock %} 15 | 16 | -------------------------------------------------------------------------------- /templates/page/raidtype.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends "layout.html" %} 3 | {% block body %} 4 | {% endblock %} 5 | 6 | {% block js %} 7 | 14 | {% endblock %} 15 | 16 | -------------------------------------------------------------------------------- /templates/page/user.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends "layout.html" %} 3 | {% block body %} 4 | {% endblock %} 5 | 6 | {% block js %} 7 | 14 | {% endblock %} 15 | 16 | -------------------------------------------------------------------------------- /woniu-build.py: -------------------------------------------------------------------------------- 1 | 2 | # coding=utf-8 3 | import os,sys 4 | reload(sys) 5 | sys.setdefaultencoding("utf-8") 6 | import json 7 | from config import db_config,page_config 8 | import sys 9 | from flask_web import db 10 | 11 | head = ''' 12 | {% extends "layout.html" %} 13 | {% block body %} 14 | {% endblock %} 15 | 16 | {% block js %} 17 | 26 | {% endblock %} 27 | 28 | ''' 29 | 30 | def gen_file(config): 31 | with open('templates/page/'+config['name']+'.html','w') as f: 32 | f.write(head) 33 | f.write(' '+json.dumps(config)) 34 | f.write(foot) 35 | print config['name']+' build success' 36 | 37 | def gen_config(config): 38 | for c in config: 39 | gen_file(c) 40 | 41 | def del_table(name): 42 | sql = 'drop table if exists '+name 43 | print sql 44 | db.execute(sql) 45 | def create_table(name,data): 46 | tmp = [] 47 | for v in data: 48 | tmp.append('%s varchar(200)'%v['name']) 49 | sql = 'create table %s (id int not null auto_increment primary key,%s)' % (name,','.join(tmp)) 50 | print sql 51 | db.execute(sql) 52 | print 'table %s is created' % (name) 53 | def init_database(config): 54 | 55 | for c in config: 56 | name = c['name'] 57 | del_table(name) 58 | create_table(name,c['data']) 59 | 60 | if __name__ == '__main__': 61 | config = [] 62 | for page in page_config['menu']: 63 | if 'sub' in page: 64 | for s in page['sub']: 65 | config.append(s) 66 | else: 67 | config.append(page) 68 | print config 69 | if len(sys.argv)>1 and sys.argv[1]=='init': 70 | init_database(config) 71 | db.execute('insert into user (username,password) values ("51reboot","51reboot")') 72 | gen_config(config) --------------------------------------------------------------------------------
Text
Cancel OK
' + 335 | '添加' + this.title + '