├── README.md
├── manager.py
├── ops
├── __init__.py
├── assets
│ ├── __init__.py
│ └── api.py
├── case
│ ├── __init__.py
│ └── api.py
├── common
│ └── __init__.py
├── config.py
├── database
│ ├── __init__.py
│ ├── custom_type.py
│ └── model.py
├── static
│ ├── avatars
│ │ ├── avatar.png
│ │ ├── avatar1.png
│ │ ├── avatar2.png
│ │ ├── avatar3.png
│ │ ├── avatar4.png
│ │ ├── avatar5.png
│ │ ├── profile-pic.jpg
│ │ └── user.jpg
│ ├── css
│ │ ├── ace-ie.min.css
│ │ ├── ace-rtl.min.css
│ │ ├── ace-skins.min.css
│ │ ├── ace.min.css
│ │ ├── bootstrap-editable.css
│ │ ├── bootstrap-timepicker.css
│ │ ├── bootstrap.min.css
│ │ ├── chosen-sprite.png
│ │ ├── chosen-sprite@2x.png
│ │ ├── chosen.css
│ │ ├── colorbox.css
│ │ ├── colorpicker.css
│ │ ├── dataTables.bootstrap.css
│ │ ├── datepicker.css
│ │ ├── daterangepicker.css
│ │ ├── dropzone.css
│ │ ├── font-awesome-ie7.min.css
│ │ ├── font-awesome.min.css
│ │ ├── fullcalendar.css
│ │ ├── googleapis.css
│ │ ├── googleapis_bak.css
│ │ ├── images
│ │ │ ├── border.png
│ │ │ ├── controls.png
│ │ │ ├── loading.gif
│ │ │ ├── loading_background.png
│ │ │ └── overlay.png
│ │ ├── img
│ │ │ ├── Thumbs.db
│ │ │ ├── alpha.png
│ │ │ ├── hue.png
│ │ │ └── saturation.png
│ │ ├── jquery-ui-1.10.3.custom.min.css
│ │ ├── jquery-ui-1.10.3.full.min.css
│ │ ├── jquery.gritter.css
│ │ ├── prettify.css
│ │ ├── select2-spinner.gif
│ │ ├── select2.css
│ │ ├── select2.png
│ │ ├── select2x2.png
│ │ └── ui.jqgrid.css
│ ├── font
│ │ ├── fontawesome-webfont-iefix.eot
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.svg
│ │ ├── fontawesome-webfont.ttf
│ │ └── fontawesome-webfont.woff
│ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ └── glyphicons-halflings-regular.woff
│ ├── images
│ │ ├── gallery
│ │ │ ├── thumb-1.jpg
│ │ │ ├── thumb-2.jpg
│ │ │ ├── thumb-3.jpg
│ │ │ ├── thumb-4.jpg
│ │ │ ├── thumb-5.jpg
│ │ │ └── thumb-6.jpg
│ │ ├── spritemap.png
│ │ └── spritemap@2x.png
│ ├── img
│ │ ├── clear.png
│ │ └── loading.gif
│ └── js
│ │ ├── ace-elements.min.js
│ │ ├── ace-extra.min.js
│ │ ├── ace.min.js
│ │ ├── additional-methods.min.js
│ │ ├── bootbox.min.js
│ │ ├── bootstrap-colorpicker.min.js
│ │ ├── bootstrap-tag.min.js
│ │ ├── bootstrap-wysiwyg.min.js
│ │ ├── bootstrap.min.js
│ │ ├── chosen.jquery.min.js
│ │ ├── chosen.jquery.min.js.bak
│ │ ├── customize.js
│ │ ├── dataTables.bootstrap.js
│ │ ├── date-time
│ │ ├── bootstrap-datepicker.min.js
│ │ ├── bootstrap-timepicker.min.js
│ │ ├── daterangepicker.min.js
│ │ └── moment.min.js
│ │ ├── dropzone.min.js
│ │ ├── excanvas.min.js
│ │ ├── flot
│ │ ├── jquery.flot.min.js
│ │ ├── jquery.flot.pie.min.js
│ │ └── jquery.flot.resize.min.js
│ │ ├── fuelux
│ │ ├── data
│ │ │ └── fuelux.tree-sampledata.js
│ │ ├── fuelux.spinner.min.js
│ │ ├── fuelux.tree.min.js
│ │ └── fuelux.wizard.min.js
│ │ ├── fullcalendar.min.js
│ │ ├── html5shiv.js
│ │ ├── jqGrid
│ │ ├── i18n
│ │ │ ├── grid.locale-en.js
│ │ │ └── grid.locale-en.js.bak
│ │ └── jquery.jqGrid.min.js
│ │ ├── jquery-1.10.2.min.js
│ │ ├── jquery-2.0.3.min.js
│ │ ├── jquery-ui-1.10.3.custom.min.js
│ │ ├── jquery-ui-1.10.3.full.min.js
│ │ ├── jquery.autosize.min.js
│ │ ├── jquery.colorbox-min.js
│ │ ├── jquery.dataTables.bootstrap.js
│ │ ├── jquery.dataTables.js
│ │ ├── jquery.dataTables.min.js
│ │ ├── jquery.easy-pie-chart.min.js
│ │ ├── jquery.gritter.min.js
│ │ ├── jquery.hotkeys.min.js
│ │ ├── jquery.inputlimiter.1.3.1.min.js
│ │ ├── jquery.knob.min.js
│ │ ├── jquery.maskedinput.min.js
│ │ ├── jquery.min.js
│ │ ├── jquery.mobile.custom.min.js
│ │ ├── jquery.nestable.min.js
│ │ ├── jquery.slimscroll.min.js
│ │ ├── jquery.sparkline.min.js
│ │ ├── jquery.ui.touch-punch.min.js
│ │ ├── jquery.validate.min.js
│ │ ├── markdown
│ │ ├── bootstrap-markdown.min.js
│ │ └── markdown.min.js
│ │ ├── ops
│ │ ├── caseCheck.js
│ │ ├── caseExecute.js
│ │ ├── caseHistory.js
│ │ ├── caseMyCreate.js
│ │ ├── caseType.js
│ │ ├── department.js
│ │ ├── project.js
│ │ └── user.js
│ │ ├── respond.min.js
│ │ ├── select2.min.js
│ │ ├── spin.min.js
│ │ ├── typeahead-bs2.min.js
│ │ └── x-editable
│ │ ├── ace-editable.min.js
│ │ └── bootstrap-editable.min.js
├── templates
│ ├── assets
│ │ └── project.html
│ ├── case
│ │ ├── caseCheck.html
│ │ ├── caseCreate.html
│ │ ├── caseExecute.html
│ │ ├── caseHistory.html
│ │ ├── caseMyCreate.html
│ │ └── caseType.html
│ ├── index.html
│ └── users
│ │ ├── department.html
│ │ ├── login.html
│ │ └── user.html
└── users
│ ├── __init__.py
│ ├── api.py
│ └── login.py
├── requirements.txt
└── run.py
/README.md:
--------------------------------------------------------------------------------
1 | # iamdc
2 | 运维自动化平台(iamdc)
3 | http://www.huangdc.com
4 |
5 |
6 | 一、环境
7 | 系统: CentOS 6
8 | python 版本: Python 2.7.10
9 |
10 | 二、Python 虚拟环境
11 |
12 | 1、安装
13 | pip install virtualenv
14 |
15 | 2、为一个工程创建一个虚拟环境
16 | mkdir /opt/project ;
17 |
18 | cd /opt/project && virtualenv venv
19 |
20 | 3、激活虚拟环境
21 | source venv/bin/activate
22 |
23 | 4、git clone 下载iamdc
24 | git clone https://github.com/BackPotMan/iamdc.git
25 |
26 | 5、安装所需环境
27 | cd iamdc && pip install -r requirements.txt
28 |
29 | 6、初始数据库模型
30 | migrate使用方法:
31 | 第一次使用 python manager.py db init
32 |
33 | 后面每次有表修改执行下面两句进行修改
34 | python manager.py db migrate ;
35 |
36 | python manager.py db upgrade
37 |
38 | 7、运行启动
39 | python run.py
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/manager.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | from flask_migrate import Migrate,MigrateCommand
4 | from flask_script import Manager,Shell
5 | from ops.database.model import db
6 | from run import app
7 |
8 | """
9 | migrate使用方法:
10 | 第一次使用 python manager.py db init
11 |
12 | 后面每次有表修改执行下面两句进行修改
13 | python manager.py db migrate
14 | python manager.py db upgrade
15 |
16 | """
17 |
18 | manager = Manager(app)
19 | migrate = Migrate(app, db) #注册migrate到flask
20 | manager.add_command('db', MigrateCommand) #在终端环境下添加一个db命令
21 |
22 |
23 | if __name__ == '__main__':
24 | manager.run()
25 |
--------------------------------------------------------------------------------
/ops/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from flask import Flask,request,render_template,url_for,redirect,abort,session
3 | from jinja2 import TemplateNotFound
4 | from ops.database.model import db,user
5 | from ops.users.login import userLogin
6 | import sys
7 | reload(sys)
8 | sys.setdefaultencoding('utf-8')
9 |
10 | app = Flask(__name__)
11 |
12 | # 加载配置文件
13 | app.config.from_object('ops.config.DevConfig')
14 |
15 | # #初始化models
16 | db.init_app(app)
17 | db.app = app
18 | db.create_all()
19 |
20 | # 导入蓝图
21 | modules = [
22 | ('ops.users.api', 'userBlue', '/users'), # 用户管理模块
23 | ('ops.assets.api', 'assetsBlue', '/assets'), # 资源管理模块
24 | # ('ops.deploy.api', 'deployBlue', '/deploy'), # 发布系统模块
25 | ('ops.case.api', 'caseBlue', '/case'), # 工单系统模块
26 | # ('ops.setting.api', 'settingBlue', '/setting'), # 后台设置模块
27 | # ('ops.monitor.api', 'monitorBlue', '/monitor'), # 监控系统模块
28 | ]
29 | for md, blp, prefix in modules:
30 | app.register_blueprint(getattr(__import__(md, fromlist=[blp]), blp), url_prefix=prefix)
31 |
32 |
33 | @app.route('/')
34 | def index():
35 |
36 | loginData = userLogin()
37 | if loginData['status'] == 1 :
38 | return redirect(loginData['uri'])
39 |
40 | try:
41 | return render_template('index.html',userInfo=loginData['user'])
42 | except TemplateNotFound:
43 | abort(404)
44 |
45 |
--------------------------------------------------------------------------------
/ops/assets/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/assets/__init__.py
--------------------------------------------------------------------------------
/ops/assets/api.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 |
3 | import json
4 | from jinja2 import TemplateNotFound
5 | from flask import Blueprint, Response,request,render_template,url_for,redirect,abort,session,g
6 | from ops.database.model import db,department,user,project
7 | from sqlalchemy import or_,and_,desc
8 | from ops.users.login import userLogin
9 |
10 | ## 用户蓝图
11 | assetsBlue = Blueprint('assets', __name__ , template_folder='../templates/assets',static_url_path='',static_folder='')
12 |
13 | @assetsBlue.route('/project/', methods=['GET', 'POST'])
14 | def projectList():
15 | """
16 | 项目管理管理
17 | """
18 | # print request.args.items().__str__()
19 | # print request.form.items()
20 |
21 | loginData = userLogin()
22 | if loginData['status'] == 1 :
23 | return redirect(loginData['uri'])
24 |
25 | ## 请求返回结果数据
26 | returnData = {'status': 0, 'message': '','data':[]}
27 |
28 | ## 添加项目
29 | if request.form.has_key('oper') and request.form['oper'] == "add":
30 | name = str(request.form['name'])
31 | enname = str(request.form['enname'])
32 | leader = int(request.form['leader'])
33 |
34 | ## check
35 | checkData = project.query.filter(or_(project.name == name,project.enname == enname)).first()
36 | if checkData:
37 | returnData['status'] = 1
38 | returnData['message'] = '该项目名称已经存在'
39 | return Response(json.dumps(returnData), mimetype="application/json")
40 |
41 | ## add
42 | try:
43 | addData = project(name=name, enname=enname,user_id=leader)
44 | db.session.add(addData)
45 | db.session.commit()
46 | except:
47 | returnData['status'] = 1
48 | returnData['message'] = '新增失败'
49 | return Response(json.dumps(returnData), mimetype="application/json")
50 |
51 | ## 删除项目
52 | elif request.form.has_key('oper') and request.form['oper'] == "del":
53 | ids = str(request.form['id']).split(',')
54 |
55 | for id in ids:
56 | ## check
57 | checkData = project.query.filter(project.id == id).first()
58 | if not checkData:
59 | returnData['status'] = 1
60 | returnData['message'] = returnData['message']+'id:'+str(id)+' 该项目不存在;'
61 |
62 | ## delete
63 | try:
64 | db.session.delete(checkData)
65 | db.session.commit()
66 | except:
67 | returnData['status'] = 1
68 | returnData['message'] = returnData['message'] + 'id:' + str(id) + ' 该项目删除失败;'
69 | return Response(json.dumps(returnData), mimetype="application/json")
70 |
71 | ## 编辑项目
72 | elif request.form.has_key('oper') and request.form['oper'] == "edit":
73 | id = int(request.form['id'])
74 | name = str(request.form['name'])
75 | enname = str(request.form['enname'])
76 | leader = int(request.form['leader'])
77 |
78 | ## check
79 | checkData = project.query.filter(project.id != id).filter(or_(project.name == name,project.enname == enname)).first()
80 | if checkData:
81 | returnData['status'] = 1
82 | returnData['message'] = '该项目名称已经存在'
83 | return Response(json.dumps(returnData), mimetype="application/json")
84 |
85 | ## edit
86 | try:
87 | editData = project.query.filter(project.id == id).first()
88 | editData.name = name
89 | editData.enname = enname
90 | editData.leader = leader
91 |
92 | db.session.add(editData)
93 | db.session.commit()
94 | except:
95 | returnData['status'] = 1
96 | returnData['message'] = '编辑失败'
97 | return Response(json.dumps(returnData), mimetype="application/json")
98 |
99 | ## 获取项目选择框下拉列表
100 | elif request.form.has_key('oper') and request.form['oper'] == "getProjects":
101 | allData = project.query.filter().all()
102 | if allData:
103 | projectStr = "" # 组合成适用于编辑框的select格式
104 | for p in allData:
105 | if projectStr:
106 | projectStr = projectStr + ";" + str(p.id) + ":" + str(p.name)
107 | else:
108 | projectStr = str(p.id) + ":" + str(p.name)
109 | returnData['data'].append({'id': p.id, 'name': p.name, 'enname': p.enname})
110 | returnData['message'] = projectStr
111 |
112 | else:
113 | returnData['status'] = 1
114 | returnData['message'] = "error"
115 | return Response(json.dumps(returnData), mimetype="application/json")
116 |
117 | ## request.method == "GET":
118 | elif request.args.has_key('type') and request.args.get('type') == "load" or \
119 | request.args.has_key('type') and request.args.get('type') == "search":
120 |
121 | load_search = request.args.get("_search")
122 | load_nd = int(request.args.get("nd"))
123 | load_rows = int(request.args.get("rows"))
124 | load_page = int(request.args.get("page"))
125 | load_sidx = str(request.args.get("sidx"))
126 | load_sord = str(request.args.get("sord"))
127 | len_min = load_page * load_rows - load_rows
128 | len_max = load_page * load_rows
129 | loadData = {"total": "0", "page": str(load_page), "records": "0", "data": []}
130 |
131 | allData = project.query.filter()
132 | if request.args.get('type') == "search":
133 | _search_cnname = request.args.get("search_cnname")
134 | _search_enname = request.args.get("search_enname")
135 | if _search_cnname:
136 | allData = allData.filter(project.name.ilike('%%%s%%' % _search_cnname))
137 | if _search_enname:
138 | allData = allData.filter(project.enname.ilike('%%%s%%' % _search_enname))
139 |
140 | ## sord
141 | if not load_sidx:
142 | load_sidx = "id"
143 | if load_sord == "desc":
144 | allData = allData.order_by(desc(load_sidx)).all()
145 | else:
146 | allData = allData.order_by(load_sidx).all()
147 |
148 | for record in allData[len_min:len_max]:
149 | _mtime = record.mtime
150 | if not _mtime: _mtime = record.ctime
151 | tmpData = {'id': record.id,
152 | 'name': record.name,
153 | 'enname': record.enname,
154 | 'leader': record.user.name,
155 | 'ctime': str(record.ctime),
156 | 'mtime': str(_mtime)
157 | }
158 | loadData['data'].append(tmpData)
159 |
160 | loadData['records'] = str(len(allData)) ## rows
161 | loadData['total'] = str(len(allData) / int(load_rows) + 1) ## pages
162 |
163 | return Response(json.dumps(loadData), mimetype="application/json")
164 |
165 | else:
166 | pass
167 |
168 | try:
169 | return render_template('project.html',userInfo=loginData['user'])
170 | except TemplateNotFound:
171 | abort(404)
172 |
173 |
174 |
175 |
176 |
--------------------------------------------------------------------------------
/ops/case/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/case/__init__.py
--------------------------------------------------------------------------------
/ops/common/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/common/__init__.py
--------------------------------------------------------------------------------
/ops/config.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import os
3 |
4 | class Config(object):
5 |
6 | DEBUG = False
7 | # 是否是开发模式
8 | DEV = False
9 |
10 | SECRET_KEY = '\x9bl\xbc\xc6\x01\xaf^\r\x13\xb2\xb2T\xce\x87d\xd1\xf5\x07\xb6r\x8c\r\xe8\x93'
11 |
12 | #数据库iamdcdb
13 | SQLALCHEMY_DATABASE_URI = 'mysql://deployer:A637f37955dbfcE1@192.168.1.18:3306/iamdcdb?charset=utf8'
14 |
15 | # 日志文件
16 | LOG_FILE = "ops.log"
17 |
18 | class DevConfig(Config):
19 |
20 | DEBUG = True
21 | # 开发模式
22 | DEV = True
23 |
24 | # 数据库iamdcdb
25 | SQLALCHEMY_DATABASE_URI = 'mysql://opser:123456@localhost:3306/iamdcdb?charset=utf8'
26 |
--------------------------------------------------------------------------------
/ops/database/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/database/__init__.py
--------------------------------------------------------------------------------
/ops/database/custom_type.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import sqlalchemy.types as types
4 |
5 | class ChoiceType(types.TypeDecorator):
6 |
7 | impl = types.String(100)
8 |
9 | def __init__(self, choices=[], **kw):
10 | self.choices = dict(choices)
11 | super(ChoiceType, self).__init__(**kw)
12 |
13 | def process_bind_param(self, value, dialect):
14 | result = [k for k, v in self.choices.iteritems() if k == value]
15 | if result:
16 | return result[0]
17 |
18 | def process_result_value(self, value, dialect):
19 | _dict = self.choices
20 |
21 | class Choice(object):
22 | def __init__(self):
23 | if not value == None:
24 | self.label = _dict[value]
25 | self.value = value
26 | else:
27 | self.label = None
28 | self.value = None
29 | return Choice()
30 |
31 |
32 | class ChoiceTypeInteger(types.TypeDecorator):
33 |
34 | impl = types.Integer
35 |
36 | def __init__(self, choices=[], **kw):
37 | self.choices = dict(choices)
38 | super(ChoiceTypeInteger, self).__init__(**kw)
39 |
40 | def process_bind_param(self, value, dialect):
41 | result = [k for k, v in self.choices.iteritems() if k == value]
42 | if result:
43 | return result[0]
44 |
45 | def process_result_value(self, value, dialect):
46 | _dict = self.choices
47 |
48 | class Choice(object):
49 | def __init__(self):
50 | if not value == None:
51 | self.label = _dict[value]
52 | self.value = value
53 | else:
54 | self.label = None
55 | self.value = None
56 | return Choice()
--------------------------------------------------------------------------------
/ops/static/avatars/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/avatars/avatar.png
--------------------------------------------------------------------------------
/ops/static/avatars/avatar1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/avatars/avatar1.png
--------------------------------------------------------------------------------
/ops/static/avatars/avatar2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/avatars/avatar2.png
--------------------------------------------------------------------------------
/ops/static/avatars/avatar3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/avatars/avatar3.png
--------------------------------------------------------------------------------
/ops/static/avatars/avatar4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/avatars/avatar4.png
--------------------------------------------------------------------------------
/ops/static/avatars/avatar5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/avatars/avatar5.png
--------------------------------------------------------------------------------
/ops/static/avatars/profile-pic.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/avatars/profile-pic.jpg
--------------------------------------------------------------------------------
/ops/static/avatars/user.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/avatars/user.jpg
--------------------------------------------------------------------------------
/ops/static/css/ace-ie.min.css:
--------------------------------------------------------------------------------
1 | .sidebar {
2 | *left: 0
3 | }
4 |
5 | .sidebar:before {
6 | display: none
7 | }
8 |
9 | .ace-nav > li.white-opaque {
10 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#CCFFFFFF', endColorstr='#CCFFFFFF', GradientType=0)
11 | }
12 |
13 | .ace-nav > li.dark-opaque {
14 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33000000', endColorstr='#33000000', GradientType=0)
15 | }
16 |
17 | .infobox > .infobox-icon > [class*="icon-"]:before {
18 | color: #FFF
19 | }
20 |
21 | .infobox-dark > .badge {
22 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33FFFFFF', endColorstr='#33FFFFFF', GradientType=0) !important
23 | }
24 |
25 | .widget-box-overlay {
26 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#55000000', endColorstr='#55000000', GradientType=0) !important
27 | }
28 |
29 | .widget-toolbar-light {
30 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#D8FFFFFF', endColorstr='#D8FFFFFF', GradientType=0) !important
31 | }
32 |
33 | input[type=checkbox].ace, input[type=radio].ace {
34 | position: static;
35 | width: auto;
36 | height: auto;
37 | z-index: auto
38 | }
39 |
40 | input[type=checkbox].ace + .lbl, input[type=radio].ace + .lbl {
41 | min-height: auto;
42 | min-width: auto
43 | }
44 |
45 | input[type=checkbox].ace.ace-switch {
46 | width: auto
47 | }
48 |
49 | input[type=checkbox].ace.ace-switch + .lbl {
50 | margin: 0;
51 | min-height: auto
52 | }
53 |
54 | input[type=checkbox].ace.ace-switch-7 {
55 | width: auto
56 | }
57 |
58 | .ace-file-input input[type=file] {
59 | width: 100%;
60 | height: 30px;
61 | position: absolute;
62 | z-index: 1;
63 | filter: alpha(opacity=0);
64 | cursor: pointer
65 | }
66 |
67 | .ace-file-input input[type=file]:hover + .file-label {
68 | border-color: #f59942
69 | }
70 |
71 | .ace-file-multiple input[type=file] {
72 | height: 100%
73 | }
74 |
75 | .ace-file-input .remove {
76 | z-index: 2
77 | }
78 |
79 | .ace-file-input .file-label.selected .file-name {
80 | width: 50%
81 | }
82 |
83 | .ace-file-multiple .file-label.selected .file-name {
84 | width: auto
85 | }
86 |
87 | .wizard-steps li:first-child:before {
88 | max-width: 100%;
89 | left: 0
90 | }
91 |
92 | .login-layout .widget-box {
93 | display: none;
94 | visibility: visible;
95 | position: static
96 | }
97 |
98 | .login-layout .widget-box.visible {
99 | display: block
100 | }
101 |
102 | .pricing-box-small:hover {
103 | zoom: 1.04;
104 | left: -1px;
105 | top: -3px
106 | }
107 |
108 | .ace-thumbnails > li > a > img {
109 | width: auto !important
110 | }
111 |
112 | .ace-thumbnails > li > :first-child > .text {
113 | display: none
114 | }
115 |
116 | .ace-thumbnails > li:hover > :first-child > .text {
117 | display: block
118 | }
119 |
120 | .ace-thumbnails > li > .tools {
121 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8C000000', endColorstr='#8C000000', GradientType=0) !important
122 | }
123 |
124 | .ace-thumbnails > li > :first-child > .text {
125 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8C000000', endColorstr='#8C000000', GradientType=0) !important
126 | }
127 |
128 | #cboxLoadingGraphic > [class*="icon-"] {
129 | display: inline-block;
130 | background: #FFF url('images/loading.gif') no-repeat center
131 | }
132 |
133 | #cboxLoadingGraphic > [class*="icon-"]:before {
134 | display: none
135 | }
136 |
137 | .widget-box-overlay > [class*="icon-"] {
138 | display: inline-block;
139 | width: 24px;
140 | height: 24px;
141 | margin-left: 46%;
142 | background: transparent url('images/loading.gif') no-repeat center
143 | }
144 |
145 | .widget-box-overlay > [class*="icon-"]:before {
146 | display: none
147 | }
148 |
149 | .btn.btn-app.btn-light {
150 | border: 1px solid #d9d9d9
151 | }
152 |
153 | .btn.btn-app.btn-yellow {
154 | border: 1px solid #fee188
155 | }
156 |
157 | .grid3 {
158 | width: 31%
159 | }
160 |
161 | .grid4 {
162 | width: 23%
163 | }
164 |
165 | .itemdiv.dialogdiv > .body:before {
166 | display: none
167 | }
168 |
169 | .fc-event-hori, .fc-event-vert {
170 | border: none !important
171 | }
172 |
173 | [class*="tab-color-"] .nav-tabs > li > a > [class*="icon-"]:first-child {
174 | color: #666 !important
175 | }
176 |
177 | .dropdown-preview > .dropdown-menu {
178 | *width: 180px
179 | }
180 |
181 | .ui-datepicker, .ui-autocomplete, .ui-menu {
182 | border: 1px solid #CCC
183 | }
184 |
185 | .ui-widget-overlay {
186 | filter: alpha(opacity=100) !important;
187 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#44000000', endColorstr='#44000000', GradientType=0) !important
188 | }
189 |
190 | .message-content {
191 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#CCFFFFFF', endColorstr='#CCFFFFFF', GradientType=0) !important
192 | }
193 |
194 | .gritter-item-wrapper {
195 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EA323232', endColorstr='#EA323232', GradientType=0) !important
196 | }
197 |
198 | .gritter-item-wrapper.gritter-info {
199 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EA315185', endColorstr='#EA315185', GradientType=0) !important
200 | }
201 |
202 | .gritter-item-wrapper.gritter-error {
203 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EA992812', endColorstr='#EA992812', GradientType=0) !important
204 | }
205 |
206 | .gritter-item-wrapper.gritter-success {
207 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EA59834B', endColorstr='#EA59834B', GradientType=0) !important
208 | }
209 |
210 | .gritter-item-wrapper.gritter-warning {
211 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EABE701F', endColorstr='#EABE701F', GradientType=0) !important
212 | }
213 |
214 | .gritter-item-wrapper.gritter-light {
215 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F2F5F5F5', endColorstr='#F2F5F5F5', GradientType=0) !important
216 | }
217 |
218 | .gritter-info.gritter-light {
219 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F2E8F2FF', endColorstr='#F2E8F2FF', GradientType=0) !important
220 | }
221 |
222 | .gritter-error.gritter-light {
223 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F2FFEBEB', endColorstr='#F2FFEBEB', GradientType=0) !important
224 | }
225 |
226 | .gritter-success.gritter-light {
227 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F2EFFAE3', endColorstr='#F2EFFAE3', GradientType=0) !important
228 | }
229 |
230 | .gritter-warning.gritter-light {
231 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F2FCF8E3', endColorstr='#F2FCF8E3', GradientType=0) !important
232 | }
233 |
234 | .widget-header .wysiwyg-toolbar .btn-group > .btn, .widget-body .md-header .btn {
235 | background: transparent none !important;
236 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#40FFFFFF', endColorstr='#40FFFFFF', GradientType=0) !important
237 | }
238 |
239 | .widget-header .wysiwyg-toolbar .btn-group > .btn.active, .widget-body .md-header .btn-inverse {
240 | background: transparent none !important;
241 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#40000000', endColorstr='#40000000', GradientType=0) !important
242 | }
243 |
244 | .widget-body .md-header .btn, .widget-body .md-header .btn-inverse {
245 | display: none
246 | }
247 |
248 | body.skin-3, .skin-3 .sidebar {
249 | background-color: #d6d6d6
250 | }
251 |
252 | .skin-3 .menu-min .nav-list > li.active > a {
253 | background-color: #eef8ff
254 | }
255 |
256 | body.skin-2, .skin-2 .sidebar {
257 | background-color: #505050
258 | }
259 |
260 | .skin-2 .nav-list > li:hover > a > span {
261 | color: #FFF
262 | }
263 |
264 | .skin-2 .nav-list > li:hover > a > [class*="icon-"]:first-child {
265 | color: #FFF
266 | }
267 |
268 | .skin-2 .menu-min .nav-list > li > a:hover > [class*="icon-"]:first-child {
269 | color: #FFF
270 | }
271 |
272 | .rtl .nav-list li.active > a:after {
273 | border-left-color: transparent;
274 | border-right-color: #0b6cbc
275 | }
276 |
277 | .rtl.skin-1 .nav-list li.active > a:after {
278 | border-right-color: #FFF;
279 | border-left-color: transparent
280 | }
281 |
282 | .rtl.skin-1 .menu-min .nav-list li.active:hover > a:after {
283 | border-right-color: #242a2b
284 | }
285 |
286 | .rtl.skin-2 .nav-list li.active > a:after {
287 | border-right-color: #FFF;
288 | border-left-color: transparent
289 | }
290 |
291 | .rtl.skin-2 .menu-min .nav-list li.active:hover > a:after {
292 | border-right-color: #292929;
293 | border-left-color: transparent
294 | }
295 |
296 | .rtl.skin-2 .nav-list li.active.open > .submenu > li.active > a:after {
297 | border-right-color: #FFF;
298 | border-left-color: transparent
299 | }
300 |
301 | .rtl.skin-3 .nav-list li.active > a:after {
302 | border-right-color: #FFF;
303 | border-left-color: transparent
304 | }
305 |
306 | .rtl.skin-3 .nav-list li.active > a:before {
307 | border-right-color: #a4c6dd;
308 | border-left-color: transparent
309 | }
--------------------------------------------------------------------------------
/ops/static/css/bootstrap-timepicker.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Timepicker Component for Twitter Bootstrap
3 | *
4 | * Copyright 2013 Joris de Wit
5 | *
6 | * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 | .bootstrap-timepicker {
12 | position: relative;
13 | }
14 | .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu {
15 | left: auto;
16 | right: 0;
17 | }
18 | .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before {
19 | left: auto;
20 | right: 12px;
21 | }
22 | .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after {
23 | left: auto;
24 | right: 13px;
25 | }
26 | .bootstrap-timepicker .add-on {
27 | cursor: pointer;
28 | }
29 | .bootstrap-timepicker .add-on i {
30 | display: inline-block;
31 | width: 16px;
32 | height: 16px;
33 | }
34 | .bootstrap-timepicker-widget.dropdown-menu {
35 | padding: 2px 3px 2px 2px;
36 | }
37 | .bootstrap-timepicker-widget.dropdown-menu.open {
38 | display: inline-block;
39 | }
40 | .bootstrap-timepicker-widget.dropdown-menu:before {
41 | border-bottom: 7px solid rgba(0, 0, 0, 0.2);
42 | border-left: 7px solid transparent;
43 | border-right: 7px solid transparent;
44 | content: "";
45 | display: inline-block;
46 | left: 9px;
47 | position: absolute;
48 | top: -7px;
49 | }
50 | .bootstrap-timepicker-widget.dropdown-menu:after {
51 | border-bottom: 6px solid #FFFFFF;
52 | border-left: 6px solid transparent;
53 | border-right: 6px solid transparent;
54 | content: "";
55 | display: inline-block;
56 | left: 10px;
57 | position: absolute;
58 | top: -6px;
59 | }
60 | .bootstrap-timepicker-widget a.btn,
61 | .bootstrap-timepicker-widget input {
62 | border-radius: 4px;
63 | }
64 | .bootstrap-timepicker-widget table {
65 | width: 100%;
66 | margin: 0;
67 | }
68 | .bootstrap-timepicker-widget table td {
69 | text-align: center;
70 | height: 30px;
71 | margin: 0;
72 | padding: 2px;
73 | }
74 | .bootstrap-timepicker-widget table td:not(.separator) {
75 | min-width: 30px;
76 | }
77 | .bootstrap-timepicker-widget table td span {
78 | width: 100%;
79 | }
80 | .bootstrap-timepicker-widget table td a {
81 | border: 1px transparent solid;
82 | width: 100%;
83 | display: inline-block;
84 | margin: 0;
85 | padding: 8px 0;
86 | outline: 0;
87 | color: #333;
88 | }
89 | .bootstrap-timepicker-widget table td a:hover {
90 | text-decoration: none;
91 | background-color: #eee;
92 | -webkit-border-radius: 4px;
93 | -moz-border-radius: 4px;
94 | border-radius: 4px;
95 | border-color: #ddd;
96 | }
97 | .bootstrap-timepicker-widget table td a i {
98 | margin-top: 2px;
99 | }
100 | .bootstrap-timepicker-widget table td input {
101 | width: 25px;
102 | margin: 0;
103 | text-align: center;
104 | }
105 | .bootstrap-timepicker-widget .modal-content {
106 | padding: 4px;
107 | }
108 | @media (min-width: 767px) {
109 | .bootstrap-timepicker-widget.modal {
110 | width: 200px;
111 | margin-left: -100px;
112 | }
113 | }
114 | @media (max-width: 767px) {
115 | .bootstrap-timepicker {
116 | width: 100%;
117 | }
118 | .bootstrap-timepicker .dropdown-menu {
119 | width: 100%;
120 | }
121 | }
122 |
--------------------------------------------------------------------------------
/ops/static/css/chosen-sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/chosen-sprite.png
--------------------------------------------------------------------------------
/ops/static/css/chosen-sprite@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/chosen-sprite@2x.png
--------------------------------------------------------------------------------
/ops/static/css/colorbox.css:
--------------------------------------------------------------------------------
1 | /*
2 | Colorbox Core Style:
3 | The following CSS is consistent between example themes and should not be altered.
4 | */
5 | #colorbox, #cboxOverlay, #cboxWrapper {
6 | position: absolute;
7 | top: 0;
8 | left: 0;
9 | z-index: 9999;
10 | overflow: hidden;
11 | }
12 |
13 | #cboxOverlay {
14 | position: fixed;
15 | width: 100%;
16 | height: 100%;
17 | }
18 |
19 | #cboxMiddleLeft, #cboxBottomLeft {
20 | clear: left;
21 | }
22 |
23 | #cboxContent {
24 | position: relative;
25 | }
26 |
27 | #cboxLoadedContent {
28 | overflow: auto;
29 | -webkit-overflow-scrolling: touch;
30 | }
31 |
32 | #cboxTitle {
33 | margin: 0;
34 | }
35 |
36 | #cboxLoadingOverlay, #cboxLoadingGraphic {
37 | position: absolute;
38 | top: 0;
39 | left: 0;
40 | width: 100%;
41 | height: 100%;
42 | }
43 |
44 | #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow {
45 | cursor: pointer;
46 | }
47 |
48 | .cboxPhoto {
49 | float: left;
50 | margin: auto;
51 | border: 0;
52 | display: block;
53 | max-width: none;
54 | -ms-interpolation-mode: bicubic;
55 | }
56 |
57 | .cboxIframe {
58 | width: 100%;
59 | height: 100%;
60 | display: block;
61 | border: 0;
62 | }
63 |
64 | #colorbox, #cboxContent, #cboxLoadedContent {
65 | box-sizing: content-box;
66 | -moz-box-sizing: content-box;
67 | -webkit-box-sizing: content-box;
68 | }
69 |
70 | /*
71 | User Style:
72 | Change the following styles to modify the appearance of Colorbox. They are
73 | ordered & tabbed in a way that represents the nesting of the generated HTML.
74 | */
75 | #cboxOverlay {
76 | background: url(images/overlay.png) repeat 0 0;
77 | }
78 |
79 | #colorbox {
80 | outline: 0;
81 | }
82 |
83 | #cboxTopLeft {
84 | width: 21px;
85 | height: 21px;
86 | background: url(images/controls.png) no-repeat -101px 0;
87 | }
88 |
89 | #cboxTopRight {
90 | width: 21px;
91 | height: 21px;
92 | background: url(images/controls.png) no-repeat -130px 0;
93 | }
94 |
95 | #cboxBottomLeft {
96 | width: 21px;
97 | height: 21px;
98 | background: url(images/controls.png) no-repeat -101px -29px;
99 | }
100 |
101 | #cboxBottomRight {
102 | width: 21px;
103 | height: 21px;
104 | background: url(images/controls.png) no-repeat -130px -29px;
105 | }
106 |
107 | #cboxMiddleLeft {
108 | width: 21px;
109 | background: url(images/controls.png) left top repeat-y;
110 | }
111 |
112 | #cboxMiddleRight {
113 | width: 21px;
114 | background: url(images/controls.png) right top repeat-y;
115 | }
116 |
117 | #cboxTopCenter {
118 | height: 21px;
119 | background: url(images/border.png) 0 0 repeat-x;
120 | }
121 |
122 | #cboxBottomCenter {
123 | height: 21px;
124 | background: url(images/border.png) 0 -29px repeat-x;
125 | }
126 |
127 | #cboxContent {
128 | background: #fff;
129 | overflow: hidden;
130 | }
131 |
132 | .cboxIframe {
133 | background: #fff;
134 | }
135 |
136 | #cboxError {
137 | padding: 50px;
138 | border: 1px solid #ccc;
139 | }
140 |
141 | #cboxLoadedContent {
142 | margin-bottom: 28px;
143 | }
144 |
145 | #cboxTitle {
146 | position: absolute;
147 | bottom: 4px;
148 | left: 0;
149 | text-align: center;
150 | width: 100%;
151 | color: #949494;
152 | }
153 |
154 | #cboxCurrent {
155 | position: absolute;
156 | bottom: 4px;
157 | left: 58px;
158 | color: #949494;
159 | }
160 |
161 | #cboxLoadingOverlay {
162 | background: url(images/loading_background.png) no-repeat center center;
163 | }
164 |
165 | #cboxLoadingGraphic {
166 | background: url(images/loading.gif) no-repeat center center;
167 | }
168 |
169 | /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
170 | #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {
171 | border: 0;
172 | padding: 0;
173 | margin: 0;
174 | overflow: visible;
175 | width: auto;
176 | background: none;
177 | }
178 |
179 | /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
180 | #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {
181 | outline: 0;
182 | }
183 |
184 | #cboxSlideshow {
185 | position: absolute;
186 | bottom: 4px;
187 | right: 30px;
188 | color: #0092ef;
189 | }
190 |
191 | #cboxPrevious {
192 | position: absolute;
193 | bottom: 0;
194 | left: 0;
195 | background: url(images/controls.png) no-repeat -75px 0;
196 | width: 25px;
197 | height: 25px;
198 | text-indent: -9999px;
199 | }
200 |
201 | #cboxPrevious:hover {
202 | background-position: -75px -25px;
203 | }
204 |
205 | #cboxNext {
206 | position: absolute;
207 | bottom: 0;
208 | left: 27px;
209 | background: url(images/controls.png) no-repeat -50px 0;
210 | width: 25px;
211 | height: 25px;
212 | text-indent: -9999px;
213 | }
214 |
215 | #cboxNext:hover {
216 | background-position: -50px -25px;
217 | }
218 |
219 | #cboxClose {
220 | position: absolute;
221 | bottom: 0;
222 | right: 0;
223 | background: url(images/controls.png) no-repeat -25px 0;
224 | width: 25px;
225 | height: 25px;
226 | text-indent: -9999px;
227 | }
228 |
229 | #cboxClose:hover {
230 | background-position: -25px -25px;
231 | }
232 |
233 | /*
234 | The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
235 | when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
236 | See: http://jacklmoore.com/notes/ie-transparency-problems/
237 | */
238 | .cboxIE #cboxTopLeft,
239 | .cboxIE #cboxTopCenter,
240 | .cboxIE #cboxTopRight,
241 | .cboxIE #cboxBottomLeft,
242 | .cboxIE #cboxBottomCenter,
243 | .cboxIE #cboxBottomRight,
244 | .cboxIE #cboxMiddleLeft,
245 | .cboxIE #cboxMiddleRight {
246 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF, endColorstr=#00FFFFFF);
247 | }
--------------------------------------------------------------------------------
/ops/static/css/colorpicker.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Colorpicker for Bootstrap
3 | *
4 | * Copyright 2012 Stefan Petre
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | */
9 | .colorpicker-saturation {
10 | width: 100px;
11 | height: 100px;
12 | background-image: url(img/saturation.png);
13 | cursor: crosshair;
14 | float: left;
15 | }
16 | .colorpicker-saturation i {
17 | display: block;
18 | height: 5px;
19 | width: 5px;
20 | border: 1px solid #000;
21 | -webkit-border-radius: 5px;
22 | -moz-border-radius: 5px;
23 | border-radius: 5px;
24 | position: absolute;
25 | top: 0;
26 | left: 0;
27 | margin: -4px 0 0 -4px;
28 | }
29 | .colorpicker-saturation i b {
30 | display: block;
31 | height: 5px;
32 | width: 5px;
33 | border: 1px solid #fff;
34 | -webkit-border-radius: 5px;
35 | -moz-border-radius: 5px;
36 | border-radius: 5px;
37 | }
38 | .colorpicker-hue, .colorpicker-alpha {
39 | width: 15px;
40 | height: 100px;
41 | float: left;
42 | cursor: row-resize;
43 | margin-left: 4px;
44 | margin-bottom: 4px;
45 | }
46 | .colorpicker-hue i, .colorpicker-alpha i {
47 | display: block;
48 | height: 1px;
49 | background: #000;
50 | border-top: 1px solid #fff;
51 | position: absolute;
52 | top: 0;
53 | left: 0;
54 | width: 100%;
55 | margin-top: -1px;
56 | }
57 | .colorpicker-hue {
58 | background-image: url(img/hue.png);
59 | }
60 | .colorpicker-alpha {
61 | background-image: url(img/alpha.png);
62 | display: none;
63 | }
64 | .colorpicker {
65 | *zoom: 1;
66 | top: 0;
67 | left: 0;
68 | padding: 4px;
69 | min-width: 120px;
70 | margin-top: 1px;
71 | -webkit-border-radius: 4px;
72 | -moz-border-radius: 4px;
73 | border-radius: 4px;
74 | }
75 | .colorpicker:before, .colorpicker:after {
76 | display: table;
77 | content: "";
78 | }
79 | .colorpicker:after {
80 | clear: both;
81 | }
82 | .colorpicker:before {
83 | content: '';
84 | display: inline-block;
85 | border-left: 7px solid transparent;
86 | border-right: 7px solid transparent;
87 | border-bottom: 7px solid #ccc;
88 | border-bottom-color: rgba(0, 0, 0, 0.2);
89 | position: absolute;
90 | top: -7px;
91 | left: 6px;
92 | }
93 | .colorpicker:after {
94 | content: '';
95 | display: inline-block;
96 | border-left: 6px solid transparent;
97 | border-right: 6px solid transparent;
98 | border-bottom: 6px solid #ffffff;
99 | position: absolute;
100 | top: -6px;
101 | left: 7px;
102 | }
103 | .colorpicker div {
104 | position: relative;
105 | }
106 | .colorpicker.alpha {
107 | min-width: 140px;
108 | }
109 | .colorpicker.alpha .colorpicker-alpha {
110 | display: block;
111 | }
112 | .colorpicker-color {
113 | height: 10px;
114 | margin-top: 5px;
115 | clear: both;
116 | background-image: url(img/alpha.png);
117 | background-position: 0 100%;
118 | }
119 | .colorpicker-color div {
120 | height: 10px;
121 | }
122 | .input-append.color .add-on i, .input-prepend.color .add-on i {
123 | display: block;
124 | cursor: pointer;
125 | width: 16px;
126 | height: 16px;
127 | }
--------------------------------------------------------------------------------
/ops/static/css/dataTables.bootstrap.css:
--------------------------------------------------------------------------------
1 | div.dataTables_length label {
2 | font-weight: normal;
3 | float: left;
4 | text-align: left;
5 | }
6 |
7 | div.dataTables_length select {
8 | width: 75px;
9 | }
10 |
11 | div.dataTables_filter label {
12 | font-weight: normal;
13 | float: right;
14 | }
15 |
16 | div.dataTables_filter input {
17 | width: 16em;
18 | }
19 |
20 | div.dataTables_info {
21 | padding-top: 8px;
22 | }
23 |
24 | div.dataTables_paginate {
25 | float: right;
26 | margin: 0;
27 | }
28 |
29 | div.dataTables_paginate ul.pagination {
30 | margin: 2px 0;
31 | white-space: nowrap;
32 | }
33 |
34 | table.dataTable,
35 | table.dataTable td,
36 | table.dataTable th {
37 | -webkit-box-sizing: content-box;
38 | -moz-box-sizing: content-box;
39 | box-sizing: content-box;
40 | }
41 |
42 |
43 | table.dataTable {
44 | clear: both;
45 | margin-top: 6px !important;
46 | margin-bottom: 6px !important;
47 | max-width: none !important;
48 | }
49 |
50 | table.dataTable thead .sorting,
51 | table.dataTable thead .sorting_asc,
52 | table.dataTable thead .sorting_desc,
53 | table.dataTable thead .sorting_asc_disabled,
54 | table.dataTable thead .sorting_desc_disabled {
55 | cursor: pointer;
56 | }
57 |
58 | table.dataTable thead .sorting { background: url('../images/sort_both.png') no-repeat center right; }
59 | table.dataTable thead .sorting_asc { background: url('../images/sort_asc.png') no-repeat center right; }
60 | table.dataTable thead .sorting_desc { background: url('../images/sort_desc.png') no-repeat center right; }
61 |
62 | table.dataTable thead .sorting_asc_disabled { background: url('../images/sort_asc_disabled.png') no-repeat center right; }
63 | table.dataTable thead .sorting_desc_disabled { background: url('../images/sort_desc_disabled.png') no-repeat center right; }
64 |
65 | table.dataTable thead > tr > th {
66 | padding-left: 18px;
67 | padding-right: 18px;
68 | }
69 |
70 | table.dataTable th:active {
71 | outline: none;
72 | }
73 |
74 | /* Scrolling */
75 | div.dataTables_scrollHead table {
76 | margin-bottom: 0 !important;
77 | border-bottom-left-radius: 0;
78 | border-bottom-right-radius: 0;
79 | }
80 |
81 | div.dataTables_scrollHead table thead tr:last-child th:first-child,
82 | div.dataTables_scrollHead table thead tr:last-child td:first-child {
83 | border-bottom-left-radius: 0 !important;
84 | border-bottom-right-radius: 0 !important;
85 | }
86 |
87 | div.dataTables_scrollBody table {
88 | border-top: none;
89 | margin-top: 0 !important;
90 | margin-bottom: 0 !important;
91 | }
92 |
93 | div.dataTables_scrollBody tbody tr:first-child th,
94 | div.dataTables_scrollBody tbody tr:first-child td {
95 | border-top: none;
96 | }
97 |
98 | div.dataTables_scrollFoot table {
99 | margin-top: 0 !important;
100 | border-top: none;
101 | }
102 |
103 |
104 |
105 |
106 | /*
107 | * TableTools styles
108 | */
109 | .table tbody tr.active td,
110 | .table tbody tr.active th {
111 | background-color: #08C;
112 | color: white;
113 | }
114 |
115 | .table tbody tr.active:hover td,
116 | .table tbody tr.active:hover th {
117 | background-color: #0075b0 !important;
118 | }
119 |
120 | .table tbody tr.active a {
121 | color: white;
122 | }
123 |
124 | .table-striped tbody tr.active:nth-child(odd) td,
125 | .table-striped tbody tr.active:nth-child(odd) th {
126 | background-color: #017ebc;
127 | }
128 |
129 | table.DTTT_selectable tbody tr {
130 | cursor: pointer;
131 | }
132 |
133 | div.DTTT .btn {
134 | color: #333 !important;
135 | font-size: 12px;
136 | }
137 |
138 | div.DTTT .btn:hover {
139 | text-decoration: none !important;
140 | }
141 |
142 | ul.DTTT_dropdown.dropdown-menu {
143 | z-index: 2003;
144 | }
145 |
146 | ul.DTTT_dropdown.dropdown-menu a {
147 | color: #333 !important; /* needed only when demo_page.css is included */
148 | }
149 |
150 | ul.DTTT_dropdown.dropdown-menu li {
151 | position: relative;
152 | }
153 |
154 | ul.DTTT_dropdown.dropdown-menu li:hover a {
155 | background-color: #0088cc;
156 | color: white !important;
157 | }
158 |
159 | div.DTTT_collection_background {
160 | z-index: 2002;
161 | }
162 |
163 | /* TableTools information display */
164 | div.DTTT_print_info.modal {
165 | height: 150px;
166 | margin-top: -75px;
167 | text-align: center;
168 | }
169 |
170 | div.DTTT_print_info h6 {
171 | font-weight: normal;
172 | font-size: 28px;
173 | line-height: 28px;
174 | margin: 1em;
175 | }
176 |
177 | div.DTTT_print_info p {
178 | font-size: 14px;
179 | line-height: 20px;
180 | }
181 |
182 |
183 |
184 | /*
185 | * FixedColumns styles
186 | */
187 | div.DTFC_LeftHeadWrapper table,
188 | div.DTFC_LeftFootWrapper table,
189 | div.DTFC_RightHeadWrapper table,
190 | div.DTFC_RightFootWrapper table,
191 | table.DTFC_Cloned tr.even {
192 | background-color: white;
193 | margin-bottom: 0;
194 | }
195 |
196 | div.DTFC_RightHeadWrapper table ,
197 | div.DTFC_LeftHeadWrapper table {
198 | margin-bottom: 0 !important;
199 | border-top-right-radius: 0 !important;
200 | border-bottom-left-radius: 0 !important;
201 | border-bottom-right-radius: 0 !important;
202 | }
203 |
204 | div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child,
205 | div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,
206 | div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,
207 | div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child {
208 | border-bottom-left-radius: 0 !important;
209 | border-bottom-right-radius: 0 !important;
210 | }
211 |
212 | div.DTFC_RightBodyWrapper table,
213 | div.DTFC_LeftBodyWrapper table {
214 | border-top: none;
215 | margin-bottom: 0 !important;
216 | }
217 |
218 | div.DTFC_RightBodyWrapper tbody tr:first-child th,
219 | div.DTFC_RightBodyWrapper tbody tr:first-child td,
220 | div.DTFC_LeftBodyWrapper tbody tr:first-child th,
221 | div.DTFC_LeftBodyWrapper tbody tr:first-child td {
222 | border-top: none;
223 | }
224 |
225 | div.DTFC_RightFootWrapper table,
226 | div.DTFC_LeftFootWrapper table {
227 | border-top: none;
228 | }
229 |
--------------------------------------------------------------------------------
/ops/static/css/daterangepicker.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Stylesheet for the Date Range Picker, for use with Bootstrap 3.x
3 | *
4 | * Copyright 2013 Dan Grossman ( http://www.dangrossman.info )
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Built for http://www.improvely.com
9 | */
10 |
11 | .daterangepicker.dropdown-menu {
12 | max-width: none;
13 | }
14 |
15 | .daterangepicker.opensleft .ranges, .daterangepicker.opensleft .calendar {
16 | float: left;
17 | margin: 4px;
18 | }
19 |
20 | .daterangepicker.opensright .ranges, .daterangepicker.opensright .calendar {
21 | float: right;
22 | margin: 4px;
23 | }
24 |
25 | .daterangepicker .ranges {
26 | width: 160px;
27 | text-align: left;
28 | }
29 |
30 | .daterangepicker .ranges .range_inputs > div {
31 | float: left;
32 | }
33 |
34 | .daterangepicker .ranges .range_inputs > div:nth-child(2) {
35 | padding-left: 11px;
36 | }
37 |
38 | .daterangepicker .calendar {
39 | display: none;
40 | max-width: 270px;
41 | }
42 |
43 | .daterangepicker .calendar th, .daterangepicker .calendar td {
44 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
45 | white-space: nowrap;
46 | text-align: center;
47 | min-width: 32px;
48 | }
49 |
50 | .daterangepicker .ranges label {
51 | color: #333;
52 | display: block;
53 | font-size: 11px;
54 | font-weight: normal;
55 | height: 20px;
56 | line-height: 20px;
57 | margin-bottom: 2px;
58 | text-shadow: #fff 1px 1px 0px;
59 | text-transform: uppercase;
60 | width: 74px;
61 | }
62 |
63 | .daterangepicker .ranges input {
64 | font-size: 11px;
65 | }
66 |
67 | .daterangepicker .ranges .input-mini {
68 | background-color: #eee;
69 | border: 1px solid #ccc;
70 | border-radius: 4px;
71 | color: #555;
72 | display: block;
73 | font-size: 11px;
74 | height: 30px;
75 | line-height: 30px;
76 | vertical-align: middle;
77 | margin: 0 0 10px 0;
78 | padding: 0 6px;
79 | width: 74px;
80 | }
81 |
82 | .daterangepicker .ranges ul {
83 | list-style: none;
84 | margin: 0;
85 | padding: 0;
86 | }
87 |
88 | .daterangepicker .ranges li {
89 | font-size: 13px;
90 | background: #f5f5f5;
91 | border: 1px solid #f5f5f5;
92 | color: #08c;
93 | padding: 3px 12px;
94 | margin-bottom: 8px;
95 | -webkit-border-radius: 5px;
96 | -moz-border-radius: 5px;
97 | border-radius: 5px;
98 | cursor: pointer;
99 | }
100 |
101 | .daterangepicker .ranges li.active, .daterangepicker .ranges li:hover {
102 | background: #08c;
103 | border: 1px solid #08c;
104 | color: #fff;
105 | }
106 |
107 | .daterangepicker .calendar-date {
108 | border: 1px solid #ddd;
109 | padding: 4px;
110 | border-radius: 4px;
111 | background: #fff;
112 | }
113 |
114 | .daterangepicker .calendar-time {
115 | text-align: center;
116 | margin: 8px auto 0 auto;
117 | line-height: 30px;
118 | }
119 |
120 | .daterangepicker {
121 | position: absolute;
122 | background: #fff;
123 | top: 100px;
124 | left: 20px;
125 | padding: 4px;
126 | margin-top: 1px;
127 | -webkit-border-radius: 4px;
128 | -moz-border-radius: 4px;
129 | border-radius: 4px;
130 | }
131 |
132 | .daterangepicker.opensleft:before {
133 | position: absolute;
134 | top: -7px;
135 | right: 9px;
136 | display: inline-block;
137 | border-right: 7px solid transparent;
138 | border-bottom: 7px solid #ccc;
139 | border-left: 7px solid transparent;
140 | border-bottom-color: rgba(0, 0, 0, 0.2);
141 | content: '';
142 | }
143 |
144 | .daterangepicker.opensleft:after {
145 | position: absolute;
146 | top: -6px;
147 | right: 10px;
148 | display: inline-block;
149 | border-right: 6px solid transparent;
150 | border-bottom: 6px solid #fff;
151 | border-left: 6px solid transparent;
152 | content: '';
153 | }
154 |
155 | .daterangepicker.opensright:before {
156 | position: absolute;
157 | top: -7px;
158 | left: 9px;
159 | display: inline-block;
160 | border-right: 7px solid transparent;
161 | border-bottom: 7px solid #ccc;
162 | border-left: 7px solid transparent;
163 | border-bottom-color: rgba(0, 0, 0, 0.2);
164 | content: '';
165 | }
166 |
167 | .daterangepicker.opensright:after {
168 | position: absolute;
169 | top: -6px;
170 | left: 10px;
171 | display: inline-block;
172 | border-right: 6px solid transparent;
173 | border-bottom: 6px solid #fff;
174 | border-left: 6px solid transparent;
175 | content: '';
176 | }
177 |
178 | .daterangepicker table {
179 | width: 100%;
180 | margin: 0;
181 | }
182 |
183 | .daterangepicker td, .daterangepicker th {
184 | text-align: center;
185 | width: 20px;
186 | height: 20px;
187 | -webkit-border-radius: 4px;
188 | -moz-border-radius: 4px;
189 | border-radius: 4px;
190 | cursor: pointer;
191 | white-space: nowrap;
192 | }
193 |
194 | .daterangepicker td.off {
195 | color: #999;
196 | }
197 |
198 | .daterangepicker td.disabled {
199 | color: #999;
200 | }
201 |
202 | .daterangepicker td.available:hover, .daterangepicker th.available:hover {
203 | background: #eee;
204 | }
205 |
206 | .daterangepicker td.in-range {
207 | background: #ebf4f8;
208 | -webkit-border-radius: 0;
209 | -moz-border-radius: 0;
210 | border-radius: 0;
211 | }
212 |
213 | .daterangepicker td.active, .daterangepicker td.active:hover {
214 | background-color: #357ebd;
215 | border-color: #3071a9;
216 | color: #fff;
217 | }
218 |
219 | .daterangepicker td.week, .daterangepicker th.week {
220 | font-size: 80%;
221 | color: #ccc;
222 | }
223 |
224 | .daterangepicker select.monthselect, .daterangepicker select.yearselect {
225 | font-size: 12px;
226 | padding: 1px;
227 | height: auto;
228 | margin: 0;
229 | cursor: default;
230 | }
231 |
232 | .daterangepicker select.monthselect {
233 | margin-right: 2%;
234 | width: 56%;
235 | }
236 |
237 | .daterangepicker select.yearselect {
238 | width: 40%;
239 | }
240 |
241 | .daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.ampmselect {
242 | width: 50px;
243 | margin-bottom: 0;
244 | }
--------------------------------------------------------------------------------
/ops/static/css/googleapis.css:
--------------------------------------------------------------------------------
1 | /* cyrillic-ext */
2 | @font-face {
3 | font-family: 'Open Sans';
4 | font-style: normal;
5 | font-weight: 300;
6 | src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OX-hpKKSTj5PW.woff2) format('woff2');
7 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
8 | }
9 | /* cyrillic */
10 | @font-face {
11 | font-family: 'Open Sans';
12 | font-style: normal;
13 | font-weight: 300;
14 | src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OVuhpKKSTj5PW.woff2) format('woff2');
15 | unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
16 | }
17 | /* greek-ext */
18 | @font-face {
19 | font-family: 'Open Sans';
20 | font-style: normal;
21 | font-weight: 300;
22 | src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OXuhpKKSTj5PW.woff2) format('woff2');
23 | unicode-range: U+1F00-1FFF;
24 | }
25 | /* greek */
26 | @font-face {
27 | font-family: 'Open Sans';
28 | font-style: normal;
29 | font-weight: 300;
30 | src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OUehpKKSTj5PW.woff2) format('woff2');
31 | unicode-range: U+0370-03FF;
32 | }
33 | /* vietnamese */
34 | @font-face {
35 | font-family: 'Open Sans';
36 | font-style: normal;
37 | font-weight: 300;
38 | src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OXehpKKSTj5PW.woff2) format('woff2');
39 | unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
40 | }
41 | /* latin-ext */
42 | @font-face {
43 | font-family: 'Open Sans';
44 | font-style: normal;
45 | font-weight: 300;
46 | src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OXOhpKKSTj5PW.woff2) format('woff2');
47 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
48 | }
49 | /* latin */
50 | @font-face {
51 | font-family: 'Open Sans';
52 | font-style: normal;
53 | font-weight: 300;
54 | src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OUuhpKKSTjw.woff2) format('woff2');
55 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
56 | }
57 | /* cyrillic-ext */
58 | @font-face {
59 | font-family: 'Open Sans';
60 | font-style: normal;
61 | font-weight: 400;
62 | src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFWJ0bf8pkAp6a.woff2) format('woff2');
63 | unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
64 | }
65 | /* cyrillic */
66 | @font-face {
67 | font-family: 'Open Sans';
68 | font-style: normal;
69 | font-weight: 400;
70 | src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFUZ0bf8pkAp6a.woff2) format('woff2');
71 | unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
72 | }
73 | /* greek-ext */
74 | @font-face {
75 | font-family: 'Open Sans';
76 | font-style: normal;
77 | font-weight: 400;
78 | src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFWZ0bf8pkAp6a.woff2) format('woff2');
79 | unicode-range: U+1F00-1FFF;
80 | }
81 | /* greek */
82 | @font-face {
83 | font-family: 'Open Sans';
84 | font-style: normal;
85 | font-weight: 400;
86 | src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFVp0bf8pkAp6a.woff2) format('woff2');
87 | unicode-range: U+0370-03FF;
88 | }
89 | /* vietnamese */
90 | @font-face {
91 | font-family: 'Open Sans';
92 | font-style: normal;
93 | font-weight: 400;
94 | src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFWp0bf8pkAp6a.woff2) format('woff2');
95 | unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
96 | }
97 | /* latin-ext */
98 | @font-face {
99 | font-family: 'Open Sans';
100 | font-style: normal;
101 | font-weight: 400;
102 | src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFW50bf8pkAp6a.woff2) format('woff2');
103 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
104 | }
105 | /* latin */
106 | @font-face {
107 | font-family: 'Open Sans';
108 | font-style: normal;
109 | font-weight: 400;
110 | src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFVZ0bf8pkAg.woff2) format('woff2');
111 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
112 | }
--------------------------------------------------------------------------------
/ops/static/css/googleapis_bak.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Open Sans';
3 | font-style: normal;
4 | font-weight: 300;
5 | src: local('Open Sans Light'), local('OpenSans-Light'), url(http://themes.googleusercontent.com/static/fonts/opensans/v7/DXI1ORHCpsQm3Vp6mXoaTXhCUOGz7vYGh680lGh-uXM.woff) format('woff');
6 | }
7 |
8 | @font-face {
9 | font-family: 'Open Sans';
10 | font-style: normal;
11 | font-weight: 400;
12 | src: local('Open Sans'), local('OpenSans'), url(http://themes.googleusercontent.com/static/fonts/opensans/v7/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff) format('woff');
13 | }
14 |
--------------------------------------------------------------------------------
/ops/static/css/images/border.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/images/border.png
--------------------------------------------------------------------------------
/ops/static/css/images/controls.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/images/controls.png
--------------------------------------------------------------------------------
/ops/static/css/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/images/loading.gif
--------------------------------------------------------------------------------
/ops/static/css/images/loading_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/images/loading_background.png
--------------------------------------------------------------------------------
/ops/static/css/images/overlay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/images/overlay.png
--------------------------------------------------------------------------------
/ops/static/css/img/Thumbs.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/img/Thumbs.db
--------------------------------------------------------------------------------
/ops/static/css/img/alpha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/img/alpha.png
--------------------------------------------------------------------------------
/ops/static/css/img/hue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/img/hue.png
--------------------------------------------------------------------------------
/ops/static/css/img/saturation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/img/saturation.png
--------------------------------------------------------------------------------
/ops/static/css/jquery-ui-1.10.3.custom.min.css:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.3 - 2013-07-07
2 | * http://jqueryui.com
3 | * Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css
4 | * Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
5 |
6 | .ui-helper-hidden {
7 | display: none
8 | }
9 |
10 | .ui-helper-hidden-accessible {
11 | border: 0;
12 | clip: rect(0 0 0 0);
13 | height: 1px;
14 | margin: -1px;
15 | overflow: hidden;
16 | padding: 0;
17 | position: absolute;
18 | width: 1px
19 | }
20 |
21 | .ui-helper-reset {
22 | margin: 0;
23 | padding: 0;
24 | border: 0;
25 | outline: 0;
26 | line-height: 1.3;
27 | text-decoration: none;
28 | font-size: 100%;
29 | list-style: none
30 | }
31 |
32 | .ui-helper-clearfix:before, .ui-helper-clearfix:after {
33 | content: "";
34 | display: table;
35 | border-collapse: collapse
36 | }
37 |
38 | .ui-helper-clearfix:after {
39 | clear: both
40 | }
41 |
42 | .ui-helper-clearfix {
43 | min-height: 0
44 | }
45 |
46 | .ui-helper-zfix {
47 | width: 100%;
48 | height: 100%;
49 | top: 0;
50 | left: 0;
51 | position: absolute;
52 | opacity: 0;
53 | filter: Alpha(Opacity=0)
54 | }
55 |
56 | .ui-front {
57 | z-index: 100
58 | }
59 |
60 | .ui-state-disabled {
61 | cursor: default !important
62 | }
63 |
64 | .ui-icon {
65 | display: block;
66 | text-indent: -99999px;
67 | overflow: hidden;
68 | background-repeat: no-repeat
69 | }
70 |
71 | .ui-widget-overlay {
72 | position: fixed;
73 | top: 0;
74 | left: 0;
75 | width: 100%;
76 | height: 100%
77 | }
78 |
79 | .ui-resizable {
80 | position: relative
81 | }
82 |
83 | .ui-resizable-handle {
84 | position: absolute;
85 | font-size: .1px;
86 | display: block
87 | }
88 |
89 | .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle {
90 | display: none
91 | }
92 |
93 | .ui-resizable-n {
94 | cursor: n-resize;
95 | height: 7px;
96 | width: 100%;
97 | top: -5px;
98 | left: 0
99 | }
100 |
101 | .ui-resizable-s {
102 | cursor: s-resize;
103 | height: 7px;
104 | width: 100%;
105 | bottom: -5px;
106 | left: 0
107 | }
108 |
109 | .ui-resizable-e {
110 | cursor: e-resize;
111 | width: 7px;
112 | right: -5px;
113 | top: 0;
114 | height: 100%
115 | }
116 |
117 | .ui-resizable-w {
118 | cursor: w-resize;
119 | width: 7px;
120 | left: -5px;
121 | top: 0;
122 | height: 100%
123 | }
124 |
125 | .ui-resizable-se {
126 | cursor: se-resize;
127 | width: 12px;
128 | height: 12px;
129 | right: 1px;
130 | bottom: 1px
131 | }
132 |
133 | .ui-resizable-sw {
134 | cursor: sw-resize;
135 | width: 9px;
136 | height: 9px;
137 | left: -5px;
138 | bottom: -5px
139 | }
140 |
141 | .ui-resizable-nw {
142 | cursor: nw-resize;
143 | width: 9px;
144 | height: 9px;
145 | left: -5px;
146 | top: -5px
147 | }
148 |
149 | .ui-resizable-ne {
150 | cursor: ne-resize;
151 | width: 9px;
152 | height: 9px;
153 | right: -5px;
154 | top: -5px
155 | }
156 |
157 | .ui-selectable-helper {
158 | position: absolute;
159 | z-index: 100;
160 | border: 1px dotted #000
161 | }
162 |
163 | .ui-slider {
164 | position: relative;
165 | text-align: left
166 | }
167 |
168 | .ui-slider .ui-slider-handle {
169 | position: absolute;
170 | z-index: 2;
171 | width: 1.2em;
172 | height: 1.2em;
173 | cursor: default
174 | }
175 |
176 | .ui-slider .ui-slider-range {
177 | position: absolute;
178 | z-index: 1;
179 | font-size: .7em;
180 | display: block;
181 | border: 0;
182 | background-position: 0 0
183 | }
184 |
185 | .ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range {
186 | filter: inherit
187 | }
188 |
189 | .ui-slider-horizontal {
190 | height: .8em
191 | }
192 |
193 | .ui-slider-horizontal .ui-slider-handle {
194 | top: -.3em;
195 | margin-left: -.6em
196 | }
197 |
198 | .ui-slider-horizontal .ui-slider-range {
199 | top: 0;
200 | height: 100%
201 | }
202 |
203 | .ui-slider-horizontal .ui-slider-range-min {
204 | left: 0
205 | }
206 |
207 | .ui-slider-horizontal .ui-slider-range-max {
208 | right: 0
209 | }
210 |
211 | .ui-slider-vertical {
212 | width: .8em;
213 | height: 100px
214 | }
215 |
216 | .ui-slider-vertical .ui-slider-handle {
217 | left: -.3em;
218 | margin-left: 0;
219 | margin-bottom: -.6em
220 | }
221 |
222 | .ui-slider-vertical .ui-slider-range {
223 | left: 0;
224 | width: 100%
225 | }
226 |
227 | .ui-slider-vertical .ui-slider-range-min {
228 | bottom: 0
229 | }
230 |
231 | .ui-slider-vertical .ui-slider-range-max {
232 | top: 0
233 | }
--------------------------------------------------------------------------------
/ops/static/css/jquery.gritter.css:
--------------------------------------------------------------------------------
1 | /* the norm */
2 | #gritter-notice-wrapper {
3 | position: fixed;
4 | top: 20px;
5 | right: 20px;
6 | width: 301px;
7 | z-index: 9999;
8 | }
9 |
10 | #gritter-notice-wrapper.top-left {
11 | left: 20px;
12 | right: auto;
13 | }
14 |
15 | #gritter-notice-wrapper.bottom-right {
16 | top: auto;
17 | left: auto;
18 | bottom: 20px;
19 | right: 20px;
20 | }
21 |
22 | #gritter-notice-wrapper.bottom-left {
23 | top: auto;
24 | right: auto;
25 | bottom: 20px;
26 | left: 20px;
27 | }
28 |
29 | .gritter-item-wrapper {
30 | position: relative;
31 | margin: 0 0 10px 0;
32 | background: url('../images/ie-spacer.gif'); /* ie7/8 fix */
33 | }
34 |
35 | .gritter-top {
36 | background: url(../images/gritter.png) no-repeat left -30px;
37 | height: 10px;
38 | }
39 |
40 | .hover .gritter-top {
41 | background-position: right -30px;
42 | }
43 |
44 | .gritter-bottom {
45 | background: url(../images/gritter.png) no-repeat left bottom;
46 | height: 8px;
47 | margin: 0;
48 | }
49 |
50 | .hover .gritter-bottom {
51 | background-position: bottom right;
52 | }
53 |
54 | .gritter-item {
55 | display: block;
56 | background: url(../images/gritter.png) no-repeat left -40px;
57 | color: #eee;
58 | padding: 2px 11px 8px 11px;
59 | font-size: 11px;
60 | font-family: verdana;
61 | }
62 |
63 | .hover .gritter-item {
64 | background-position: right -40px;
65 | }
66 |
67 | .gritter-item p {
68 | padding: 0;
69 | margin: 0;
70 | word-wrap: break-word;
71 | }
72 |
73 | .gritter-close {
74 | display: none;
75 | position: absolute;
76 | top: 5px;
77 | left: 3px;
78 | background: url(../images/gritter.png) no-repeat left top;
79 | cursor: pointer;
80 | width: 30px;
81 | height: 30px;
82 | }
83 |
84 | .gritter-title {
85 | font-size: 14px;
86 | font-weight: bold;
87 | padding: 0 0 7px 0;
88 | display: block;
89 | text-shadow: 1px 1px 0 #000; /* Not supported by IE :( */
90 | }
91 |
92 | .gritter-image {
93 | width: 48px;
94 | height: 48px;
95 | float: left;
96 | }
97 |
98 | .gritter-with-image,
99 | .gritter-without-image {
100 | padding: 0;
101 | }
102 |
103 | .gritter-with-image {
104 | width: 220px;
105 | float: right;
106 | }
107 |
108 | /* for the light (white) version of the gritter notice */
109 | .gritter-light .gritter-item,
110 | .gritter-light .gritter-bottom,
111 | .gritter-light .gritter-top,
112 | .gritter-light .gritter-close {
113 | background-image: url(../images/gritter-light.png);
114 | color: #222;
115 | }
116 |
117 | .gritter-light .gritter-title {
118 | text-shadow: none;
119 | }
120 |
--------------------------------------------------------------------------------
/ops/static/css/prettify.css:
--------------------------------------------------------------------------------
1 | .com {
2 | color: #93a1a1;
3 | }
4 |
5 | .lit {
6 | color: #195f91;
7 | }
8 |
9 | .pun, .opn, .clo {
10 | color: #93a1a1;
11 | }
12 |
13 | .fun {
14 | color: #dc322f;
15 | }
16 |
17 | .str, .atv {
18 | color: #D14;
19 | }
20 |
21 | .kwd, .prettyprint .tag {
22 | color: #1e347b;
23 | }
24 |
25 | .typ, .atn, .dec, .var {
26 | color: teal;
27 | }
28 |
29 | .pln {
30 | color: #48484c;
31 | }
32 |
33 | .prettyprint {
34 | padding: 8px;
35 | background-color: #f7f7f9;
36 | border: 1px solid #e1e1e8;
37 | }
38 |
39 | .prettyprint.linenums {
40 | -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
41 | -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
42 | box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
43 | }
44 |
45 | /* Specify class=linenums on a pre to get line numbering */
46 | ol.linenums {
47 | margin: 0 0 0 33px; /* IE indents via margin-left */
48 | }
49 |
50 | ol.linenums li {
51 | padding-left: 12px;
52 | color: #bebec5;
53 | line-height: 20px;
54 | text-shadow: 0 1px 0 #fff;
55 | }
--------------------------------------------------------------------------------
/ops/static/css/select2-spinner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/select2-spinner.gif
--------------------------------------------------------------------------------
/ops/static/css/select2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/select2.png
--------------------------------------------------------------------------------
/ops/static/css/select2x2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/css/select2x2.png
--------------------------------------------------------------------------------
/ops/static/font/fontawesome-webfont-iefix.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/font/fontawesome-webfont-iefix.eot
--------------------------------------------------------------------------------
/ops/static/font/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/font/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/ops/static/font/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/font/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/ops/static/font/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/font/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/ops/static/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/ops/static/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/ops/static/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/ops/static/images/gallery/thumb-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/images/gallery/thumb-1.jpg
--------------------------------------------------------------------------------
/ops/static/images/gallery/thumb-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/images/gallery/thumb-2.jpg
--------------------------------------------------------------------------------
/ops/static/images/gallery/thumb-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/images/gallery/thumb-3.jpg
--------------------------------------------------------------------------------
/ops/static/images/gallery/thumb-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/images/gallery/thumb-4.jpg
--------------------------------------------------------------------------------
/ops/static/images/gallery/thumb-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/images/gallery/thumb-5.jpg
--------------------------------------------------------------------------------
/ops/static/images/gallery/thumb-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/images/gallery/thumb-6.jpg
--------------------------------------------------------------------------------
/ops/static/images/spritemap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/images/spritemap.png
--------------------------------------------------------------------------------
/ops/static/images/spritemap@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/images/spritemap@2x.png
--------------------------------------------------------------------------------
/ops/static/img/clear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/img/clear.png
--------------------------------------------------------------------------------
/ops/static/img/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/static/img/loading.gif
--------------------------------------------------------------------------------
/ops/static/js/ace-extra.min.js:
--------------------------------------------------------------------------------
1 | if(!("ace" in window)){window.ace={}}ace.config={cookie_expiry:604800,storage_method:2};ace.settings={is:function(b,a){return(ace.data.get("settings",b+"-"+a)==1)},exists:function(b,a){return(ace.data.get("settings",b+"-"+a)!==null)},set:function(b,a){ace.data.set("settings",b+"-"+a,1)},unset:function(b,a){ace.data.set("settings",b+"-"+a,-1)},remove:function(b,a){ace.data.remove("settings",b+"-"+a)},navbar_fixed:function(a){a=a||false;if(!a&&ace.settings.is("sidebar","fixed")){ace.settings.sidebar_fixed(false)}var b=document.getElementById("navbar");if(a){if(!ace.hasClass(b,"navbar-fixed-top")){ace.addClass(b,"navbar-fixed-top")}if(!ace.hasClass(document.body,"navbar-fixed")){ace.addClass(document.body,"navbar-fixed")}ace.settings.set("navbar","fixed")}else{ace.removeClass(b,"navbar-fixed-top");ace.removeClass(document.body,"navbar-fixed");ace.settings.unset("navbar","fixed")}document.getElementById("ace-settings-navbar").checked=a},breadcrumbs_fixed:function(a){a=a||false;if(a&&!ace.settings.is("sidebar","fixed")){ace.settings.sidebar_fixed(true)}var b=document.getElementById("breadcrumbs");if(a){if(!ace.hasClass(b,"breadcrumbs-fixed")){ace.addClass(b,"breadcrumbs-fixed")}if(!ace.hasClass(document.body,"breadcrumbs-fixed")){ace.addClass(document.body,"breadcrumbs-fixed")}ace.settings.set("breadcrumbs","fixed")}else{ace.removeClass(b,"breadcrumbs-fixed");ace.removeClass(document.body,"breadcrumbs-fixed");ace.settings.unset("breadcrumbs","fixed")}document.getElementById("ace-settings-breadcrumbs").checked=a},sidebar_fixed:function(a){a=a||false;if(!a&&ace.settings.is("breadcrumbs","fixed")){ace.settings.breadcrumbs_fixed(false)}if(a&&!ace.settings.is("navbar","fixed")){ace.settings.navbar_fixed(true)}var b=document.getElementById("sidebar");if(a){if(!ace.hasClass(b,"sidebar-fixed")){ace.addClass(b,"sidebar-fixed")}ace.settings.set("sidebar","fixed")}else{ace.removeClass(b,"sidebar-fixed");ace.settings.unset("sidebar","fixed")}document.getElementById("ace-settings-sidebar").checked=a},main_container_fixed:function(a){a=a||false;var c=document.getElementById("main-container");var b=document.getElementById("navbar-container");if(a){if(!ace.hasClass(c,"container")){ace.addClass(c,"container")}if(!ace.hasClass(b,"container")){ace.addClass(b,"container")}ace.settings.set("main-container","fixed")}else{ace.removeClass(c,"container");ace.removeClass(b,"container");ace.settings.unset("main-container","fixed")}document.getElementById("ace-settings-add-container").checked=a;if(navigator.userAgent.match(/webkit/i)){var d=document.getElementById("sidebar");ace.toggleClass(d,"menu-min");setTimeout(function(){ace.toggleClass(d,"menu-min")},0)}},sidebar_collapsed:function(c){c=c||false;var e=document.getElementById("sidebar");var d=document.getElementById("sidebar-collapse").querySelector('[class*="icon-"]');var b=d.getAttribute("data-icon1");var a=d.getAttribute("data-icon2");if(c){ace.addClass(e,"menu-min");ace.removeClass(d,b);ace.addClass(d,a);ace.settings.set("sidebar","collapsed")}else{ace.removeClass(e,"menu-min");ace.removeClass(d,a);ace.addClass(d,b);ace.settings.unset("sidebar","collapsed")}},};ace.settings.check=function(c,e){if(!ace.settings.exists(c,e)){return}var a=ace.settings.is(c,e);var b={"navbar-fixed":"navbar-fixed-top","sidebar-fixed":"sidebar-fixed","breadcrumbs-fixed":"breadcrumbs-fixed","sidebar-collapsed":"menu-min","main-container-fixed":"container"};var d=document.getElementById(c);if(a!=ace.hasClass(d,b[c+"-"+e])){ace.settings[c.replace("-","_")+"_"+e](a)}};ace.data_storage=function(e,c){var b="ace.";var d=null;var a=0;if((e==1||e===c)&&"localStorage" in window&&window.localStorage!==null){d=ace.storage;a=1}else{if(d==null&&(e==2||e===c)&&"cookie" in document&&document.cookie!==null){d=ace.cookie;a=2}}this.set=function(h,g,i,k){if(!d){return}if(i===k){i=g;g=h;if(i==null){d.remove(b+g)}else{if(a==1){d.set(b+g,i)}else{if(a==2){d.set(b+g,i,ace.config.cookie_expiry)}}}}else{if(a==1){if(i==null){d.remove(b+h+"."+g)}else{d.set(b+h+"."+g,i)}}else{if(a==2){var j=d.get(b+h);var f=j?JSON.parse(j):{};if(i==null){delete f[g];if(ace.sizeof(f)==0){d.remove(b+h);return}}else{f[g]=i}d.set(b+h,JSON.stringify(f),ace.config.cookie_expiry)}}}};this.get=function(h,g,j){if(!d){return null}if(g===j){g=h;return d.get(b+g)}else{if(a==1){return d.get(b+h+"."+g)}else{if(a==2){var i=d.get(b+h);var f=i?JSON.parse(i):{};return g in f?f[g]:null}}}};this.remove=function(g,f,h){if(!d){return}if(f===h){f=g;this.set(f,null)}else{this.set(g,f,null)}}};ace.cookie={get:function(c){var d=document.cookie,g,f=c+"=",a;if(!d){return}a=d.indexOf("; "+f);if(a==-1){a=d.indexOf(f);if(a!=0){return null}}else{a+=2}g=d.indexOf(";",a);if(g==-1){g=d.length}return decodeURIComponent(d.substring(a+f.length,g))},set:function(b,e,a,g,c,f){var h=new Date();if(typeof(a)=="object"&&a.toGMTString){a=a.toGMTString()}else{if(parseInt(a,10)){h.setTime(h.getTime()+(parseInt(a,10)*1000));a=h.toGMTString()}else{a=""}}document.cookie=b+"="+encodeURIComponent(e)+((a)?"; expires="+a:"")+((g)?"; path="+g:"")+((c)?"; domain="+c:"")+((f)?"; secure":"")},remove:function(a,b){this.set(a,"",-1000,b)}};ace.storage={get:function(a){return window.localStorage.getItem(a)},set:function(a,b){window.localStorage.setItem(a,b)},remove:function(a){window.localStorage.removeItem(a)}};ace.sizeof=function(c){var b=0;for(var a in c){if(c.hasOwnProperty(a)){b++}}return b};ace.hasClass=function(b,a){return(" "+b.className+" ").indexOf(" "+a+" ")>-1};ace.addClass=function(c,b){if(!ace.hasClass(c,b)){var a=c.className;c.className=a+(a.length?" ":"")+b}};ace.removeClass=function(b,a){ace.replaceClass(b,a)};ace.replaceClass=function(c,b,d){var a=new RegExp(("(^|\\s)"+b+"(\\s|$)"),"i");c.className=c.className.replace(a,function(e,g,f){return d?(g+d+f):" "}).replace(/^\s+|\s+$/g,"")};ace.toggleClass=function(b,a){if(ace.hasClass(b,a)){ace.removeClass(b,a)}else{ace.addClass(b,a)}};ace.data=new ace.data_storage(ace.config.storage_method);
--------------------------------------------------------------------------------
/ops/static/js/ace.min.js:
--------------------------------------------------------------------------------
1 | if(!("ace" in window)){window.ace={}}jQuery(function(a){window.ace.click_event=a.fn.tap?"tap":"click"});jQuery(function(a){ace.handle_side_menu(jQuery);ace.enable_search_ahead(jQuery);ace.general_things(jQuery);ace.widget_boxes(jQuery);ace.widget_reload_handler(jQuery)});ace.handle_side_menu=function(a){a("#menu-toggler").on(ace.click_event,function(){a("#sidebar").toggleClass("display");a(this).toggleClass("display");return false});var c=a("#sidebar").hasClass("menu-min");a("#sidebar-collapse").on(ace.click_event,function(){c=a("#sidebar").hasClass("menu-min");ace.settings.sidebar_collapsed(!c)});var b=navigator.userAgent.match(/OS (5|6|7)(_\d)+ like Mac OS X/i);a(".nav-list").on(ace.click_event,function(h){var g=a(h.target).closest("a");if(!g||g.length==0){return}c=a("#sidebar").hasClass("menu-min");if(!g.hasClass("dropdown-toggle")){if(c&&ace.click_event=="tap"&&g.get(0).parentNode.parentNode==this){var i=g.find(".menu-text").get(0);if(h.target!=i&&!a.contains(i,h.target)){return false}}if(b){document.location=g.attr("href");return false}return}var f=g.next().get(0);if(!a(f).is(":visible")){var d=a(f.parentNode).closest("ul");if(c&&d.hasClass("nav-list")){return}d.find("> .open > .submenu").each(function(){if(this!=f&&!a(this.parentNode).hasClass("active")){a(this).slideUp(200).parent().removeClass("open")}})}else{}if(c&&a(f.parentNode.parentNode).hasClass("nav-list")){return false}a(f).slideToggle(200).parent().toggleClass("open");return false})};ace.general_things=function(a){a('.ace-nav [class*="icon-animated-"]').closest("a").on("click",function(){var d=a(this).find('[class*="icon-animated-"]').eq(0);var c=d.attr("class").match(/icon\-animated\-([\d\w]+)/);d.removeClass(c[0]);a(this).off("click")});a(".nav-list .badge[title],.nav-list .label[title]").tooltip({placement:"right"});a("#ace-settings-btn").on(ace.click_event,function(){a(this).toggleClass("open");a("#ace-settings-box").toggleClass("open")});a("#ace-settings-navbar").on("click",function(){ace.settings.navbar_fixed(this.checked)}).each(function(){this.checked=ace.settings.is("navbar","fixed")});a("#ace-settings-sidebar").on("click",function(){ace.settings.sidebar_fixed(this.checked)}).each(function(){this.checked=ace.settings.is("sidebar","fixed")});a("#ace-settings-breadcrumbs").on("click",function(){ace.settings.breadcrumbs_fixed(this.checked)}).each(function(){this.checked=ace.settings.is("breadcrumbs","fixed")});a("#ace-settings-add-container").on("click",function(){ace.settings.main_container_fixed(this.checked)}).each(function(){this.checked=ace.settings.is("main-container","fixed")});a("#ace-settings-rtl").removeAttr("checked").on("click",function(){ace.switch_direction(jQuery)});a("#btn-scroll-up").on(ace.click_event,function(){var c=Math.min(400,Math.max(100,parseInt(a("html").scrollTop()/3)));a("html,body").animate({scrollTop:0},c);return false});try{a("#skin-colorpicker").ace_colorpicker()}catch(b){}a("#skin-colorpicker").on("change",function(){var d=a(this).find("option:selected").data("skin");var c=a(document.body);c.removeClass("skin-1 skin-2 skin-3");if(d!="default"){c.addClass(d)}if(d=="skin-1"){a(".ace-nav > li.grey").addClass("dark")}else{a(".ace-nav > li.grey").removeClass("dark")}if(d=="skin-2"){a(".ace-nav > li").addClass("no-border margin-1");a(".ace-nav > li:not(:last-child)").addClass("light-pink").find('> a > [class*="icon-"]').addClass("pink").end().eq(0).find(".badge").addClass("badge-warning")}else{a(".ace-nav > li").removeClass("no-border margin-1");a(".ace-nav > li:not(:last-child)").removeClass("light-pink").find('> a > [class*="icon-"]').removeClass("pink").end().eq(0).find(".badge").removeClass("badge-warning")}if(d=="skin-3"){a(".ace-nav > li.grey").addClass("red").find(".badge").addClass("badge-yellow")}else{a(".ace-nav > li.grey").removeClass("red").find(".badge").removeClass("badge-yellow")}})};ace.widget_boxes=function(a){a(document).on("hide.bs.collapse show.bs.collapse",function(c){var b=c.target.getAttribute("id");a('[href*="#'+b+'"]').find('[class*="icon-"]').each(function(){var e=a(this);var d;var f=null;var g=null;if((f=e.attr("data-icon-show"))){g=e.attr("data-icon-hide")}else{if(d=e.attr("class").match(/icon\-(.*)\-(up|down)/)){f="icon-"+d[1]+"-down";g="icon-"+d[1]+"-up"}}if(f){if(c.type=="show"){e.removeClass(f).addClass(g)}else{e.removeClass(g).addClass(f)}return false}})});a(document).on("click.ace.widget","[data-action]",function(o){o.preventDefault();var n=a(this);var p=n.data("action");var b=n.closest(".widget-box");if(b.hasClass("ui-sortable-helper")){return}if(p=="collapse"){var j=b.hasClass("collapsed")?"show":"hide";var f=j=="show"?"shown":"hidden";var c;b.trigger(c=a.Event(j+".ace.widget"));if(c.isDefaultPrevented()){return}var g=b.find(".widget-body");var m=n.find("[class*=icon-]").eq(0);var h=m.attr("class").match(/icon\-(.*)\-(up|down)/);var d="icon-"+h[1]+"-down";var i="icon-"+h[1]+"-up";var l=g.find(".widget-body-inner");if(l.length==0){g=g.wrapInner('
').find(":first-child").eq(0)}else{g=l.eq(0)}var e=300;var k=200;if(j=="show"){if(m){m.addClass(i).removeClass(d)}b.removeClass("collapsed");g.slideUp(0,function(){g.slideDown(e,function(){b.trigger(c=a.Event(f+".ace.widget"))})})}else{if(m){m.addClass(d).removeClass(i)}g.slideUp(k,function(){b.addClass("collapsed");b.trigger(c=a.Event(f+".ace.widget"))})}}else{if(p=="close"){var c;b.trigger(c=a.Event("close.ace.widget"));if(c.isDefaultPrevented()){return}var r=parseInt(n.data("close-speed"))||300;b.hide(r,function(){b.trigger(c=a.Event("closed.ace.widget"));b.remove()})}else{if(p=="reload"){var c;b.trigger(c=a.Event("reload.ace.widget"));if(c.isDefaultPrevented()){return}n.blur();var q=false;if(b.css("position")=="static"){q=true;b.addClass("position-relative")}b.append('
');b.one("reloaded.ace.widget",function(){b.find(".widget-box-overlay").remove();if(q){b.removeClass("position-relative")}})}else{if(p=="settings"){var c=a.Event("settings.ace.widget");b.trigger(c)}}}}})};ace.widget_reload_handler=function(a){a(document).on("reload.ace.widget",".widget-box",function(b){var c=a(this);setTimeout(function(){c.trigger("reloaded.ace.widget")},parseInt(Math.random()*1000+1000))})};ace.enable_search_ahead=function(a){ace.variable_US_STATES=["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Dakota","North Carolina","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"];try{a("#nav-search-input").typeahead({source:ace.variable_US_STATES,updater:function(c){a("#nav-search-input").focus();return c}})}catch(b){}};ace.switch_direction=function(d){var c=d(document.body);c.toggleClass("rtl").find(".dropdown-menu:not(.datepicker-dropdown,.colorpicker)").toggleClass("pull-right").end().find(".pull-right:not(.dropdown-menu,blockquote,.profile-skills .pull-right)").removeClass("pull-right").addClass("tmp-rtl-pull-right").end().find(".pull-left:not(.dropdown-submenu,.profile-skills .pull-left)").removeClass("pull-left").addClass("pull-right").end().find(".tmp-rtl-pull-right").removeClass("tmp-rtl-pull-right").addClass("pull-left").end().find(".chosen-container").toggleClass("chosen-rtl").end();function a(h,g){c.find("."+h).removeClass(h).addClass("tmp-rtl-"+h).end().find("."+g).removeClass(g).addClass(h).end().find(".tmp-rtl-"+h).removeClass("tmp-rtl-"+h).addClass(g)}function b(h,g,i){i.each(function(){var k=d(this);var j=k.css(g);k.css(g,k.css(h));k.css(h,j)})}a("align-left","align-right");a("no-padding-left","no-padding-right");a("arrowed","arrowed-right");a("arrowed-in","arrowed-in-right");a("messagebar-item-left","messagebar-item-right");var e=d("#piechart-placeholder");if(e.size()>0){var f=d(document.body).hasClass("rtl")?"nw":"ne";e.data("draw").call(e.get(0),e,e.data("chart"),f)}};
--------------------------------------------------------------------------------
/ops/static/js/bootbox.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * bootbox.js v4.0.0
3 | *
4 | * http://bootboxjs.com/license.txt
5 | */
6 | window.bootbox=window.bootbox||function a(b,c){"use strict";function d(a){var b=s[q.locale];return b?b[a]:s.en[a]}function e(a,c,d){a.preventDefault();var e=b.isFunction(d)&&d(a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},q,a),a.buttons||(a.buttons={}),a.backdrop=a.backdrop?"static":!1,c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-primary":"btn-default")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c){return n(j(m.apply(null,a),b,c),a)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(){return{buttons:l.apply(null,arguments)}}function n(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var o={dialog:"",header:"",footer:"",closeButton:"× ",form:"",inputs:{text:" "}},p=b("body"),q={locale:"en",backdrop:!0,animate:!0,className:null,closeButton:!0,show:!0},r={};r.alert=function(){var a;if(a=k(["ok"],arguments,["message","callback"]),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback():!0},r.dialog(a)},r.confirm=function(){var a;if(a=k(["cancel","confirm"],arguments,["message","callback"]),a.buttons.cancel.callback=a.onEscape=function(){return a.callback(!1)},a.buttons.confirm.callback=function(){return a.callback(!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return r.dialog(a)},r.prompt=function(){var a,d,e,f,g,h;if(f=b(o.form),d={buttons:l("cancel","confirm"),value:""},a=n(j(d,arguments,["title","callback"]),["cancel","confirm"]),h=a.show===c?!0:a.show,a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback(null)},a.buttons.confirm.callback=function(){return a.callback(g.val())},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");return g=b(o.inputs.text),g.val(a.value),f.append(g),f.on("submit",function(a){a.preventDefault(),e.find(".btn-primary").click()}),e=r.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){g.focus()}),h===!0&&e.modal("show"),e},r.dialog=function(a){a=h(a);var c=b(o.dialog),d=c.find(".modal-body"),f=a.buttons,i="",j={onEscape:a.onEscape};if(g(f,function(a,b){i+=""+b.label+" ",j[a]=b.callback}),d.find(".bootbox-body").html(a.message),a.animate===!0&&c.addClass("fade"),a.className&&c.addClass(a.className),a.title&&d.before(o.header),a.closeButton){var k=b(o.closeButton);a.title?c.find(".modal-header").prepend(k):k.css("margin-top","-10px").prependTo(d)}return a.title&&c.find(".modal-title").html(a.title),i.length&&(d.after(o.footer),c.find(".modal-footer").html(i)),c.on("hidden.bs.modal",function(a){a.target===this&&c.remove()}),c.on("shown.bs.modal",function(){c.find(".btn-primary:first").focus()}),c.on("escape.close.bb",function(a){j.onEscape&&e(a,c,j.onEscape)}),c.on("click",".modal-footer button",function(a){var d=b(this).data("bb-handler");e(a,c,j[d])}),c.on("click",".bootbox-close-button",function(a){e(a,c,j.onEscape)}),c.on("keyup",function(a){27===a.which&&c.trigger("escape.close.bb")}),p.append(c),c.modal({backdrop:a.backdrop,keyboard:!1,show:!1}),a.show&&c.modal("show"),c},r.setDefaults=function(a){b.extend(q,a)},r.hideAll=function(){b(".bootbox").modal("hide")};var s={br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},zh_CN:{OK:"OK",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return r.init=function(c){window.bootbox=a(c||b)},r}(window.jQuery);
--------------------------------------------------------------------------------
/ops/static/js/bootstrap-tag.min.js:
--------------------------------------------------------------------------------
1 | !function(c){var b=function(e,d){this.element=c(e);this.options=c.extend(true,{},c.fn.tag.defaults,d);this.values=c.grep(c.map(this.element.val().split(","),c.trim),function(f){return f.length>0});this.show()};b.prototype={constructor:b,show:function(){var d=this;d.element.parent().prepend(d.element.detach().hide());d.element.wrap(c('')).parent().on("click",function(){d.input.focus()});if(d.values.length){c.each(d.values,function(){d.createBadge(this)})}d.input=c('
').attr("placeholder",d.options.placeholder).insertAfter(d.element).on("focus",function(){d.element.parent().addClass("tags-hover")}).on("blur",function(){if(!d.skip){d.process();d.element.parent().removeClass("tags-hover");d.element.siblings(".tag").removeClass("tag-important")}d.skip=false}).on("keydown",function(g){if(g.keyCode==188||g.keyCode==13||g.keyCode==9){if(c.trim(c(this).val())&&(!d.element.siblings(".typeahead").length||d.element.siblings(".typeahead").is(":hidden"))){if(g.keyCode!=9){g.preventDefault()}d.process()}else{if(g.keyCode==188){if(!d.element.siblings(".typeahead").length||d.element.siblings(".typeahead").is(":hidden")){g.preventDefault()}else{d.input.data("typeahead").select();g.stopPropagation();g.preventDefault()}}}}else{if(!c.trim(c(this).val())&&g.keyCode==8){var f=d.element.siblings(".tag").length;if(f){var e=d.element.siblings(".tag:eq("+(f-1)+")");if(e.hasClass("tag-important")){d.remove(f-1)}else{e.addClass("tag-important")}}}else{d.element.siblings(".tag").removeClass("tag-important")}}}).typeahead({source:d.options.source,matcher:function(e){return ~e.toLowerCase().indexOf(this.query.toLowerCase())&&(d.inValues(e)==-1||d.options.allowDuplicates)},updater:c.proxy(d.add,d)});c(d.input.data("typeahead").$menu).on("mousedown",function(){d.skip=true});this.element.trigger("shown")},inValues:function(e){if(this.options.caseInsensitive){var d=-1;c.each(this.values,function(f,g){if(g.toLowerCase()==e.toLowerCase()){d=f;return false}});return d}else{return c.inArray(e,this.values)}},createBadge:function(e){var d=this;c("
",{"class":"tag"}).text(e).append(c('
× ').on("click",function(){d.remove(d.element.siblings(".tag").index(c(this).closest(".tag")))})).insertBefore(d.element)},add:function(g){var f=this;if(!f.options.allowDuplicates){var e=f.inValues(g);if(e!=-1){var d=f.element.siblings(".tag:eq("+e+")");d.addClass("tag-warning");setTimeout(function(){c(d).removeClass("tag-warning")},500);return}}this.values.push(g);this.createBadge(g);this.element.val(this.values.join(", "));this.element.trigger("added",[g])},remove:function(d){if(d>=0){var e=this.values.splice(d,1);this.element.siblings(".tag:eq("+d+")").remove();this.element.val(this.values.join(", "));this.element.trigger("removed",[e])}},process:function(){var d=c.grep(c.map(this.input.val().split(","),c.trim),function(f){return f.length>0}),e=this;c.each(d,function(){e.add(this)});this.input.val("")},skip:false};var a=c.fn.tag;c.fn.tag=function(d){return this.each(function(){var f=c(this),g=f.data("tag"),e=typeof d=="object"&&d;if(!g){f.data("tag",(g=new b(this,e)))}if(typeof d=="string"){g[d]()}})};c.fn.tag.defaults={allowDuplicates:false,caseInsensitive:true,placeholder:"",source:[]};c.fn.tag.Constructor=b;c.fn.tag.noConflict=function(){c.fn.tag=a;return this};c(window).on("load",function(){c('[data-provide="tag"]').each(function(){var d=c(this);if(d.data("tag")){return}d.tag(d.data())})})}(window.jQuery);
--------------------------------------------------------------------------------
/ops/static/js/bootstrap-wysiwyg.min.js:
--------------------------------------------------------------------------------
1 | (function(b){var a=function(e){var c=b.Deferred(),d=new FileReader();d.onload=function(f){c.resolve(f.target.result)};d.onerror=c.reject;d.onprogress=c.notify;d.readAsDataURL(e);return c.promise()};b.fn.cleanHtml=function(){var c=b(this).html();return c&&c.replace(/(
|\s|
<\/div>| )*$/,"")};b.fn.wysiwyg=function(k){var l=this,h,q,d,p=function(){if(q.activeToolbarClass){b(q.toolbarSelector).find(d).each(function(){try{var s=b(this).data(q.commandRole);if(document.queryCommandState(s)){b(this).addClass(q.activeToolbarClass)}else{b(this).removeClass(q.activeToolbarClass)}}catch(r){}})}},o=function(r,s){var u=r.split(" "),v=u.shift(),t=u.join(" ")+(s||"");document.execCommand(v,0,t);p()},f=function(r){b.each(r,function(s,t){l.keydown(s,function(u){if(l.attr("contenteditable")&&l.is(":visible")){u.preventDefault();u.stopPropagation();o(t)}}).keyup(s,function(u){if(l.attr("contenteditable")&&l.is(":visible")){u.preventDefault();u.stopPropagation()}})})},g=function(){try{var r=window.getSelection();if(r.getRangeAt&&r.rangeCount){return r.getRangeAt(0)}}catch(s){}},i=function(){h=g()},e=function(){try{var s=window.getSelection();if(h){try{s.removeAllRanges()}catch(r){document.body.createTextRange().select();document.selection.empty()}s.addRange(h)}}catch(t){}},j=function(r){l.focus();b.each(r,function(s,t){if(/^image\//.test(t.type)){b.when(a(t)).done(function(u){o("insertimage",u)}).fail(function(u){q.fileUploadError("file-reader",u)})}else{q.fileUploadError("unsupported-file-type",t.type)}})},c=function(s,r){e();if(document.queryCommandSupported("hiliteColor")){document.execCommand("hiliteColor",0,r||"transparent")}i();s.data(q.selectionMarker,r)},m=function(s,r){s.find(d).click(function(){e();l.focus();o(b(this).data(r.commandRole));i()});s.find("[data-toggle=dropdown]").click(e);s.find("input[type=text][data-"+r.commandRole+"]").on("webkitspeechchange change",function(){var t=this.value;this.value="";e();if(t){l.focus();o(b(this).data(r.commandRole),t)}i()}).on("focus",function(){var t=b(this);if(!t.data(r.selectionMarker)){c(t,r.selectionColor);t.focus()}}).on("blur",function(){var t=b(this);if(t.data(r.selectionMarker)){c(t,false)}});s.find("input[type=file][data-"+r.commandRole+"]").change(function(){e();if(this.type==="file"&&this.files&&this.files.length>0){j(this.files)}i();this.value=""})},n=function(){l.on("dragenter dragover",false).on("drop",function(s){var r=s.originalEvent.dataTransfer;s.stopPropagation();s.preventDefault();if(r&&r.files&&r.files.length>0){j(r.files)}})};q=b.extend({},b.fn.wysiwyg.defaults,k);d="a[data-"+q.commandRole+"],button[data-"+q.commandRole+"],input[type=button][data-"+q.commandRole+"]";f(q.hotKeys);if(q.dragAndDropImages){n()}m(b(q.toolbarSelector),q);l.attr("contenteditable",true).on("mouseup keyup mouseout",function(){i();p()});b(window).bind("touchend",function(u){var t=(l.is(u.target)||l.has(u.target).length>0),s=g(),r=s&&(s.startContainer===s.endContainer&&s.startOffset===s.endOffset);if(!r||t){i();p()}});return this};b.fn.wysiwyg.defaults={hotKeys:{"ctrl+b meta+b":"bold","ctrl+i meta+i":"italic","ctrl+u meta+u":"underline","ctrl+z meta+z":"undo","ctrl+y meta+y meta+shift+z":"redo","ctrl+l meta+l":"justifyleft","ctrl+r meta+r":"justifyright","ctrl+e meta+e":"justifycenter","ctrl+j meta+j":"justifyfull","shift+tab":"outdent",tab:"indent"},toolbarSelector:"[data-role=editor-toolbar]",commandRole:"edit",activeToolbarClass:"btn-info",selectionMarker:"edit-focus-marker",selectionColor:"darkgrey",dragAndDropImages:true,fileUploadError:function(d,c){console.log("File upload error",d,c)}}}(window.jQuery));
--------------------------------------------------------------------------------
/ops/static/js/customize.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | // 添加审核人
4 | function addreviewer(obj){
5 | if($(obj).prev().is("select")){
6 | var preval = $(obj).prev().val();
7 | }else if($(obj).prev().is("span")){
8 | var preval = $(obj).prev().find(".reviewer").val();
9 | }
10 | var hasboss = false;
11 | $(".reviewer").each(function(){
12 | if($(this).val() == "-1"){
13 | hasboss = true;
14 | }
15 | })
16 | if(hasboss == true){ //如果前面出现了上级领导 那么后面只能是指定人选了
17 | var len = $(".reviewer").length;
18 | $(obj).before('
指定人选 ');
19 | getreviewer($("#reviewer_"+len));
20 | }else{
21 | $(obj).before('
默认上级 指定人选 ')
22 | }
23 | if($(obj).next().is("a")) {
24 | }else{
25 | $(obj).after('
删除一级 ')
26 | }
27 | }
28 |
29 | // 删除一级
30 | function delReviewer(obj){
31 | if($(obj).prev().prev().is("span") && $(obj).prev().prev().prev().is("select")){
32 | $(obj).prev().prev().remove();
33 | $(obj).remove();
34 | }else if($(obj).prev().prev().is("span") && $(obj).prev().prev().prev().is("span")){
35 | $(obj).prev().prev().remove();
36 | }
37 | if($(obj).prev().prev().hasClass("firstreviewer")){
38 | $(obj).remove();
39 | }
40 | }
41 |
42 |
43 | // 获取审核人名单
44 | function getreviewer(obj){
45 | alert("xx");
46 | $.ajax({
47 | url: '/tickettype/',
48 | type: "POST",
49 | dataType: "json",
50 | data:{'type':"getreviewer"},
51 | error: function () {
52 | },
53 | success: function (data) {
54 | alert(data);
55 | // var oplist = new Array();
56 | // for (var i = 0; i < data.count; i++) {
57 | // var _info = data.items[i];
58 | // oplist.push('
' + _info.cname + '(' + _info.username + ') ');
59 | // }
60 | // if(obj.parent().hasClass('firstleader')){
61 | // var len = 0;
62 | // }else{
63 | // var len= $(".sureLeaderAuth_select").length;
64 | // }
65 | // obj.parent().html((obj.parent().hasClass('firstleader') ? '':'
') +'
--选择固定审核人-- ' + oplist.join('') + '');
66 | // $("#sureLeaderAuth_select_"+len).select2();
67 | // $("#jNotify").click();
68 | // oplist = null;
69 | }
70 | });
71 |
72 | }
73 |
74 | //获取审核指定审核人名单
75 | function changeReviewer(obj){
76 | if($(obj).val() == "-2"){
77 | getreviewer($(obj));
78 | }
79 | }
80 |
81 |
82 | //固定人员的选择后操作
83 | function sureLeaderAuth(obj){
84 | $(obj).parent().html(($(obj).parent().hasClass('firstleader') ? '':'
') +'
'+$(obj).find("option:selected").text()+' ');
85 | }
86 |
87 | // 编辑工单类型
88 | function show_edit_modal(){
89 |
90 | }
91 |
92 |
93 | //
94 | function add(){
95 |
96 | var reviewerarr =[];
97 | $(".reviewer").each(function(){
98 | if($(this).is('select')){
99 | leadersarr.push($(this).val());
100 | }else if($(this).is('span')){
101 | leadersarr.push($(this).attr('reviewerid'));
102 | }
103 | })
104 | var reviewer = reviewerarr.join(',');
105 |
106 | }
107 |
108 |
109 |
--------------------------------------------------------------------------------
/ops/static/js/dataTables.bootstrap.js:
--------------------------------------------------------------------------------
1 | /* Set the defaults for DataTables initialisation */
2 | $.extend( true, $.fn.dataTable.defaults, {
3 | "sDom":
4 | "<'row'<'col-xs-6'l><'col-xs-6'f>r>"+
5 | "t"+
6 | "<'row'<'col-xs-6'i><'col-xs-6'p>>",
7 | "oLanguage": {
8 | "sLengthMenu": "_MENU_ records per page"
9 | }
10 | } );
11 |
12 |
13 | /* Default class modification */
14 | $.extend( $.fn.dataTableExt.oStdClasses, {
15 | "sWrapper": "dataTables_wrapper form-inline",
16 | "sFilterInput": "form-control input-sm",
17 | "sLengthSelect": "form-control input-sm"
18 | } );
19 |
20 | // In 1.10 we use the pagination renderers to draw the Bootstrap paging,
21 | // rather than custom plug-in
22 | if ( $.fn.dataTable.Api ) {
23 | $.fn.dataTable.defaults.renderer = 'bootstrap';
24 | $.fn.dataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
25 | var api = new $.fn.dataTable.Api( settings );
26 | var classes = settings.oClasses;
27 | var lang = settings.oLanguage.oPaginate;
28 | var btnDisplay, btnClass;
29 |
30 | var attach = function( container, buttons ) {
31 | var i, ien, node, button;
32 | var clickHandler = function ( e ) {
33 | e.preventDefault();
34 | if ( e.data.action !== 'ellipsis' ) {
35 | api.page( e.data.action ).draw( false );
36 | }
37 | };
38 |
39 | for ( i=0, ien=buttons.length ; i
0 ?
58 | '' : ' disabled');
59 | break;
60 |
61 | case 'previous':
62 | btnDisplay = lang.sPrevious;
63 | btnClass = button + (page > 0 ?
64 | '' : ' disabled');
65 | break;
66 |
67 | case 'next':
68 | btnDisplay = lang.sNext;
69 | btnClass = button + (page < pages-1 ?
70 | '' : ' disabled');
71 | break;
72 |
73 | case 'last':
74 | btnDisplay = lang.sLast;
75 | btnClass = button + (page < pages-1 ?
76 | '' : ' disabled');
77 | break;
78 |
79 | default:
80 | btnDisplay = button + 1;
81 | btnClass = page === button ?
82 | 'active' : '';
83 | break;
84 | }
85 |
86 | if ( btnDisplay ) {
87 | node = $('', {
88 | 'class': classes.sPageButton+' '+btnClass,
89 | 'aria-controls': settings.sTableId,
90 | 'tabindex': settings.iTabIndex,
91 | 'id': idx === 0 && typeof button === 'string' ?
92 | settings.sTableId +'_'+ button :
93 | null
94 | } )
95 | .append( $('', {
96 | 'href': '#'
97 | } )
98 | .html( btnDisplay )
99 | )
100 | .appendTo( container );
101 |
102 | settings.oApi._fnBindAction(
103 | node, {action: button}, clickHandler
104 | );
105 | }
106 | }
107 | }
108 | };
109 |
110 | attach(
111 | $(host).empty().html('').children('ul'),
112 | buttons
113 | );
114 | }
115 | }
116 | else {
117 | // Integration for 1.9-
118 | $.fn.dataTable.defaults.sPaginationType = 'bootstrap';
119 |
120 | /* API method to get paging information */
121 | $.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
122 | {
123 | return {
124 | "iStart": oSettings._iDisplayStart,
125 | "iEnd": oSettings.fnDisplayEnd(),
126 | "iLength": oSettings._iDisplayLength,
127 | "iTotal": oSettings.fnRecordsTotal(),
128 | "iFilteredTotal": oSettings.fnRecordsDisplay(),
129 | "iPage": oSettings._iDisplayLength === -1 ?
130 | 0 : Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
131 | "iTotalPages": oSettings._iDisplayLength === -1 ?
132 | 0 : Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
133 | };
134 | };
135 |
136 | /* Bootstrap style pagination control */
137 | $.extend( $.fn.dataTableExt.oPagination, {
138 | "bootstrap": {
139 | "fnInit": function( oSettings, nPaging, fnDraw ) {
140 | var oLang = oSettings.oLanguage.oPaginate;
141 | var fnClickHandler = function ( e ) {
142 | e.preventDefault();
143 | if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
144 | fnDraw( oSettings );
145 | }
146 | };
147 |
148 | $(nPaging).append(
149 | ''
153 | );
154 | var els = $('a', nPaging);
155 | $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
156 | $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
157 | },
158 |
159 | "fnUpdate": function ( oSettings, fnDraw ) {
160 | var iListLength = 5;
161 | var oPaging = oSettings.oInstance.fnPagingInfo();
162 | var an = oSettings.aanFeatures.p;
163 | var i, ien, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
164 |
165 | if ( oPaging.iTotalPages < iListLength) {
166 | iStart = 1;
167 | iEnd = oPaging.iTotalPages;
168 | }
169 | else if ( oPaging.iPage <= iHalf ) {
170 | iStart = 1;
171 | iEnd = iListLength;
172 | } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
173 | iStart = oPaging.iTotalPages - iListLength + 1;
174 | iEnd = oPaging.iTotalPages;
175 | } else {
176 | iStart = oPaging.iPage - iHalf + 1;
177 | iEnd = iStart + iListLength - 1;
178 | }
179 |
180 | for ( i=0, ien=an.length ; i'+j+' ')
188 | .insertBefore( $('li:last', an[i])[0] )
189 | .bind('click', function (e) {
190 | e.preventDefault();
191 | oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
192 | fnDraw( oSettings );
193 | } );
194 | }
195 |
196 | // Add / remove disabled classes from the static elements
197 | if ( oPaging.iPage === 0 ) {
198 | $('li:first', an[i]).addClass('disabled');
199 | } else {
200 | $('li:first', an[i]).removeClass('disabled');
201 | }
202 |
203 | if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
204 | $('li:last', an[i]).addClass('disabled');
205 | } else {
206 | $('li:last', an[i]).removeClass('disabled');
207 | }
208 | }
209 | }
210 | }
211 | } );
212 | }
213 |
214 |
215 | /*
216 | * TableTools Bootstrap compatibility
217 | * Required TableTools 2.1+
218 | */
219 | if ( $.fn.DataTable.TableTools ) {
220 | // Set the classes that TableTools uses to something suitable for Bootstrap
221 | $.extend( true, $.fn.DataTable.TableTools.classes, {
222 | "container": "DTTT btn-group",
223 | "buttons": {
224 | "normal": "btn btn-default",
225 | "disabled": "disabled"
226 | },
227 | "collection": {
228 | "container": "DTTT_dropdown dropdown-menu",
229 | "buttons": {
230 | "normal": "",
231 | "disabled": "disabled"
232 | }
233 | },
234 | "print": {
235 | "info": "DTTT_print_info modal"
236 | },
237 | "select": {
238 | "row": "active"
239 | }
240 | } );
241 |
242 | // Have the collection use a bootstrap compatible dropdown
243 | $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {
244 | "collection": {
245 | "container": "ul",
246 | "button": "li",
247 | "liner": "a"
248 | }
249 | } );
250 | }
251 |
252 |
--------------------------------------------------------------------------------
/ops/static/js/flot/jquery.flot.resize.min.js:
--------------------------------------------------------------------------------
1 | /* Flot plugin for automatically redrawing plots as the placeholder resizes.
2 |
3 | Copyright (c) 2007-2013 IOLA and Ole Laursen.
4 | Licensed under the MIT license.
5 |
6 | It works by listening for changes on the placeholder div (through the jQuery
7 | resize event plugin) - if the size changes, it will redraw the plot.
8 |
9 | There are no options. If you need to disable the plugin for some plots, you
10 | can just fix the size of their placeholders.
11 |
12 | *//* Inline dependency:
13 | * jQuery resize event - v1.1 - 3/14/2010
14 | * http://benalman.com/projects/jquery-resize-plugin/
15 | *
16 | * Copyright (c) 2010 "Cowboy" Ben Alman
17 | * Dual licensed under the MIT and GPL licenses.
18 | * http://benalman.com/about/license/
19 | */(function(e,t,n){function c(){s=t[o](function(){r.each(function(){var t=e(this),n=t.width(),r=t.height(),i=e.data(this,a);(n!==i.w||r!==i.h)&&t.trigger(u,[i.w=n,i.h=r])}),c()},i[f])}var r=e([]),i=e.resize=e.extend(e.resize,{}),s,o="setTimeout",u="resize",a=u+"-special-event",f="delay",l="throttleWindow";i[f]=250,i[l]=!0,e.event.special[u]={setup:function(){if(!i[l]&&this[o])return!1;var t=e(this);r=r.add(t),e.data(this,a,{w:t.width(),h:t.height()}),r.length===1&&c()},teardown:function(){if(!i[l]&&this[o])return!1;var t=e(this);r=r.not(t),t.removeData(a),r.length||clearTimeout(s)},add:function(t){function s(t,i,s){var o=e(this),u=e.data(this,a);u.w=i!==n?i:o.width(),u.h=s!==n?s:o.height(),r.apply(this,arguments)}if(!i[l]&&this[o])return!1;var r;if(e.isFunction(t))return r=t,s;r=t.handler,t.handler=s}}})(jQuery,this),function(e){function n(e){function t(){var t=e.getPlaceholder();if(t.width()==0||t.height()==0)return;e.resize(),e.setupGrid(),e.draw()}function n(e,n){e.getPlaceholder().resize(t)}function r(e,n){e.getPlaceholder().unbind("resize",t)}e.hooks.bindEvents.push(n),e.hooks.shutdown.push(r)}var t={};e.plot.plugins.push({init:n,options:t,name:"resize",version:"1.0"})}(jQuery);
--------------------------------------------------------------------------------
/ops/static/js/fuelux/data/fuelux.tree-sampledata.js:
--------------------------------------------------------------------------------
1 | var DataSourceTree = function(options) {
2 | this._data = options.data;
3 | this._delay = options.delay;
4 | }
5 |
6 | DataSourceTree.prototype.data = function(options, callback) {
7 | var self = this;
8 | var $data = null;
9 |
10 | if(!("name" in options) && !("type" in options)){
11 | $data = this._data;//the root tree
12 | callback({ data: $data });
13 | return;
14 | }
15 | else if("type" in options && options.type == "folder") {
16 | if("additionalParameters" in options && "children" in options.additionalParameters)
17 | $data = options.additionalParameters.children;
18 | else $data = {}//no data
19 | }
20 |
21 | if($data != null)//this setTimeout is only for mimicking some random delay
22 | setTimeout(function(){callback({ data: $data });} , parseInt(Math.random() * 500) + 200);
23 |
24 | //we have used static data here
25 | //but you can retrieve your data dynamically from a server using ajax call
26 | //checkout examples/treeview.html and examples/treeview.js for more info
27 | };
28 |
29 | var tree_data = {
30 | 'for-sale' : {name: 'For Sale', type: 'folder'} ,
31 | 'vehicles' : {name: 'Vehicles', type: 'folder'} ,
32 | 'rentals' : {name: 'Rentals', type: 'folder'} ,
33 | 'real-estate' : {name: 'Real Estate', type: 'folder'} ,
34 | 'pets' : {name: 'Pets', type: 'folder'} ,
35 | 'tickets' : {name: 'Tickets', type: 'item'} ,
36 | 'services' : {name: 'Services', type: 'item'} ,
37 | 'personals' : {name: 'Personals', type: 'item'}
38 | }
39 | tree_data['for-sale']['additionalParameters'] = {
40 | 'children' : {
41 | 'appliances' : {name: 'Appliances', type: 'item'},
42 | 'arts-crafts' : {name: 'Arts & Crafts', type: 'item'},
43 | 'clothing' : {name: 'Clothing', type: 'item'},
44 | 'computers' : {name: 'Computers', type: 'item'},
45 | 'jewelry' : {name: 'Jewelry', type: 'item'},
46 | 'office-business' : {name: 'Office & Business', type: 'item'},
47 | 'sports-fitness' : {name: 'Sports & Fitness', type: 'item'}
48 | }
49 | }
50 | tree_data['vehicles']['additionalParameters'] = {
51 | 'children' : {
52 | 'cars' : {name: 'Cars', type: 'folder'},
53 | 'motorcycles' : {name: 'Motorcycles', type: 'item'},
54 | 'boats' : {name: 'Boats', type: 'item'}
55 | }
56 | }
57 | tree_data['vehicles']['additionalParameters']['children']['cars']['additionalParameters'] = {
58 | 'children' : {
59 | 'classics' : {name: 'Classics', type: 'item'},
60 | 'convertibles' : {name: 'Convertibles', type: 'item'},
61 | 'coupes' : {name: 'Coupes', type: 'item'},
62 | 'hatchbacks' : {name: 'Hatchbacks', type: 'item'},
63 | 'hybrids' : {name: 'Hybrids', type: 'item'},
64 | 'suvs' : {name: 'SUVs', type: 'item'},
65 | 'sedans' : {name: 'Sedans', type: 'item'},
66 | 'trucks' : {name: 'Trucks', type: 'item'}
67 | }
68 | }
69 |
70 | tree_data['rentals']['additionalParameters'] = {
71 | 'children' : {
72 | 'apartments-rentals' : {name: 'Apartments', type: 'item'},
73 | 'office-space-rentals' : {name: 'Office Space', type: 'item'},
74 | 'vacation-rentals' : {name: 'Vacation Rentals', type: 'item'}
75 | }
76 | }
77 | tree_data['real-estate']['additionalParameters'] = {
78 | 'children' : {
79 | 'apartments' : {name: 'Apartments', type: 'item'},
80 | 'villas' : {name: 'Villas', type: 'item'},
81 | 'plots' : {name: 'Plots', type: 'item'}
82 | }
83 | }
84 | tree_data['pets']['additionalParameters'] = {
85 | 'children' : {
86 | 'cats' : {name: 'Cats', type: 'item'},
87 | 'dogs' : {name: 'Dogs', type: 'item'},
88 | 'horses' : {name: 'Horses', type: 'item'},
89 | 'reptiles' : {name: 'Reptiles', type: 'item'}
90 | }
91 | }
92 |
93 | var treeDataSource = new DataSourceTree({data: tree_data});
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 | var tree_data_2 = {
106 | 'pictures' : {name: 'Pictures', type: 'folder', 'icon-class':'red'} ,
107 | 'music' : {name: 'Music', type: 'folder', 'icon-class':'orange'} ,
108 | 'video' : {name: 'Video', type: 'folder', 'icon-class':'blue'} ,
109 | 'documents' : {name: 'Documents', type: 'folder', 'icon-class':'green'} ,
110 | 'backup' : {name: 'Backup', type: 'folder'} ,
111 | 'readme' : {name: ' ReadMe.txt', type: 'item'},
112 | 'manual' : {name: ' Manual.html', type: 'item'}
113 | }
114 | tree_data_2['music']['additionalParameters'] = {
115 | 'children' : [
116 | {name: ' song1.ogg', type: 'item'},
117 | {name: ' song2.ogg', type: 'item'},
118 | {name: ' song3.ogg', type: 'item'},
119 | {name: ' song4.ogg', type: 'item'},
120 | {name: ' song5.ogg', type: 'item'}
121 | ]
122 | }
123 | tree_data_2['video']['additionalParameters'] = {
124 | 'children' : [
125 | {name: ' movie1.avi', type: 'item'},
126 | {name: ' movie2.avi', type: 'item'},
127 | {name: ' movie3.avi', type: 'item'},
128 | {name: ' movie4.avi', type: 'item'},
129 | {name: ' movie5.avi', type: 'item'}
130 | ]
131 | }
132 | tree_data_2['pictures']['additionalParameters'] = {
133 | 'children' : {
134 | 'wallpapers' : {name: 'Wallpapers', type: 'folder', 'icon-class':'pink'},
135 | 'camera' : {name: 'Camera', type: 'folder', 'icon-class':'pink'}
136 | }
137 | }
138 | tree_data_2['pictures']['additionalParameters']['children']['wallpapers']['additionalParameters'] = {
139 | 'children' : [
140 | {name: ' wallpaper1.jpg', type: 'item'},
141 | {name: ' wallpaper2.jpg', type: 'item'},
142 | {name: ' wallpaper3.jpg', type: 'item'},
143 | {name: ' wallpaper4.jpg', type: 'item'}
144 | ]
145 | }
146 | tree_data_2['pictures']['additionalParameters']['children']['camera']['additionalParameters'] = {
147 | 'children' : [
148 | {name: ' photo1.jpg', type: 'item'},
149 | {name: ' photo2.jpg', type: 'item'},
150 | {name: ' photo3.jpg', type: 'item'},
151 | {name: ' photo4.jpg', type: 'item'},
152 | {name: ' photo5.jpg', type: 'item'},
153 | {name: ' photo6.jpg', type: 'item'}
154 | ]
155 | }
156 |
157 |
158 | tree_data_2['documents']['additionalParameters'] = {
159 | 'children' : [
160 | {name: ' document1.pdf', type: 'item'},
161 | {name: ' document2.doc', type: 'item'},
162 | {name: ' document3.doc', type: 'item'},
163 | {name: ' document4.pdf', type: 'item'},
164 | {name: ' document5.doc', type: 'item'}
165 | ]
166 | }
167 |
168 | tree_data_2['backup']['additionalParameters'] = {
169 | 'children' : [
170 | {name: ' backup1.zip', type: 'item'},
171 | {name: ' backup2.zip', type: 'item'},
172 | {name: ' backup3.zip', type: 'item'},
173 | {name: ' backup4.zip', type: 'item'}
174 | ]
175 | }
176 | var treeDataSource2 = new DataSourceTree({data: tree_data_2});
--------------------------------------------------------------------------------
/ops/static/js/fuelux/fuelux.spinner.min.js:
--------------------------------------------------------------------------------
1 | (function(b,c){var a=function(e,d){this.$element=b(e);this.options=b.extend({},b.fn.spinner.defaults,d);this.$input=this.$element.find(".spinner-input");this.$element.on("keyup",this.$input,b.proxy(this.change,this));if(this.options.hold){this.$element.on("mousedown",".spinner-up",b.proxy(function(){this.startSpin(true)},this));this.$element.on("mouseup",".spinner-up, .spinner-down",b.proxy(this.stopSpin,this));this.$element.on("mouseout",".spinner-up, .spinner-down",b.proxy(this.stopSpin,this));this.$element.on("mousedown",".spinner-down",b.proxy(function(){this.startSpin(false)},this))}else{this.$element.on("click",".spinner-up",b.proxy(function(){this.step(true)},this));this.$element.on("click",".spinner-down",b.proxy(function(){this.step(false)},this))}this.switches={count:1,enabled:true};if(this.options.speed==="medium"){this.switches.speed=300}else{if(this.options.speed==="fast"){this.switches.speed=100}else{this.switches.speed=500}}this.lastValue=null;this.render();if(this.options.disabled){this.disable()}};a.prototype={constructor:a,render:function(){this.$input.val(this.options.value);this.$input.attr("maxlength",(this.options.max+"").split("").length)},change:function(){var d=this.$input.val();if(d/1){this.options.value=d/1}else{d=d.replace(/[^0-9]/g,"");this.$input.val(d);this.options.value=d/1}this.triggerChangedEvent()},stopSpin:function(){clearTimeout(this.switches.timeout);this.switches.count=1;this.triggerChangedEvent()},triggerChangedEvent:function(){var d=this.value();if(d===this.lastValue){return}this.lastValue=d;this.$element.trigger("changed",d);this.$element.trigger("change")},startSpin:function(d){if(!this.options.disabled){var e=this.switches.count;if(e===1){this.step(d);e=1}else{if(e<3){e=1.5}else{if(e<8){e=2.5}else{e=4}}}this.switches.timeout=setTimeout(b.proxy(function(){this.iterator(d)},this),this.switches.speed/e);this.switches.count++}},iterator:function(d){this.step(d);this.startSpin(d)},step:function(e){var g=this.options.value;var f=e?this.options.max:this.options.min;if((e?gf)){var d=g+(e?1:-1)*this.options.step;if(e?d>f:dLoading... ",cacheItems:true};a.fn.tree.Constructor=b})(window.jQuery);
--------------------------------------------------------------------------------
/ops/static/js/fuelux/fuelux.wizard.min.js:
--------------------------------------------------------------------------------
1 | (function(b,c){var a=function(f,e){var d;this.$element=b(f);this.options=b.extend({},b.fn.wizard.defaults,e);this.currentStep=1;this.numSteps=this.$element.find("li").length;this.$prevBtn=this.$element.find("button.btn-prev");this.$nextBtn=this.$element.find("button.btn-next");d=this.$nextBtn.children().detach();this.nextText=b.trim(this.$nextBtn.text());this.$nextBtn.append(d);this.$prevBtn.on("click",b.proxy(this.previous,this));this.$nextBtn.on("click",b.proxy(this.next,this));this.$element.on("click","li.complete",b.proxy(this.stepclicked,this));this.$stepContainer=this.$element.data("target")||"body";this.$stepContainer=b(this.$stepContainer)};a.prototype={constructor:a,setState:function(){var n=(this.currentStep>1);var o=(this.currentStep===1);var d=(this.currentStep===this.numSteps);this.$prevBtn.attr("disabled",(o===true||n===false));var h=this.$nextBtn.data();if(h&&h.last){this.lastText=h.last;if(typeof this.lastText!=="undefined"){var l=(d!==true)?this.nextText:this.lastText;var f=this.$nextBtn.children().detach();this.$nextBtn.text(l).append(f)}}var j=this.$element.find("li");j.removeClass("active").removeClass("complete");j.find("span.badge").removeClass("badge-info").removeClass("badge-success");var m="li:lt("+(this.currentStep-1)+")";var g=this.$element.find(m);g.addClass("complete");g.find("span.badge").addClass("badge-success");var e="li:eq("+(this.currentStep-1)+")";var k=this.$element.find(e);k.addClass("active");k.find("span.badge").addClass("badge-info");var i=k.data().target;this.$stepContainer.find(".step-pane").removeClass("active");b(i).addClass("active");this.$element.trigger("changed")},stepclicked:function(h){var d=b(h.currentTarget);var g=this.$element.find("li").index(d);var f=b.Event("stepclick");this.$element.trigger(f,{step:g+1});if(f.isDefaultPrevented()){return}this.currentStep=(g+1);this.setState()},previous:function(){var d=(this.currentStep>1);if(d){var f=b.Event("change");this.$element.trigger(f,{step:this.currentStep,direction:"previous"});if(f.isDefaultPrevented()){return}this.currentStep-=1;this.setState()}},next:function(){var g=(this.currentStep+1<=this.numSteps);var d=(this.currentStep===this.numSteps);if(g){var f=b.Event("change");this.$element.trigger(f,{step:this.currentStep,direction:"next"});if(f.isDefaultPrevented()){return}this.currentStep+=1;this.setState()}else{if(d){this.$element.trigger("finished")}}},selectedItem:function(d){return{step:this.currentStep}}};b.fn.wizard=function(e,g){var f;var d=this.each(function(){var j=b(this);var i=j.data("wizard");var h=typeof e==="object"&&e;if(!i){j.data("wizard",(i=new a(this,h)))}if(typeof e==="string"){f=i[e](g)}});return(f===c)?d:f};b.fn.wizard.defaults={};b.fn.wizard.Constructor=a;b(function(){b("body").on("mousedown.wizard.data-api",".wizard",function(){var d=b(this);if(d.data("wizard")){return}d.wizard(d.data())})})})(window.jQuery);
--------------------------------------------------------------------------------
/ops/static/js/jqGrid/i18n/grid.locale-en.js:
--------------------------------------------------------------------------------
1 | ;(function($){
2 | /**
3 | * jqGrid English Translation
4 | * Tony Tomov tony@trirand.com
5 | * http://trirand.com/blog/
6 | * Dual licensed under the MIT and GPL licenses:
7 | * http://www.opensource.org/licenses/mit-license.php
8 | * http://www.gnu.org/licenses/gpl.html
9 | **/
10 | $.jgrid = $.jgrid || {};
11 | $.extend($.jgrid,{
12 | defaults : {
13 | recordtext: "View {0} - {1} of {2}",
14 | emptyrecords: "No records to view",
15 | loadtext: "Loading...",
16 | pgtext : "Page {0} of {1}"
17 | },
18 | search : {
19 | caption: "Search...",
20 | Find: "Find",
21 | Reset: "Reset",
22 | odata: [{ oper:'eq', text:'equal'},{ oper:'ne', text:'not equal'},{ oper:'lt', text:'less'},{ oper:'le', text:'less or equal'},{ oper:'gt', text:'greater'},{ oper:'ge', text:'greater or equal'},{ oper:'bw', text:'begins with'},{ oper:'bn', text:'does not begin with'},{ oper:'in', text:'is in'},{ oper:'ni', text:'is not in'},{ oper:'ew', text:'ends with'},{ oper:'en', text:'does not end with'},{ oper:'cn', text:'contains'},{ oper:'nc', text:'does not contain'}],
23 | groupOps: [ { op: "AND", text: "all" }, { op: "OR", text: "any" } ]
24 | },
25 | edit : {
26 | addCaption: "添加记录",
27 | editCaption: "编辑记录",
28 | bSubmit: "提交",
29 | bCancel: "取消",
30 | bClose: "关闭",
31 | saveData: "Data has been changed! Save changes?",
32 | bYes : "Yes",
33 | bNo : "No",
34 | bExit : "Cancel",
35 | msg: {
36 | required:"Field is required",
37 | number:"Please, enter valid number",
38 | minValue:"value must be greater than or equal to ",
39 | maxValue:"value must be less than or equal to",
40 | email: "is not a valid e-mail",
41 | integer: "Please, enter valid integer value",
42 | date: "Please, enter valid date value",
43 | url: "is not a valid URL. Prefix required ('http://' or 'https://')",
44 | nodefined : " is not defined!",
45 | novalue : " return value is required!",
46 | customarray : "Custom function should return array!",
47 | customfcheck : "Custom function should be present in case of custom checking!"
48 |
49 | }
50 | },
51 | view : {
52 | caption: "查看",
53 | bClose: "关闭"
54 | },
55 | del : {
56 | caption: "删除",
57 | msg: "确实删除选定的行?",
58 | bSubmit: "确认",
59 | bCancel: "取消"
60 | },
61 | nav : {
62 | edittext: "",
63 | edittitle: "编辑",
64 | addtext:"",
65 | addtitle: "添加",
66 | deltext: "",
67 | deltitle: "删除",
68 | searchtext: "",
69 | searchtitle: "查找",
70 | refreshtext: "",
71 | refreshtitle: "刷新",
72 | alertcap: "Warning",
73 | alerttext: "请先选择行",
74 | viewtext: "",
75 | viewtitle: "查看"
76 | },
77 | col : {
78 | caption: "Select columns",
79 | bSubmit: "Ok",
80 | bCancel: "Cancel"
81 | },
82 | errors : {
83 | errcap : "Error",
84 | nourl : "No url is set",
85 | norecords: "No records to process",
86 | model : "Length of colNames <> colModel!"
87 | },
88 | formatter : {
89 | integer : {thousandsSeparator: ",", defaultValue: '0'},
90 | number : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, defaultValue: '0.00'},
91 | currency : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
92 | date : {
93 | dayNames: [
94 | "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat",
95 | "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
96 | ],
97 | monthNames: [
98 | "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
99 | "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
100 | ],
101 | AmPm : ["am","pm","AM","PM"],
102 | S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th';},
103 | srcformat: 'Y-m-d',
104 | newformat: 'n/j/Y',
105 | parseRe : /[Tt\\\/:_;.,\t\s-]/,
106 | masks : {
107 | // see http://php.net/manual/en/function.date.php for PHP format used in jqGrid
108 | // and see http://docs.jquery.com/UI/Datepicker/formatDate
109 | // and https://github.com/jquery/globalize#dates for alternative formats used frequently
110 | // one can find on https://github.com/jquery/globalize/tree/master/lib/cultures many
111 | // information about date, time, numbers and currency formats used in different countries
112 | // one should just convert the information in PHP format
113 | ISO8601Long:"Y-m-d H:i:s",
114 | ISO8601Short:"Y-m-d",
115 | // short date:
116 | // n - Numeric representation of a month, without leading zeros
117 | // j - Day of the month without leading zeros
118 | // Y - A full numeric representation of a year, 4 digits
119 | // example: 3/1/2012 which means 1 March 2012
120 | ShortDate: "n/j/Y", // in jQuery UI Datepicker: "M/d/yyyy"
121 | // long date:
122 | // l - A full textual representation of the day of the week
123 | // F - A full textual representation of a month
124 | // d - Day of the month, 2 digits with leading zeros
125 | // Y - A full numeric representation of a year, 4 digits
126 | LongDate: "l, F d, Y", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy"
127 | // long date with long time:
128 | // l - A full textual representation of the day of the week
129 | // F - A full textual representation of a month
130 | // d - Day of the month, 2 digits with leading zeros
131 | // Y - A full numeric representation of a year, 4 digits
132 | // g - 12-hour format of an hour without leading zeros
133 | // i - Minutes with leading zeros
134 | // s - Seconds, with leading zeros
135 | // A - Uppercase Ante meridiem and Post meridiem (AM or PM)
136 | FullDateTime: "l, F d, Y g:i:s A", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy h:mm:ss tt"
137 | // month day:
138 | // F - A full textual representation of a month
139 | // d - Day of the month, 2 digits with leading zeros
140 | MonthDay: "F d", // in jQuery UI Datepicker: "MMMM dd"
141 | // short time (without seconds)
142 | // g - 12-hour format of an hour without leading zeros
143 | // i - Minutes with leading zeros
144 | // A - Uppercase Ante meridiem and Post meridiem (AM or PM)
145 | ShortTime: "g:i A", // in jQuery UI Datepicker: "h:mm tt"
146 | // long time (with seconds)
147 | // g - 12-hour format of an hour without leading zeros
148 | // i - Minutes with leading zeros
149 | // s - Seconds, with leading zeros
150 | // A - Uppercase Ante meridiem and Post meridiem (AM or PM)
151 | LongTime: "g:i:s A", // in jQuery UI Datepicker: "h:mm:ss tt"
152 | SortableDateTime: "Y-m-d\\TH:i:s",
153 | UniversalSortableDateTime: "Y-m-d H:i:sO",
154 | // month with year
155 | // Y - A full numeric representation of a year, 4 digits
156 | // F - A full textual representation of a month
157 | YearMonth: "F, Y" // in jQuery UI Datepicker: "MMMM, yyyy"
158 | },
159 | reformatAfterEdit : false
160 | },
161 | baseLinkUrl: '',
162 | showAction: '',
163 | target: '',
164 | checkbox : {disabled:true},
165 | idName : 'id'
166 | }
167 | });
168 | })(jQuery);
169 |
--------------------------------------------------------------------------------
/ops/static/js/jqGrid/i18n/grid.locale-en.js.bak:
--------------------------------------------------------------------------------
1 | ;(function($){
2 | /**
3 | * jqGrid English Translation
4 | * Tony Tomov tony@trirand.com
5 | * http://trirand.com/blog/
6 | * Dual licensed under the MIT and GPL licenses:
7 | * http://www.opensource.org/licenses/mit-license.php
8 | * http://www.gnu.org/licenses/gpl.html
9 | **/
10 | $.jgrid = $.jgrid || {};
11 | $.extend($.jgrid,{
12 | defaults : {
13 | recordtext: "View {0} - {1} of {2}",
14 | emptyrecords: "No records to view",
15 | loadtext: "Loading...",
16 | pgtext : "Page {0} of {1}"
17 | },
18 | search : {
19 | caption: "Search...",
20 | Find: "Find",
21 | Reset: "Reset",
22 | odata: [{ oper:'eq', text:'equal'},{ oper:'ne', text:'not equal'},{ oper:'lt', text:'less'},{ oper:'le', text:'less or equal'},{ oper:'gt', text:'greater'},{ oper:'ge', text:'greater or equal'},{ oper:'bw', text:'begins with'},{ oper:'bn', text:'does not begin with'},{ oper:'in', text:'is in'},{ oper:'ni', text:'is not in'},{ oper:'ew', text:'ends with'},{ oper:'en', text:'does not end with'},{ oper:'cn', text:'contains'},{ oper:'nc', text:'does not contain'}],
23 | groupOps: [ { op: "AND", text: "all" }, { op: "OR", text: "any" } ]
24 | },
25 | edit : {
26 | addCaption: "Add Record",
27 | editCaption: "Edit Record",
28 | bSubmit: "Submit",
29 | bCancel: "Cancel",
30 | bClose: "Close",
31 | saveData: "Data has been changed! Save changes?",
32 | bYes : "Yes",
33 | bNo : "No",
34 | bExit : "Cancel",
35 | msg: {
36 | required:"Field is required",
37 | number:"Please, enter valid number",
38 | minValue:"value must be greater than or equal to ",
39 | maxValue:"value must be less than or equal to",
40 | email: "is not a valid e-mail",
41 | integer: "Please, enter valid integer value",
42 | date: "Please, enter valid date value",
43 | url: "is not a valid URL. Prefix required ('http://' or 'https://')",
44 | nodefined : " is not defined!",
45 | novalue : " return value is required!",
46 | customarray : "Custom function should return array!",
47 | customfcheck : "Custom function should be present in case of custom checking!"
48 |
49 | }
50 | },
51 | view : {
52 | caption: "View Record",
53 | bClose: "Close"
54 | },
55 | del : {
56 | caption: "Delete",
57 | msg: "Delete selected record(s)?",
58 | bSubmit: "Delete",
59 | bCancel: "Cancel"
60 | },
61 | nav : {
62 | edittext: "",
63 | edittitle: "Edit selected row",
64 | addtext:"",
65 | addtitle: "Add new row",
66 | deltext: "",
67 | deltitle: "Delete selected row",
68 | searchtext: "",
69 | searchtitle: "Find records",
70 | refreshtext: "",
71 | refreshtitle: "Reload Grid",
72 | alertcap: "Warning",
73 | alerttext: "Please, select row",
74 | viewtext: "",
75 | viewtitle: "View selected row"
76 | },
77 | col : {
78 | caption: "Select columns",
79 | bSubmit: "Ok",
80 | bCancel: "Cancel"
81 | },
82 | errors : {
83 | errcap : "Error",
84 | nourl : "No url is set",
85 | norecords: "No records to process",
86 | model : "Length of colNames <> colModel!"
87 | },
88 | formatter : {
89 | integer : {thousandsSeparator: ",", defaultValue: '0'},
90 | number : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, defaultValue: '0.00'},
91 | currency : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
92 | date : {
93 | dayNames: [
94 | "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat",
95 | "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
96 | ],
97 | monthNames: [
98 | "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
99 | "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
100 | ],
101 | AmPm : ["am","pm","AM","PM"],
102 | S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th';},
103 | srcformat: 'Y-m-d',
104 | newformat: 'n/j/Y',
105 | parseRe : /[Tt\\\/:_;.,\t\s-]/,
106 | masks : {
107 | // see http://php.net/manual/en/function.date.php for PHP format used in jqGrid
108 | // and see http://docs.jquery.com/UI/Datepicker/formatDate
109 | // and https://github.com/jquery/globalize#dates for alternative formats used frequently
110 | // one can find on https://github.com/jquery/globalize/tree/master/lib/cultures many
111 | // information about date, time, numbers and currency formats used in different countries
112 | // one should just convert the information in PHP format
113 | ISO8601Long:"Y-m-d H:i:s",
114 | ISO8601Short:"Y-m-d",
115 | // short date:
116 | // n - Numeric representation of a month, without leading zeros
117 | // j - Day of the month without leading zeros
118 | // Y - A full numeric representation of a year, 4 digits
119 | // example: 3/1/2012 which means 1 March 2012
120 | ShortDate: "n/j/Y", // in jQuery UI Datepicker: "M/d/yyyy"
121 | // long date:
122 | // l - A full textual representation of the day of the week
123 | // F - A full textual representation of a month
124 | // d - Day of the month, 2 digits with leading zeros
125 | // Y - A full numeric representation of a year, 4 digits
126 | LongDate: "l, F d, Y", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy"
127 | // long date with long time:
128 | // l - A full textual representation of the day of the week
129 | // F - A full textual representation of a month
130 | // d - Day of the month, 2 digits with leading zeros
131 | // Y - A full numeric representation of a year, 4 digits
132 | // g - 12-hour format of an hour without leading zeros
133 | // i - Minutes with leading zeros
134 | // s - Seconds, with leading zeros
135 | // A - Uppercase Ante meridiem and Post meridiem (AM or PM)
136 | FullDateTime: "l, F d, Y g:i:s A", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy h:mm:ss tt"
137 | // month day:
138 | // F - A full textual representation of a month
139 | // d - Day of the month, 2 digits with leading zeros
140 | MonthDay: "F d", // in jQuery UI Datepicker: "MMMM dd"
141 | // short time (without seconds)
142 | // g - 12-hour format of an hour without leading zeros
143 | // i - Minutes with leading zeros
144 | // A - Uppercase Ante meridiem and Post meridiem (AM or PM)
145 | ShortTime: "g:i A", // in jQuery UI Datepicker: "h:mm tt"
146 | // long time (with seconds)
147 | // g - 12-hour format of an hour without leading zeros
148 | // i - Minutes with leading zeros
149 | // s - Seconds, with leading zeros
150 | // A - Uppercase Ante meridiem and Post meridiem (AM or PM)
151 | LongTime: "g:i:s A", // in jQuery UI Datepicker: "h:mm:ss tt"
152 | SortableDateTime: "Y-m-d\\TH:i:s",
153 | UniversalSortableDateTime: "Y-m-d H:i:sO",
154 | // month with year
155 | // Y - A full numeric representation of a year, 4 digits
156 | // F - A full textual representation of a month
157 | YearMonth: "F, Y" // in jQuery UI Datepicker: "MMMM, yyyy"
158 | },
159 | reformatAfterEdit : false
160 | },
161 | baseLinkUrl: '',
162 | showAction: '',
163 | target: '',
164 | checkbox : {disabled:true},
165 | idName : 'id'
166 | }
167 | });
168 | })(jQuery);
169 |
--------------------------------------------------------------------------------
/ops/static/js/jquery.autosize.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | Autosize v1.17.7 - 2013-09-03
3 | Automatically adjust textarea height based on user input.
4 | (c) 2013 Jack Moore - http://www.jacklmoore.com/autosize
5 | license: http://www.opensource.org/licenses/mit-license.php
6 | */
7 | (function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(window.jQuery||window.$)})(function(e){var t,o={className:"autosizejs",append:"",callback:!1,resizeDelay:10},i='
',n=["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","textTransform","wordSpacing","textIndent"],s=e(i).data("autosize",!0)[0];s.style.lineHeight="99px","99px"===e(s).css("lineHeight")&&n.push("lineHeight"),s.style.lineHeight="",e.fn.autosize=function(i){return i=e.extend({},o,i||{}),s.parentNode!==document.body&&e(document.body).append(s),this.each(function(){function o(){var t,o;"getComputedStyle"in window?(t=window.getComputedStyle(h),o=h.getBoundingClientRect().width,e.each(["paddingLeft","paddingRight","borderLeftWidth","borderRightWidth"],function(e,i){o-=parseInt(t[i],10)}),s.style.width=o+"px"):s.style.width=Math.max(p.width(),0)+"px"}function a(){var a={};if(t=h,s.className=i.className,d=parseInt(p.css("maxHeight"),10),e.each(n,function(e,t){a[t]=p.css(t)}),e(s).css(a),o(),window.chrome){var r=h.style.width;h.style.width="0px",h.offsetWidth,h.style.width=r}}function r(){var e,n;t!==h?a():o(),s.value=h.value+i.append,s.style.overflowY=h.style.overflowY,n=parseInt(h.style.height,10),s.scrollTop=0,s.scrollTop=9e4,e=s.scrollTop,d&&e>d?(h.style.overflowY="scroll",e=d):(h.style.overflowY="hidden",c>e&&(e=c)),e+=f,n!==e&&(h.style.height=e+"px",w&&i.callback.call(h,h))}function l(){clearTimeout(u),u=setTimeout(function(){var e=p.width();e!==y&&(y=e,r())},parseInt(i.resizeDelay,10))}var d,c,u,h=this,p=e(h),f=0,w=e.isFunction(i.callback),z={height:h.style.height,overflow:h.style.overflow,overflowY:h.style.overflowY,wordWrap:h.style.wordWrap,resize:h.style.resize},y=p.width();p.data("autosize")||(p.data("autosize",!0),("border-box"===p.css("box-sizing")||"border-box"===p.css("-moz-box-sizing")||"border-box"===p.css("-webkit-box-sizing"))&&(f=p.outerHeight()-p.height()),c=Math.max(parseInt(p.css("minHeight"),10)-f||0,p.height()),p.css({overflow:"hidden",overflowY:"hidden",wordWrap:"break-word",resize:"none"===p.css("resize")||"vertical"===p.css("resize")?"none":"horizontal"}),"onpropertychange"in h?"oninput"in h?p.on("input.autosize keyup.autosize",r):p.on("propertychange.autosize",function(){"value"===event.propertyName&&r()}):p.on("input.autosize",r),i.resizeDelay!==!1&&e(window).on("resize.autosize",l),p.on("autosize.resize",r),p.on("autosize.resizeIncludeStyle",function(){t=null,r()}),p.on("autosize.destroy",function(){t=null,clearTimeout(u),e(window).off("resize",l),p.off("autosize").off(".autosize").css(z).removeData("autosize")}),r())})}});
--------------------------------------------------------------------------------
/ops/static/js/jquery.dataTables.bootstrap.js:
--------------------------------------------------------------------------------
1 | //http://datatables.net/plug-ins/pagination#bootstrap
2 | $.extend( true, $.fn.dataTable.defaults, {
3 | "sDom": "<'row'<'col-sm-6'l><'col-sm-6'f>r>t<'row'<'col-sm-6'i><'col-sm-6'p>>",
4 | "sPaginationType": "bootstrap",
5 | "oLanguage": {
6 | "sLengthMenu": "Display _MENU_ records"
7 | }
8 | } );
9 |
10 |
11 | /* API method to get paging information */
12 | $.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
13 | {
14 | return {
15 | "iStart": oSettings._iDisplayStart,
16 | "iEnd": oSettings.fnDisplayEnd(),
17 | "iLength": oSettings._iDisplayLength,
18 | "iTotal": oSettings.fnRecordsTotal(),
19 | "iFilteredTotal": oSettings.fnRecordsDisplay(),
20 | "iPage": Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
21 | "iTotalPages": Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
22 | };
23 | }
24 |
25 | /* Bootstrap style pagination control */
26 | $.extend( $.fn.dataTableExt.oPagination, {
27 | "bootstrap": {
28 | "fnInit": function( oSettings, nPaging, fnDraw ) {
29 | var oLang = oSettings.oLanguage.oPaginate;
30 | var fnClickHandler = function ( e ) {
31 | e.preventDefault();
32 | if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
33 | fnDraw( oSettings );
34 | }
35 | };
36 |
37 | $(nPaging).append(
38 | ''
42 | );
43 | var els = $('a', nPaging);
44 | $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
45 | $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
46 | },
47 |
48 | "fnUpdate": function ( oSettings, fnDraw ) {
49 | var iListLength = 5;
50 | var oPaging = oSettings.oInstance.fnPagingInfo();
51 | var an = oSettings.aanFeatures.p;
52 | var i, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
53 |
54 | if ( oPaging.iTotalPages < iListLength) {
55 | iStart = 1;
56 | iEnd = oPaging.iTotalPages;
57 | }
58 | else if ( oPaging.iPage <= iHalf ) {
59 | iStart = 1;
60 | iEnd = iListLength;
61 | } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
62 | iStart = oPaging.iTotalPages - iListLength + 1;
63 | iEnd = oPaging.iTotalPages;
64 | } else {
65 | iStart = oPaging.iPage - iHalf + 1;
66 | iEnd = iStart + iListLength - 1;
67 | }
68 |
69 | for ( i=0, iLen=an.length ; i
'+j+' ')
77 | .insertBefore( $('li:last', an[i])[0] )
78 | .bind('click', function (e) {
79 | e.preventDefault();
80 | oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
81 | fnDraw( oSettings );
82 | } );
83 | }
84 |
85 | // Add / remove disabled classes from the static elements
86 | if ( oPaging.iPage === 0 ) {
87 | $('li:first', an[i]).addClass('disabled');
88 | } else {
89 | $('li:first', an[i]).removeClass('disabled');
90 | }
91 |
92 | if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
93 | $('li:last', an[i]).addClass('disabled');
94 | } else {
95 | $('li:last', an[i]).removeClass('disabled');
96 | }
97 | }
98 | }
99 | }
100 | } );
--------------------------------------------------------------------------------
/ops/static/js/jquery.easy-pie-chart.min.js:
--------------------------------------------------------------------------------
1 | (function(a){a.easyPieChart=function(d,l){var f,g,i,j,c,k,e,b,h=this;this.el=d;this.$el=a(d);this.$el.data("easyPieChart",this);this.init=function(){var n,m;h.options=a.extend({},a.easyPieChart.defaultOptions,l);n=parseInt(h.$el.data("percent"),10);h.percentage=0;h.canvas=a(" ").get(0);h.$el.append(h.canvas);if(typeof G_vmlCanvasManager!=="undefined"&&G_vmlCanvasManager!==null){G_vmlCanvasManager.initElement(h.canvas)}h.ctx=h.canvas.getContext("2d");if(window.devicePixelRatio>1){m=window.devicePixelRatio;a(h.canvas).css({width:h.options.size,height:h.options.size});h.canvas.width*=m;h.canvas.height*=m;h.ctx.scale(m,m)}h.ctx.translate(h.options.size/2,h.options.size/2);h.ctx.rotate(h.options.rotate*Math.PI/180);h.$el.addClass("easyPieChart");h.$el.css({width:h.options.size,height:h.options.size,lineHeight:""+h.options.size+"px"});h.update(n);return h};this.update=function(m){m=parseFloat(m)||0;if(h.options.animate===false){i(m)}else{if(h.options.delay){g(h.percentage,0);setTimeout(function(){return g(h.percentage,m)},h.options.delay)}else{g(h.percentage,m)}}return h};e=function(){var n,o,m;h.ctx.fillStyle=h.options.scaleColor;h.ctx.lineWidth=1;m=[];for(n=o=0;o<=24;n=++o){m.push(f(n))}return m};f=function(m){var n;n=m%6===0?0:h.options.size*0.017;h.ctx.save();h.ctx.rotate(m*Math.PI/12);h.ctx.fillRect(h.options.size/2-n,0,-h.options.size*0.05+n,1);h.ctx.restore()};b=function(){var m;m=h.options.size/2-h.options.lineWidth/2;if(h.options.scaleColor!==false){m-=h.options.size*0.08}h.ctx.beginPath();h.ctx.arc(0,0,m,0,Math.PI*2,true);h.ctx.closePath();h.ctx.strokeStyle=h.options.trackColor;h.ctx.lineWidth=h.options.lineWidth;h.ctx.stroke()};k=function(){if(h.options.scaleColor!==false){e()}if(h.options.trackColor!==false){b()}};i=function(m){var n;k();h.ctx.strokeStyle=a.isFunction(h.options.barColor)?h.options.barColor(m):h.options.barColor;h.ctx.lineCap=h.options.lineCap;h.ctx.lineWidth=h.options.lineWidth;n=h.options.size/2-h.options.lineWidth/2;if(h.options.scaleColor!==false){n-=h.options.size*0.08}h.ctx.save();h.ctx.rotate(-Math.PI/2);h.ctx.beginPath();h.ctx.arc(0,0,n,0,Math.PI*2*m/100,false);h.ctx.stroke();h.ctx.restore()};c=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(m){return window.setTimeout(m,1000/60)}})();g=function(p,o){var n,m;h.options.onStart.call(h);h.percentage=o;Date.now||(Date.now=function(){return +(new Date)});m=Date.now();n=function(){var q,r;r=Math.min(Date.now()-m,h.options.animate);h.ctx.clearRect(-h.options.size/2,-h.options.size/2,h.options.size,h.options.size);k.call(h);q=[j(r,p,o-p,h.options.animate)];h.options.onStep.call(h,q);i.call(h,q);if(r>=h.options.animate){return h.options.onStop.call(h,q,o)}else{return c(n)}};c(n)};j=function(o,n,r,p){var m,q;m=function(s){return Math.pow(s,2)};q=function(s){if(s<1){return m(s)}else{return 2-m((s/2)*-2+2)}};o/=p/2;return r/2*q(o)+n};return this.init()};a.easyPieChart.defaultOptions={barColor:"#ef1e25",trackColor:"#f2f2f2",scaleColor:"#dfe0e0",lineCap:"round",rotate:0,size:110,lineWidth:3,animate:false,delay:false,onStart:a.noop,onStop:a.noop,onStep:a.noop};a.fn.easyPieChart=function(b){return a.each(this,function(d,e){var c,f;c=a(e);if(!c.data("easyPieChart")){f=a.extend({},b,c.data());return c.data("easyPieChart",new a.easyPieChart(e,f))}})};return void 0})(jQuery);
--------------------------------------------------------------------------------
/ops/static/js/jquery.gritter.min.js:
--------------------------------------------------------------------------------
1 | (function(b){b.gritter={};b.gritter.options={position:"",class_name:"",fade_in_speed:"medium",fade_out_speed:1000,time:6000};b.gritter.add=function(f){try{return a.add(f||{})}catch(d){var c="Gritter Error: "+d;(typeof(console)!="undefined"&&console.error)?console.error(c,f):alert(c)}};b.gritter.remove=function(d,c){a.removeSpecific(d,c||{})};b.gritter.removeAll=function(c){a.stop(c||{})};var a={position:"",fade_in_speed:"",fade_out_speed:"",time:"",_custom_timer:0,_item_count:0,_is_setup:0,_tpl_close:'
',_tpl_title:'[[title]] ',_tpl_item:'',_tpl_wrap:'
',add:function(g){if(typeof(g)=="string"){g={text:g}}if(g.text===null){throw'You must supply "text" parameter.'}if(!this._is_setup){this._runSetup()}var k=g.title,n=g.text,e=g.image||"",l=g.sticky||false,m=g.class_name||b.gritter.options.class_name,j=b.gritter.options.position,d=g.time||"";this._verifyWrapper();this._item_count++;var f=this._item_count,i=this._tpl_item;b(["before_open","after_open","before_close","after_close"]).each(function(p,q){a["_"+q+"_"+f]=(b.isFunction(g[q]))?g[q]:function(){}});this._custom_timer=0;if(d){this._custom_timer=d}var c=(e!="")?' ':"",h=(e!="")?"gritter-with-image":"gritter-without-image";if(k){k=this._str_replace("[[title]]",k,this._tpl_title)}else{k=""}i=this._str_replace(["[[title]]","[[text]]","[[close]]","[[image]]","[[number]]","[[class_name]]","[[item_class]]"],[k,n,this._tpl_close,c,this._item_count,h,m],i);if(this["_before_open_"+f]()===false){return false}b("#gritter-notice-wrapper").addClass(j).append(i);var o=b("#gritter-item-"+this._item_count);o.fadeIn(this.fade_in_speed,function(){a["_after_open_"+f](b(this))});if(!l){this._setFadeTimer(o,f)}b(o).bind("mouseenter mouseleave",function(p){if(p.type=="mouseenter"){if(!l){a._restoreItemIfFading(b(this),f)}}else{if(!l){a._setFadeTimer(b(this),f)}}a._hoverState(b(this),p.type)});b(o).find(".gritter-close").click(function(){a.removeSpecific(f,{},null,true)});return f},_countRemoveWrapper:function(c,d,f){d.remove();this["_after_close_"+c](d,f);if(b(".gritter-item-wrapper").length==0){b("#gritter-notice-wrapper").remove()}},_fade:function(g,d,j,f){var j=j||{},i=(typeof(j.fade)!="undefined")?j.fade:true,c=j.speed||this.fade_out_speed,h=f;this["_before_close_"+d](g,h);if(f){g.unbind("mouseenter mouseleave")}if(i){g.animate({opacity:0},c,function(){g.animate({height:0},300,function(){a._countRemoveWrapper(d,g,h)})})}else{this._countRemoveWrapper(d,g)}},_hoverState:function(d,c){if(c=="mouseenter"){d.addClass("hover");d.find(".gritter-close").show()}else{d.removeClass("hover");d.find(".gritter-close").hide()}},removeSpecific:function(c,g,f,d){if(!f){var f=b("#gritter-item-"+c)}this._fade(f,c,g||{},d)},_restoreItemIfFading:function(d,c){clearTimeout(this["_int_id_"+c]);d.stop().css({opacity:"",height:""})},_runSetup:function(){for(opt in b.gritter.options){this[opt]=b.gritter.options[opt]}this._is_setup=1},_setFadeTimer:function(f,d){var c=(this._custom_timer)?this._custom_timer:this.time;this["_int_id_"+d]=setTimeout(function(){a._fade(f,d)},c)},stop:function(e){var c=(b.isFunction(e.before_close))?e.before_close:function(){};var f=(b.isFunction(e.after_close))?e.after_close:function(){};var d=b("#gritter-notice-wrapper");c(d);d.fadeOut(function(){b(this).remove();f()})},_str_replace:function(v,e,o,n){var k=0,h=0,t="",m="",g=0,q=0,l=[].concat(v),c=[].concat(e),u=o,d=c instanceof Array,p=u instanceof Array;u=[].concat(u);if(n){this.window[n]=0}for(k=0,g=u.length;k","/":"?","\\":"|"}};function a(d){if(typeof d.data=="undefined"){return}if(typeof d.data==="string"){d.data={keys:d.data}}if(!d.data||!d.data.keys||typeof d.data.keys!=="string"){return}var c=d.handler,e=d.data.keys.toLowerCase().split(" "),f=["text","password","number","email","url","range","date","month","week","time","datetime","datetime-local","search","color","tel"];d.handler=function(k){if(this!==k.target&&(/textarea|select/i.test(k.target.nodeName)||b.inArray(k.target.type,f)>-1)){return}var h=b.hotkeys.specialKeys[k.keyCode],m=(k.type==="keydown"||k.type==="keypress")&&String.fromCharCode(k.which).toLowerCase();modif="",possible={};if(k.altKey&&h!=="alt"){modif+="alt+"}if(k.ctrlKey&&h!=="ctrl"){modif+="ctrl+"}if(k.metaKey&&!k.ctrlKey&&h!=="meta"){modif+="meta+"}if(k.shiftKey&&h!=="shift"){modif+="shift+"}if(h){possible[modif+h]=true}if(m){possible[modif+m]=true;possible[modif+b.hotkeys.shiftNums[m]]=true;if(modif==="shift+"){possible[b.hotkeys.shiftNums[m]]=true}}for(var j=0,g=e.length;j').appendTo("body").attr({id:opts.boxId,'class':opts.boxClass}).css({'position':'absolute'}).hide();if($.fn.bgiframe){$('#'+opts.boxId).bgiframe();}}
2 | var inputlimiterKeyup=function(e){var $this=$(this),count=counter($this.val());if(!opts.allowExceed&&count>opts.limit){$this.val(truncater($this.val()));}
3 | if(opts.boxAttach){$('#'+opts.boxId).css({'width':$this.outerWidth()-($('#'+opts.boxId).outerWidth()-$('#'+opts.boxId).width())+'px','left':$this.offset().left+'px','top':($this.offset().top+$this.outerHeight())-1+'px','z-index':2000});}
4 | var charsRemaining=(opts.limit-count>0?opts.limit-count:0),remText=opts.remTextFilter(opts,charsRemaining),limitText=opts.limitTextFilter(opts);if(opts.limitTextShow){$('#'+opts.boxId).html(remText+' '+limitText);var textWidth=$(" ").appendTo("body").attr({id:'19cc9195583bfae1fad88e19d443be7a','class':opts.boxClass}).html(remText+' '+limitText).innerWidth();$("#19cc9195583bfae1fad88e19d443be7a").remove();if(textWidth>$('#'+opts.boxId).innerWidth()){$('#'+opts.boxId).html(remText+' '+limitText);}
5 | $('#'+opts.boxId).show();}else{$('#'+opts.boxId).html(remText).show();}},inputlimiterKeypress=function(e){var count=counter($(this).val());if(!opts.allowExceed&&count>opts.limit){var modifierKeyPressed=e.ctrlKey||e.altKey||e.metaKey;if(!modifierKeyPressed&&(e.which>=32&&e.which<=122)&&this.selectionStart===this.selectionEnd){return false;}}},inputlimiterBlur=function(){var $this=$(this);count=counter($this.val());if(!opts.allowExceed&&count>opts.limit){$this.val(truncater($this.val()));}
6 | if(opts.boxAttach){$('#'+opts.boxId).fadeOut('fast');}else if(opts.remTextHideOnBlur){var limitText=opts.limitText;limitText=limitText.replace(/\%n/g,opts.limit);limitText=limitText.replace(/\%s/g,(opts.limit===1?'':'s'));$('#'+opts.boxId).html(limitText);}},counter=function(value){if(opts.limitBy.toLowerCase()==="words"){return(value.length>0?$.trim(value).replace(/\ +(?= )/g,'').split(' ').length:0);}
7 | var count=value.length,newlines=value.match(/\n/g);if(newlines&&opts.lineReturnCount>1){count+=newlines.length*(opts.lineReturnCount-1);}
8 | return count;},truncater=function(value){if(opts.limitBy.toLowerCase()==="words"){return $.trim(value).replace(/\ +(?= )/g,'').split(' ').splice(0,opts.limit).join(' ')+' ';}
9 | return value.substring(0,opts.limit);};$(this).each(function(i){var $this=$(this);if((!options||!options.limit)&&opts.useMaxlength&&parseInt($this.attr('maxlength'))>0&&parseInt($this.attr('maxlength'))!=opts.limit){$this.inputlimiter($.extend({},opts,{limit:parseInt($this.attr('maxlength'))}));}else{if(!opts.allowExceed&&opts.useMaxlength&&opts.limitBy.toLowerCase()==="characters"){$this.attr('maxlength',opts.limit);}
10 | $this.unbind('.inputlimiter');$this.bind('keyup.inputlimiter',inputlimiterKeyup);$this.bind('keypress.inputlimiter',inputlimiterKeypress);$this.bind('blur.inputlimiter',inputlimiterBlur);}});};$.fn.inputlimiter.remtextfilter=function(opts,charsRemaining){var remText=opts.remText;if(charsRemaining===0&&opts.remFullText!==null){remText=opts.remFullText;}
11 | remText=remText.replace(/\%n/g,charsRemaining);remText=remText.replace(/\%s/g,(opts.zeroPlural?(charsRemaining===1?'':'s'):(charsRemaining<=1?'':'s')));return remText;};$.fn.inputlimiter.limittextfilter=function(opts){var limitText=opts.limitText;limitText=limitText.replace(/\%n/g,opts.limit);limitText=limitText.replace(/\%s/g,(opts.limit<=1?'':'s'));return limitText;};$.fn.inputlimiter.defaults={limit:255,boxAttach:true,boxId:'limiterBox',boxClass:'limiterBox',remText:'%n character%s remaining.',remTextFilter:$.fn.inputlimiter.remtextfilter,remTextHideOnBlur:true,remFullText:null,limitTextShow:true,limitText:'Field limited to %n character%s.',limitTextFilter:$.fn.inputlimiter.limittextfilter,zeroPlural:true,allowExceed:false,useMaxlength:true,limitBy:'characters',lineReturnCount:1};})(jQuery);
--------------------------------------------------------------------------------
/ops/static/js/jquery.knob.min.js:
--------------------------------------------------------------------------------
1 | /*!jQuery Knob*/
2 | /**
3 | * Downward compatible, touchable dial
4 | *
5 | * Version: 1.2.0 (15/07/2012)
6 | * Requires: jQuery v1.7+
7 | *
8 | * Copyright (c) 2012 Anthony Terrien
9 | * Under MIT and GPL licenses:
10 | * http://www.opensource.org/licenses/mit-license.php
11 | * http://www.gnu.org/licenses/gpl.html
12 | *
13 | * Thanks to vor, eskimoblood, spiffistan, FabrizioC
14 | */
15 | (function($){"use strict";var k={},max=Math.max,min=Math.min;k.c={};k.c.d=$(document);k.c.t=function(e){return e.originalEvent.touches.length-1};k.o=function(){var s=this;this.o=null;this.$=null;this.i=null;this.g=null;this.v=null;this.cv=null;this.x=0;this.y=0;this.$c=null;this.c=null;this.t=0;this.isInit=false;this.fgColor=null;this.pColor=null;this.dH=null;this.cH=null;this.eH=null;this.rH=null;this.usesExcanvas=typeof G_vmlCanvasManager!=="undefined";this.run=function(){var cf=function(e,conf){var k;for(k in conf){s.o[k]=conf[k]}s.init();s._configure()._draw()};if(this.$.data("kontroled"))return;this.$.data("kontroled",true);this.extend();this.o=$.extend({min:this.$.data("min")||0,max:this.$.data("max")||100,stopper:true,readOnly:this.$.data("readonly"),cursor:this.$.data("cursor")===true&&30||this.$.data("cursor")||0,thickness:this.$.data("thickness")||.35,width:this.$.data("width")||200,height:this.$.data("height")||200,displayInput:this.$.data("displayinput")==null||this.$.data("displayinput"),displayPrevious:this.$.data("displayprevious"),fgColor:this.$.data("fgcolor")||"#87CEEB",inline:false,draw:null,change:null,cancel:null,release:null},this.o);if(this.$.is("fieldset")){this.v={};this.i=this.$.find("input");this.i.each(function(k){var $this=$(this);s.i[k]=$this;s.v[k]=$this.val();$this.bind("change",function(){var val={};val[k]=$this.val();s.val(val)})});this.$.find("legend").remove()}else{this.i=this.$;this.v=this.$.val();this.v==""&&(this.v=this.o.min);this.$.bind("change",function(){s.val(s.$.val())})}!this.o.displayInput&&this.$.hide();this.$c=$(document.createElement("canvas")).attr({width:this.o.width,height:this.o.height});this.$.wrap($('
')).before(this.$c);if(typeof G_vmlCanvasManager!=="undefined"){G_vmlCanvasManager.initElement(this.$c[0])}if(this.usesExcanvas){G_vmlCanvasManager.initElement(this.$c[0])}this.c=this.$c[0].getContext("2d");if(this.v instanceof Object){this.cv={};this.copy(this.v,this.cv)}else{this.cv=this.v}this.$.bind("configure",cf).parent().bind("configure",cf);this._listen()._configure()._xy().init();this.isInit=true;this._draw();return this};this._draw=function(){var d=true;s.g=s.c;s.clear();s.dH&&(d=s.dH());d!==false&&s.draw()};this._touch=function(e){var touchMove=function(e){var v=s.xy2val(e.originalEvent.touches[s.t].pageX,e.originalEvent.touches[s.t].pageY);if(v==s.cv)return;if(s.cH&&s.cH(v)===false)return;s.change(v);s._draw()};this.t=k.c.t(e);touchMove(e);k.c.d.bind("touchmove.k",touchMove).bind("touchend.k",function(){k.c.d.unbind("touchmove.k touchend.k");if(s.rH&&s.rH(s.cv)===false)return;s.val(s.cv)});return this};this._mouse=function(e){var mouseMove=function(e){var v=s.xy2val(e.pageX,e.pageY);if(v==s.cv)return;if(s.cH&&s.cH(v)===false)return;s.change(v);s._draw()};mouseMove(e);k.c.d.bind("mousemove.k",mouseMove).bind("keyup.k",function(e){if(e.keyCode===27){k.c.d.unbind("mouseup.k mousemove.k keyup.k");if(s.eH&&s.eH()===false)return;s.cancel()}}).bind("mouseup.k",function(e){k.c.d.unbind("mousemove.k mouseup.k keyup.k");if(s.rH&&s.rH(s.cv)===false)return;s.val(s.cv)});return this};this._xy=function(){var o=this.$c.offset();this.x=o.left;this.y=o.top;return this};this._listen=function(){if(!this.o.readOnly){this.$c.bind("mousedown",function(e){e.preventDefault();s._xy()._mouse(e)}).bind("touchstart",function(e){e.preventDefault();s._xy()._touch(e)});this.listen()}else{this.$.attr("readonly","readonly")}return this};this._configure=function(){if(this.o.draw)this.dH=this.o.draw;if(this.o.change)this.cH=this.o.change;if(this.o.cancel)this.eH=this.o.cancel;if(this.o.release)this.rH=this.o.release;if(this.o.displayPrevious){this.pColor=this.h2rgba(this.o.fgColor,"0.4");this.fgColor=this.h2rgba(this.o.fgColor,"0.6")}else{this.fgColor=this.o.fgColor}return this};this._clear=function(){this.$c[0].width=this.$c[0].width};this.listen=function(){};this.extend=function(){};this.init=function(){};this.change=function(v){};this.val=function(v){};this.xy2val=function(x,y){};this.draw=function(){};this.clear=function(){this._clear()};this.h2rgba=function(h,a){var rgb;h=h.substring(1,7);rgb=[parseInt(h.substring(0,2),16),parseInt(h.substring(2,4),16),parseInt(h.substring(4,6),16)];return"rgba("+rgb[0]+","+rgb[1]+","+rgb[2]+","+a+")"};this.copy=function(f,t){for(var i in f){t[i]=f[i]}}};k.Dial=function(){k.o.call(this);this.startAngle=null;this.xy=null;this.radius=null;this.lineWidth=null;this.cursorExt=null;this.w2=null;this.PI2=2*Math.PI;this.extend=function(){this.o=$.extend({bgColor:this.$.data("bgcolor")||"#EEEEEE",angleOffset:this.$.data("angleoffset")||0,angleArc:this.$.data("anglearc")||360,inline:true},this.o)};this.val=function(v){if(null!=v){this.cv=this.o.stopper?max(min(v,this.o.max),this.o.min):v;this.v=this.cv;this.$.val(this.v);this._draw()}else{return this.v}};this.xy2val=function(x,y){var a,ret;a=Math.atan2(x-(this.x+this.w2),-(y-this.y-this.w2))-this.angleOffset;if(this.angleArc!=this.PI2&&a<0&&a>-.5){a=0}else if(a<0){a+=this.PI2}ret=~~(.5+a*(this.o.max-this.o.min)/this.angleArc)+this.o.min;this.o.stopper&&(ret=max(min(ret,this.o.max),this.o.min));return ret};this.listen=function(){var s=this,mw=function(e){e.preventDefault();var ori=e.originalEvent,deltaX=ori.detail||ori.wheelDeltaX,deltaY=ori.detail||ori.wheelDeltaY,v=parseInt(s.$.val()||s.o.min)+(deltaX>0||deltaY>0?1:deltaX<0||deltaY<0?-1:0);if(s.cH&&s.cH(v)===false)return;s.val(v)},kval,to,m=1,kv={37:-1,38:1,39:1,40:-1};this.$.bind("keydown",function(e){var kc=e.keyCode;if(kc>=96&&kc<=105){kc=e.keyCode=kc-48}kval=parseInt(String.fromCharCode(kc));if(isNaN(kval)){kc!==13&&kc!==8&&kc!==9&&kc!==189&&e.preventDefault();if($.inArray(kc,[37,38,39,40])>-1){e.preventDefault();var v=parseInt(s.$.val())+kv[kc]*m;s.o.stopper&&(v=max(min(v,s.o.max),s.o.min));s.change(v);s._draw();to=window.setTimeout(function(){m*=2},30)}}}).bind("keyup",function(e){if(isNaN(kval)){if(to){window.clearTimeout(to);to=null;m=1;s.val(s.$.val())}}else{s.$.val()>s.o.max&&s.$.val(s.o.max)||s.$.val()this.o.max)this.v=this.o.min;this.$.val(this.v);this.w2=this.o.width/2;this.cursorExt=this.o.cursor/100;this.xy=this.w2;this.lineWidth=this.xy*this.o.thickness;this.radius=this.xy-this.lineWidth/2;this.o.angleOffset&&(this.o.angleOffset=isNaN(this.o.angleOffset)?0:this.o.angleOffset);this.o.angleArc&&(this.o.angleArc=isNaN(this.o.angleArc)?this.PI2:this.o.angleArc);this.angleOffset=this.o.angleOffset*Math.PI/180;this.angleArc=this.o.angleArc*Math.PI/180;this.startAngle=1.5*Math.PI+this.angleOffset;this.endAngle=1.5*Math.PI+this.angleOffset+this.angleArc;var s=max(String(Math.abs(this.o.max)).length,String(Math.abs(this.o.min)).length,2)+2;this.o.displayInput&&this.i.css({width:(this.o.width/2+4>>0)+"px",height:(this.o.width/3>>0)+"px",position:"absolute","vertical-align":"middle","margin-top":(this.o.width/3>>0)+"px","margin-left":"-"+(this.o.width*3/4+2>>0)+"px",border:0,background:"none",font:"bold "+(this.o.width/s>>0)+"px Arial","text-align":"center",color:this.o.fgColor,padding:"0px","-webkit-appearance":"none"})||this.i.css({width:"0px",visibility:"hidden"})};this.change=function(v){this.cv=v;this.$.val(v)};this.angle=function(v){return(v-this.o.min)*this.angleArc/(this.o.max-this.o.min)};this.draw=function(){var c=this.g,a=this.angle(this.cv),sat=this.startAngle,eat=sat+a,sa,ea,r=1;c.lineWidth=this.lineWidth;this.o.cursor&&(sat=eat-this.cursorExt)&&(eat=eat+this.cursorExt);c.beginPath();c.strokeStyle=this.o.bgColor;c.arc(this.xy,this.xy,this.radius,this.endAngle,this.startAngle,true);c.stroke();if(this.o.displayPrevious){ea=this.startAngle+this.angle(this.v);sa=this.startAngle;this.o.cursor&&(sa=ea-this.cursorExt)&&(ea=ea+this.cursorExt);c.beginPath();c.strokeStyle=this.pColor;c.arc(this.xy,this.xy,this.radius,sa,ea,false);c.stroke();r=this.cv==this.v}c.beginPath();c.strokeStyle=r?this.o.fgColor:this.fgColor;c.arc(this.xy,this.xy,this.radius,sat,eat,false);c.stroke()};this.cancel=function(){this.val(this.v)}};$.fn.dial=$.fn.knob=function(o){return this.each(function(){var d=new k.Dial;d.o=o;d.$=$(this);d.run()}).parent()}})(jQuery);
--------------------------------------------------------------------------------
/ops/static/js/jquery.maskedinput.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | Masked Input plugin for jQuery
3 | Copyright (c) 2007-2013 Josh Bush (digitalbush.com)
4 | Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)
5 | Version: 1.3.1
6 | */
7 | (function(e){function t(){var e=document.createElement("input"),t="onpaste";return e.setAttribute(t,""),"function"==typeof e[t]?"paste":"input"}var n,a=t()+".mask",r=navigator.userAgent,i=/iphone/i.test(r),o=/android/i.test(r);e.mask={definitions:{9:"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"},dataName:"rawMaskFn",placeholder:"_"},e.fn.extend({caret:function(e,t){var n;if(0!==this.length&&!this.is(":hidden"))return"number"==typeof e?(t="number"==typeof t?t:e,this.each(function(){this.setSelectionRange?this.setSelectionRange(e,t):this.createTextRange&&(n=this.createTextRange(),n.collapse(!0),n.moveEnd("character",t),n.moveStart("character",e),n.select())})):(this[0].setSelectionRange?(e=this[0].selectionStart,t=this[0].selectionEnd):document.selection&&document.selection.createRange&&(n=document.selection.createRange(),e=0-n.duplicate().moveStart("character",-1e5),t=e+n.text.length),{begin:e,end:t})},unmask:function(){return this.trigger("unmask")},mask:function(t,r){var c,l,s,u,f,h;return!t&&this.length>0?(c=e(this[0]),c.data(e.mask.dataName)()):(r=e.extend({placeholder:e.mask.placeholder,completed:null},r),l=e.mask.definitions,s=[],u=h=t.length,f=null,e.each(t.split(""),function(e,t){"?"==t?(h--,u=e):l[t]?(s.push(RegExp(l[t])),null===f&&(f=s.length-1)):s.push(null)}),this.trigger("unmask").each(function(){function c(e){for(;h>++e&&!s[e];);return e}function d(e){for(;--e>=0&&!s[e];);return e}function m(e,t){var n,a;if(!(0>e)){for(n=e,a=c(t);h>n;n++)if(s[n]){if(!(h>a&&s[n].test(R[a])))break;R[n]=R[a],R[a]=r.placeholder,a=c(a)}b(),x.caret(Math.max(f,e))}}function p(e){var t,n,a,i;for(t=e,n=r.placeholder;h>t;t++)if(s[t]){if(a=c(t),i=R[t],R[t]=n,!(h>a&&s[a].test(i)))break;n=i}}function g(e){var t,n,a,r=e.which;8===r||46===r||i&&127===r?(t=x.caret(),n=t.begin,a=t.end,0===a-n&&(n=46!==r?d(n):a=c(n-1),a=46===r?c(a):a),k(n,a),m(n,a-1),e.preventDefault()):27==r&&(x.val(S),x.caret(0,y()),e.preventDefault())}function v(t){var n,a,i,l=t.which,u=x.caret();t.ctrlKey||t.altKey||t.metaKey||32>l||l&&(0!==u.end-u.begin&&(k(u.begin,u.end),m(u.begin,u.end-1)),n=c(u.begin-1),h>n&&(a=String.fromCharCode(l),s[n].test(a)&&(p(n),R[n]=a,b(),i=c(n),o?setTimeout(e.proxy(e.fn.caret,x,i),0):x.caret(i),r.completed&&i>=h&&r.completed.call(x))),t.preventDefault())}function k(e,t){var n;for(n=e;t>n&&h>n;n++)s[n]&&(R[n]=r.placeholder)}function b(){x.val(R.join(""))}function y(e){var t,n,a=x.val(),i=-1;for(t=0,pos=0;h>t;t++)if(s[t]){for(R[t]=r.placeholder;pos++a.length)break}else R[t]===a.charAt(pos)&&t!==u&&(pos++,i=t);return e?b():u>i+1?(x.val(""),k(0,h)):(b(),x.val(x.val().substring(0,i+1))),u?t:f}var x=e(this),R=e.map(t.split(""),function(e){return"?"!=e?l[e]?r.placeholder:e:void 0}),S=x.val();x.data(e.mask.dataName,function(){return e.map(R,function(e,t){return s[t]&&e!=r.placeholder?e:null}).join("")}),x.attr("readonly")||x.one("unmask",function(){x.unbind(".mask").removeData(e.mask.dataName)}).bind("focus.mask",function(){clearTimeout(n);var e;S=x.val(),e=y(),n=setTimeout(function(){b(),e==t.length?x.caret(0,e):x.caret(e)},10)}).bind("blur.mask",function(){y(),x.val()!=S&&x.change()}).bind("keydown.mask",g).bind("keypress.mask",v).bind(a,function(){setTimeout(function(){var e=y(!0);x.caret(e),r.completed&&e==x.val().length&&r.completed.call(x)},0)}),y()}))}})})(jQuery);
--------------------------------------------------------------------------------
/ops/static/js/jquery.nestable.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Nestable jQuery Plugin - Copyright (c) 2012 David Bushell - http://dbushell.com/
3 | * Dual-licensed under the BSD or MIT licenses
4 | */
5 | (function(e,g,h,c){var f="ontouchstart" in g;var b=(function(){var m=h.createElement("div"),n=h.documentElement;if(!("pointerEvents" in m.style)){return false}m.style.pointerEvents="auto";m.style.pointerEvents="x";n.appendChild(m);var l=g.getComputedStyle&&g.getComputedStyle(m,"").pointerEvents==="auto";n.removeChild(m);return !!l})();var k=f?"touchstart":"mousedown",j=f?"touchmove":"mousemove",a=f?"touchend":"mouseup";eCancel=f?"touchcancel":"mouseup";var d={listNodeName:"ol",itemNodeName:"li",rootClass:"dd",listClass:"dd-list",itemClass:"dd-item",dragClass:"dd-dragel",handleClass:"dd-handle",collapsedClass:"dd-collapsed",placeClass:"dd-placeholder",noDragClass:"dd-nodrag",emptyClass:"dd-empty",expandBtnHTML:'Expand ',collapseBtnHTML:'Collapse ',group:0,maxDepth:5,threshold:20};function i(m,l){this.w=e(g);this.el=e(m);this.options=e.extend({},d,l);this.init()}i.prototype={init:function(){var o=this;o.reset();o.el.data("nestable-group",this.options.group);o.placeEl=e('
');e.each(this.el.find(o.options.itemNodeName),function(p,q){o.setParent(e(q))});o.el.on("click","button",function(s){if(o.dragEl||(!f&&s.button!==0)){return}var r=e(s.currentTarget),q=r.data("action"),p=r.parent(o.options.itemNodeName);if(q==="collapse"){o.collapseItem(p)}if(q==="expand"){o.expandItem(p)}});var l=function(q){var p=e(q.target);if(!p.hasClass(o.options.handleClass)){if(p.closest("."+o.options.noDragClass).length){return}p=p.closest("."+o.options.handleClass)}if(!p.length||o.dragEl||(!f&&q.button!==0)||(f&&q.touches.length!==1)){return}q.preventDefault();o.dragStart(f?q.touches[0]:q)};var n=function(p){if(o.dragEl){p.preventDefault();o.dragMove(f?p.touches[0]:p)}};var m=function(p){if(o.dragEl){p.preventDefault();o.dragStop(f?p.touches[0]:p)}};if(f){o.el[0].addEventListener(k,l,false);g.addEventListener(j,n,false);g.addEventListener(a,m,false);g.addEventListener(eCancel,m,false)}else{o.el.on(k,l);o.w.on(j,n);o.w.on(a,m)}},serialize:function(){var m,n=0,l=this;step=function(r,p){var q=[],o=r.children(l.options.itemNodeName);o.each(function(){var s=e(this),u=e.extend({},s.data()),t=s.children(l.options.listNodeName);if(t.length){u.children=step(t,p+1)}q.push(u)});return q};m=step(l.el.find(l.options.listNodeName).first(),n);return m},serialise:function(){return this.serialize()},reset:function(){this.mouse={offsetX:0,offsetY:0,startX:0,startY:0,lastX:0,lastY:0,nowX:0,nowY:0,distX:0,distY:0,dirAx:0,dirX:0,dirY:0,lastDirX:0,lastDirY:0,distAxX:0,distAxY:0};this.moving=false;this.dragEl=null;this.dragRootEl=null;this.dragDepth=0;this.hasNewRoot=false;this.pointEl=null},expandItem:function(l){l.removeClass(this.options.collapsedClass);l.children('[data-action="expand"]').hide();l.children('[data-action="collapse"]').show();l.children(this.options.listNodeName).show()},collapseItem:function(m){var l=m.children(this.options.listNodeName);if(l.length){m.addClass(this.options.collapsedClass);m.children('[data-action="collapse"]').hide();m.children('[data-action="expand"]').show();m.children(this.options.listNodeName).hide()}},expandAll:function(){var l=this;l.el.find(l.options.itemNodeName).each(function(){l.expandItem(e(this))})},collapseAll:function(){var l=this;l.el.find(l.options.itemNodeName).each(function(){l.collapseItem(e(this))})},setParent:function(l){if(l.children(this.options.listNodeName).length){l.prepend(e(this.options.expandBtnHTML));l.prepend(e(this.options.collapseBtnHTML))}l.children('[data-action="expand"]').hide()},unsetParent:function(l){l.removeClass(this.options.collapsedClass);l.children("[data-action]").remove();l.children(this.options.listNodeName).remove()},dragStart:function(q){var m=this.mouse,p=e(q.target).closest("."+this.options.handleClass),o=p.closest(this.options.itemNodeName);console.log(p);this.placeEl.css("height",o.height());m.offsetX=q.offsetX!==c?q.offsetX:q.pageX-p.offset().left;m.offsetY=q.offsetY!==c?q.offsetY:q.pageY-p.offset().top;m.startX=m.lastX=q.pageX;m.startY=m.lastY=q.pageY;this.dragRootEl=this.el;this.dragEl=e(h.createElement(this.options.listNodeName)).addClass(this.options.listClass+" "+this.options.dragClass);this.dragEl.css("width",o.width());o.after(this.placeEl);o[0].parentNode.removeChild(o[0]);o.appendTo(this.dragEl);e(h.body).append(this.dragEl);this.dragEl.css({left:q.pageX-m.offsetX,top:q.pageY-m.offsetY});var n,r,l=this.dragEl.find(this.options.itemNodeName);for(n=0;nthis.dragDepth){this.dragDepth=r}}},dragStop:function(m){var l=this.dragEl.children(this.options.itemNodeName).first();l[0].parentNode.removeChild(l[0]);this.placeEl.replaceWith(l);this.dragEl.remove();this.el.trigger("change");if(this.hasNewRoot){this.dragRootEl.trigger("change")}this.reset()},dragMove:function(s){var t,x,n,q,p,m=this.options,u=this.mouse;this.dragEl.css({left:s.pageX-u.offsetX,top:s.pageY-u.offsetY});u.lastX=u.nowX;u.lastY=u.nowY;u.nowX=s.pageX;u.nowY=s.pageY;u.distX=u.nowX-u.lastX;u.distY=u.nowY-u.lastY;u.lastDirX=u.dirX;u.lastDirY=u.dirY;u.dirX=u.distX===0?0:u.distX>0?1:-1;u.dirY=u.distY===0?0:u.distY>0?1:-1;var l=Math.abs(u.distX)>Math.abs(u.distY)?1:0;if(!u.moving){u.dirAx=l;u.moving=true;return}if(u.dirAx!==l){u.distAxX=0;u.distAxY=0}else{u.distAxX+=Math.abs(u.distX);if(u.dirX!==0&&u.dirX!==u.lastDirX){u.distAxX=0}u.distAxY+=Math.abs(u.distY);if(u.dirY!==0&&u.dirY!==u.lastDirY){u.distAxY=0}}u.dirAx=l;if(u.dirAx&&u.distAxX>=m.threshold){u.distAxX=0;n=this.placeEl.prev(m.itemNodeName);if(u.distX>0&&n.length&&!n.hasClass(m.collapsedClass)){t=n.find(m.listNodeName).last();p=this.placeEl.parents(m.listNodeName).length;if(p+this.dragDepth<=m.maxDepth){if(!t.length){t=e("<"+m.listNodeName+"/>").addClass(m.listClass);t.append(this.placeEl);n.append(t);this.setParent(n)}else{t=n.children(m.listNodeName).last();t.append(this.placeEl)}}}if(u.distX<0){q=this.placeEl.next(m.itemNodeName);if(!q.length){x=this.placeEl.parent();this.placeEl.closest(m.itemNodeName).after(this.placeEl);if(!x.children().length){this.unsetParent(x.parent())}}}}var o=false;if(!b){this.dragEl[0].style.visibility="hidden"}this.pointEl=e(h.elementFromPoint(s.pageX-h.body.scrollLeft,s.pageY-(g.pageYOffset||h.documentElement.scrollTop)));if(!b){this.dragEl[0].style.visibility="visible"}if(this.pointEl.hasClass(m.handleClass)){this.pointEl=this.pointEl.parent(m.itemNodeName)}if(this.pointEl.hasClass(m.emptyClass)){o=true}else{if(!this.pointEl.length||!this.pointEl.hasClass(m.itemClass)){return}}var r=this.pointEl.closest("."+m.rootClass),w=this.dragRootEl.data("nestable-id")!==r.data("nestable-id");if(!u.dirAx||w||o){if(w&&m.group!==r.data("nestable-group")){return}p=this.dragDepth-1+this.pointEl.parents(m.listNodeName).length;if(p>m.maxDepth){return}var v=s.pageY<(this.pointEl.offset().top+this.pointEl.height()/2);x=this.placeEl.parent();if(o){t=e(h.createElement(m.listNodeName)).addClass(m.listClass);t.append(this.placeEl);this.pointEl.replaceWith(t)}else{if(v){this.pointEl.before(this.placeEl)}else{this.pointEl.after(this.placeEl)}}if(!x.children().length){this.unsetParent(x.parent())}if(!this.dragRootEl.find(m.itemNodeName).length){this.dragRootEl.append('
')}if(w){this.dragRootEl=r;this.hasNewRoot=this.el[0]!==this.dragRootEl[0]}}}};e.fn.nestable=function(n){var l=this,m=this;l.each(function(){var o=e(this).data("nestable");if(!o){e(this).data("nestable",new i(this,n));e(this).data("nestable-id",new Date().getTime())}else{if(typeof n==="string"&&typeof o[n]==="function"){m=o[n]()}}});return m||l}})(window.jQuery||window.Zepto,window,document);
--------------------------------------------------------------------------------
/ops/static/js/jquery.slimscroll.min.js:
--------------------------------------------------------------------------------
1 | /*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)
2 | * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
3 | * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
4 | *
5 | * Version: 1.2.0
6 | *
7 | */
8 | (function(a){jQuery.fn.extend({slimScroll:function(b){var c={width:"auto",height:"250px",size:"7px",color:"#000",position:"right",distance:"1px",start:"top",opacity:0.4,alwaysVisible:false,disableFadeOut:false,railVisible:false,railColor:"#333",railOpacity:0.2,railDraggable:true,railClass:"slimScrollRail",barClass:"slimScrollBar",wrapperClass:"slimScrollDiv",allowPageScroll:false,wheelStep:20,touchScrollStep:200,borderRadius:"7px",railBorderRadius:"7px"};var d=a.extend(c,b);this.each(function(){var w,r,k,p,z,s,o,j,l="
",t=30,q=false;var A=a(this);if(A.parent().hasClass(d.wrapperClass)){var h=A.scrollTop();u=A.parent().find("."+d.barClass);e=A.parent().find("."+d.railClass);B();if(a.isPlainObject(b)){if("height" in b&&b.height=="auto"){A.parent().css("height","auto");A.css("height","auto");var n=A.parent().parent().height();A.parent().css("height",n);A.css("height",n)}if("scrollTo" in b){h=parseInt(d.scrollTo)}else{if("scrollBy" in b){h+=parseInt(d.scrollBy)}else{if("destroy" in b){u.remove();e.remove();A.unwrap();return}}}v(h,false,true)}return}d.height=(d.height=="auto")?A.parent().height():d.height;var i=a(l).addClass(d.wrapperClass).css({position:"relative",overflow:"hidden",width:d.width,height:d.height});A.css({overflow:"hidden",width:d.width,height:d.height});var e=a(l).addClass(d.railClass).css({width:d.size,height:"100%",position:"absolute",top:0,display:(d.alwaysVisible&&d.railVisible)?"block":"none","border-radius":d.railBorderRadius,background:d.railColor,opacity:d.railOpacity,zIndex:90});var u=a(l).addClass(d.barClass).css({background:d.color,width:d.size,position:"absolute",top:0,opacity:d.opacity,display:d.alwaysVisible?"block":"none","border-radius":d.borderRadius,BorderRadius:d.borderRadius,MozBorderRadius:d.borderRadius,WebkitBorderRadius:d.borderRadius,zIndex:99});var f=(d.position=="right")?{right:d.distance}:{left:d.distance};e.css(f);u.css(f);A.wrap(i);A.parent().append(u);A.parent().append(e);if(d.railDraggable&&a.ui&&typeof(a.ui.draggable)=="function"){u.draggable({axis:"y",containment:"parent",start:function(){k=true},stop:function(){k=false;m()},drag:function(C){v(0,a(this).position().top,false)}})}e.hover(function(){g()},function(){m()});u.hover(function(){r=true},function(){r=false});A.hover(function(){w=true;g();m()},function(){w=false;m()});A.bind("touchstart",function(D,C){if(D.originalEvent.touches.length){z=D.originalEvent.touches[0].pageY}});A.bind("touchmove",function(D){D.originalEvent.preventDefault();if(D.originalEvent.touches.length){var C=(z-D.originalEvent.touches[0].pageY)/d.touchScrollStep;v(C,true)}});if(d.start==="bottom"){u.css({top:A.outerHeight()-u.outerHeight()});v(0,true)}else{if(d.start!=="top"){v(a(d.start).position().top,null,true);if(!d.alwaysVisible){u.hide()}}}x();B();function y(D){if(!w){return}var D=D||window.event;var E=0;if(D.wheelDelta){E=-D.wheelDelta/120}if(D.detail){E=D.detail/3}var C=D.target||D.srcTarget||D.srcElement;if(a(C).closest("."+d.wrapperClass).is(A.parent())){v(E,true)}if(D.preventDefault&&!q){D.preventDefault()}if(!q){D.returnValue=false}}function v(H,E,C){var G=H;var F=A.outerHeight()-u.outerHeight();if(E){G=parseInt(u.css("top"))+H*parseInt(d.wheelStep)/100*u.outerHeight();G=Math.min(Math.max(G,0),F);G=(H>0)?Math.ceil(G):Math.floor(G);u.css({top:G+"px"})}o=parseInt(u.css("top"))/(A.outerHeight()-u.outerHeight());G=o*(A[0].scrollHeight-A.outerHeight());if(C){G=H;var D=G/A[0].scrollHeight*A.outerHeight();D=Math.min(Math.max(D,0),F);u.css({top:D+"px"})}A.scrollTop(G);A.trigger("slimscrolling",~~G);g();m()}function x(){if(window.addEventListener){this.addEventListener("DOMMouseScroll",y,false);this.addEventListener("mousewheel",y,false)}else{document.attachEvent("onmousewheel",y)}}function B(){s=Math.max((A.outerHeight()/A[0].scrollHeight)*A.outerHeight(),t);u.css({height:s+"px"});var C=s==A.outerHeight()?"none":"block";u.css({display:C})}function g(){B();clearTimeout(p);if(o==~~o){q=d.allowPageScroll;if(j!=o){var C=(~~o==0)?"top":"bottom";A.trigger("slimscroll",C)}}else{q=false}j=o;if(s>=A.outerHeight()){q=true;return}u.stop(true,true).fadeIn("fast");if(d.railVisible){e.stop(true,true).fadeIn("fast")}}function m(){if(!d.alwaysVisible){p=setTimeout(function(){if(!(d.disableFadeOut&&w)&&!r&&!k){u.fadeOut("slow");e.fadeOut("slow")}},1000)}}});return this}});jQuery.fn.extend({slimscroll:jQuery.fn.slimScroll})})(jQuery);
--------------------------------------------------------------------------------
/ops/static/js/jquery.ui.touch-punch.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * jQuery UI Touch Punch 0.2.2
3 | *
4 | * Copyright 2011, Dave Furfero
5 | * Dual licensed under the MIT or GPL Version 2 licenses.
6 | *
7 | * Depends:
8 | * jquery.ui.widget.js
9 | * jquery.ui.mouse.js
10 | */
11 | (function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return;}var c=b.ui.mouse.prototype,e=c._mouseInit,a;function d(g,h){if(g.originalEvent.touches.length>1){return;}g.preventDefault();var i=g.originalEvent.changedTouches[0],f=document.createEvent("MouseEvents");f.initMouseEvent(h,true,true,window,1,i.screenX,i.screenY,i.clientX,i.clientY,false,false,false,false,0,null);g.target.dispatchEvent(f);}c._touchStart=function(g){var f=this;if(a||!f._mouseCapture(g.originalEvent.changedTouches[0])){return;}a=true;f._touchMoved=false;d(g,"mouseover");d(g,"mousemove");d(g,"mousedown");};c._touchMove=function(f){if(!a){return;}this._touchMoved=true;d(f,"mousemove");};c._touchEnd=function(f){if(!a){return;}d(f,"mouseup");d(f,"mouseout");if(!this._touchMoved){d(f,"click");}a=false;};c._mouseInit=function(){var f=this;f.element.bind("touchstart",b.proxy(f,"_touchStart")).bind("touchmove",b.proxy(f,"_touchMove")).bind("touchend",b.proxy(f,"_touchEnd"));e.call(f);};})(jQuery);
--------------------------------------------------------------------------------
/ops/static/js/respond.min.js:
--------------------------------------------------------------------------------
1 | /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
2 | /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
3 | window.matchMedia=window.matchMedia||function(a){"use strict";var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document);
4 |
5 | /*! Respond.js v1.3.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */
6 | (function(a){"use strict";function x(){u(!0)}var b={};if(a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,!b.mediaQueriesSupported){var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var b=m.shift();v(b.href,function(c){p(c,b.href,b.media),h[b.href]=!0,a.setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(b){var h="clientWidth",k=d[h],m="CSS1Compat"===c.compatMode&&k||c.body[h]||k,n={},o=l[l.length-1],p=(new Date).getTime();if(b&&q&&i>p-q)return a.clearTimeout(r),r=a.setTimeout(u,i),void 0;q=p;for(var v in e)if(e.hasOwnProperty(v)){var w=e[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?t||s():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?t||s():1)),w.hasquery&&(z&&A||!(z||m>=x)||!(A||y>=m))||(n[w.media]||(n[w.media]=[]),n[w.media].push(f[w.rules]))}for(var C in g)g.hasOwnProperty(C)&&g[C]&&g[C].parentNode===j&&j.removeChild(g[C]);for(var D in n)if(n.hasOwnProperty(D)){var E=c.createElement("style"),F=n[D].join("\n");E.type="text/css",E.media=D,j.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(c.createTextNode(F)),g.push(E)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)}})(this);
7 |
--------------------------------------------------------------------------------
/ops/static/js/spin.min.js:
--------------------------------------------------------------------------------
1 | (function(t,e){if(typeof exports=="object")module.exports=e();else if(typeof define=="function"&&define.amd)define(e);else t.Spinner=e()})(this,function(){"use strict";var t=["webkit","Moz","ms","O"],e={},i;function o(t,e){var i=document.createElement(t||"div"),o;for(o in e)i[o]=e[o];return i}function n(t){for(var e=1,i=arguments.length;e>1):parseInt(n.left,10)+s)+"px",top:(n.top=="auto"?l.y-a.y+(t.offsetHeight>>1):parseInt(n.top,10)+s)+"px"})}r.setAttribute("role","progressbar");e.lines(r,e.opts);if(!i){var u=0,p=(n.lines-1)*(1-n.direction)/2,c,h=n.fps,m=h/n.speed,y=(1-n.opacity)/(m*n.trail/100),g=m/n.lines;(function v(){u++;for(var t=0;t>1)+"px"})}for(;r',e)}r.addRule(".spin-vml","behavior:url(#default#VML)");p.prototype.lines=function(e,i){var o=i.length+i.width,r=2*o;function s(){return f(t("group",{coordsize:r+" "+r,coordorigin:-o+" "+-o}),{width:r,height:r})}var a=-(i.width+i.length)*2+"px",l=f(s(),{position:"absolute",top:a,left:a}),d;function u(e,r,a){n(l,n(f(s(),{rotation:360/i.lines*e+"deg",left:~~r}),n(f(t("roundrect",{arcsize:i.corners}),{width:o,height:i.width,left:i.radius,top:-i.width>>1,filter:a}),t("fill",{color:i.color,opacity:i.opacity}),t("stroke",{opacity:0}))))}if(i.shadow)for(d=1;d<=i.lines;d++)u(d,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(d=1;d<=i.lines;d++)u(d);return n(e,l)};p.prototype.opacity=function(t,e,i,o){var n=t.firstChild;o=o.shadow&&o.lines||0;if(n&&e+o0&&!(/^image\/(jpe?g|png|gif)$/i).test(e))||(e.length==0&&!(/\.(jpe?g|png|gif)$/i).test(d.name))){if(c.on_error){c.on_error(1)}return false}if(c.max_size&&d.size>c.max_size){if(c.on_error){c.on_error(2)}return false}}if(c.on_success){c.on_success()}return true};this.options.image.before_remove=this.options.image.before_remove||function(){c.$input.val(null);return true};this.$file.ace_file_input(this.options.image).on("change",function(){var d=(c.$file.val()||c.$file.data("ace_input_files"))?Math.random()+""+(new Date()).getTime():null;c.$input.val(d)}).closest(".ace-file-input").css({width:"150px"}).closest(".editable-input").addClass("editable-image")}});a.defaults=b.extend({},b.fn.editabletypes.abstractinput.defaults,{tpl:' ',inputclass:"",image:{style:"well",btn_choose:"Change Image",btn_change:null,no_icon:"icon-picture",thumbnail:"large"}});b.fn.editabletypes.image=a}(window.jQuery));(function(a){var b=function(c){this.init("wysiwyg",c,b.defaults);this.options.wysiwyg=a.extend({},b.defaults.wysiwyg,c.wysiwyg)};a.fn.editableutils.inherit(b,a.fn.editabletypes.abstractinput);a.extend(b.prototype,{render:function(){this.$editor=this.$input.nextAll(".wysiwyg-editor:eq(0)");this.$tpl.parent().find(".wysiwyg-editor").show().ace_wysiwyg({toolbar:["bold","italic","strikethrough","underline",null,"foreColor",null,"insertImage"]}).prev().addClass("wysiwyg-style2").closest(".editable-input").addClass("editable-wysiwyg").closest(".editable-container").css({display:"block"});if(this.options.wysiwyg&&this.options.wysiwyg.css){this.$tpl.closest(".editable-wysiwyg").css(this.options.wysiwyg.css)}},value2html:function(d,c){a(c).html(d);return false},html2value:function(c){return c},value2input:function(c){this.$editor.html(c)},input2value:function(){return this.$editor.html()},activate:function(){}});b.defaults=a.extend({},a.fn.editabletypes.abstractinput.defaults,{tpl:'
',inputclass:"editable-wysiwyg",wysiwyg:{}});a.fn.editabletypes.wysiwyg=b}(window.jQuery));(function(b){var a=function(c){this.init("spinner",c,a.defaults);this.initSpinner(c,a.defaults)};b.fn.editableutils.inherit(a,b.fn.editabletypes.abstractinput);b.extend(a.prototype,{initSpinner:function(c,d){this.options.spinner=b.extend({},d.spinner,c.spinner)},render:function(){},activate:function(){if(this.$input.is(":visible")){this.$input.focus();b.fn.editableutils.setCursorPosition(this.$input.get(0),this.$input.val().length);var d=parseInt(this.$input.val());var c=b.extend({value:d},this.options.spinner);this.$input.ace_spinner(c)}},autosubmit:function(){this.$input.keydown(function(c){if(c.which===13){b(this).closest("form").submit()}})}});a.defaults=b.extend({},b.fn.editabletypes.abstractinput.defaults,{tpl:' ',inputclass:"",spinner:{min:0,max:100,step:1,icon_up:"icon-plus",icon_down:"icon-minus",btn_up_class:"btn-success",btn_down_class:"btn-danger"}});b.fn.editabletypes.spinner=a}(window.jQuery));(function(b){var a=function(c){this.init("slider",c,a.defaults);this.initSlider(c,a.defaults)};b.fn.editableutils.inherit(a,b.fn.editabletypes.abstractinput);b.extend(a.prototype,{initSlider:function(c,d){this.options.slider=b.extend({},d.slider,c.slider)},render:function(){},activate:function(){if(this.$input.is(":visible")){this.$input.focus();b.fn.editableutils.setCursorPosition(this.$input.get(0),this.$input.val().length);var c=this;var f=parseInt(this.$input.val());var e=this.options.slider.width||200;var d=b.extend(this.options.slider,{value:f,slide:function(g,h){var i=parseInt(h.value);c.$input.val(i);if(h.handle.firstChild==null){b(h.handle).append("")}b(h.handle.firstChild).show().children().eq(1).text(i)}});this.$input.parent().addClass("editable-slider").css("width",e+"px").slider(d)}},value2html:function(d,c){},autosubmit:function(){this.$input.keydown(function(c){if(c.which===13){b(this).closest("form").submit()}})}});a.defaults=b.extend({},b.fn.editabletypes.abstractinput.defaults,{tpl:' ',inputclass:"",slider:{min:1,max:100,step:1,range:"min"}});b.fn.editabletypes.slider=a}(window.jQuery));
--------------------------------------------------------------------------------
/ops/templates/assets/project.html:
--------------------------------------------------------------------------------
1 | {% extends "index.html" %}
2 |
3 |
4 | {% block HeadPageSpecificPluginStyles %}
5 |
6 |
7 |
8 |
9 | {% endblock %}
10 |
11 | {% block BodyPageContent %}
12 |
13 |
14 |
17 |
18 |
19 |
20 | Home
21 |
22 | 项目管理
23 |
24 |
25 |
80 |
81 | {% endblock %}
82 |
83 |
84 | {% block BodyPageSpecificPluginScripts %}
85 |
86 |
87 |
88 |
89 | {% endblock %}
90 |
91 |
92 |
93 | {% block BodyInlineScripts %}
94 |
95 | {% endblock %}
--------------------------------------------------------------------------------
/ops/templates/users/department.html:
--------------------------------------------------------------------------------
1 | {% extends "index.html" %}
2 |
3 |
4 | {% block HeadPageSpecificPluginStyles %}
5 |
6 |
7 |
8 |
9 | {% endblock %}
10 |
11 | {% block BodyPageContent %}
12 |
13 |
14 |
17 |
18 |
19 |
20 | Home
21 |
22 | 部门管理
23 |
24 |
25 |
80 |
81 | {% endblock %}
82 |
83 |
84 | {% block BodyPageSpecificPluginScripts %}
85 |
86 |
87 |
88 |
89 | {% endblock %}
90 |
91 |
92 |
93 | {% block BodyInlineScripts %}
94 |
95 | {% endblock %}
--------------------------------------------------------------------------------
/ops/templates/users/login.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 登录 - iamdc
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 | iamdc
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
171 |
172 |
175 |
176 |
177 |
183 |
184 |
185 |
--------------------------------------------------------------------------------
/ops/templates/users/user.html:
--------------------------------------------------------------------------------
1 | {% extends "index.html" %}
2 |
3 |
4 | {% block HeadPageSpecificPluginStyles %}
5 |
6 |
7 |
8 |
9 | {% endblock %}
10 |
11 | {% block BodyPageContent %}
12 |
13 |
14 |
17 |
18 |
19 |
20 |
21 | Home
22 |
23 | 用户管理
24 |
25 |
26 |
27 |
82 |
83 | {% endblock %}
84 |
85 |
86 | {% block BodyPageSpecificPluginScripts %}
87 |
88 |
89 |
90 |
91 | {% endblock %}
92 |
93 |
94 |
95 | {% block BodyInlineScripts %}
96 |
97 | {% endblock %}
--------------------------------------------------------------------------------
/ops/users/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BackPotMan/iamdc/7ff6b951831a0bc30bfb182bd6c7ea345694e46c/ops/users/__init__.py
--------------------------------------------------------------------------------
/ops/users/login.py:
--------------------------------------------------------------------------------
1 |
2 | from flask import session
3 | from ops.database.model import db,user
4 |
5 | def userLogin():
6 |
7 | returnData = {'status': 1, 'uri': '', 'user': {}}
8 | if 'username' in session:
9 | username = session['username']
10 | userLogin = user.query.filter(user.name == username).first()
11 | if userLogin:
12 | returnData['user'] = {'id': userLogin.id,
13 | 'name':userLogin.name,
14 | 'cnname':userLogin.cnname,
15 | 'department_id':userLogin.department_id,
16 | 'leader':userLogin.leader.value
17 | }
18 | returnData['uri'] = "/"
19 | returnData['status'] = 0
20 | else:
21 | session.pop('username', None)
22 | returnData['uri'] = "/users/login/"
23 | else:
24 | returnData['uri'] = "/users/login/"
25 |
26 | return returnData
27 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | Flask==1.0.2
2 | Flask-Migrate==2.3.1
3 | Flask-SQLAlchemy==2.3.2
4 | Flask-Script==2.0.6
5 | Jinja2==2.8
6 | SQLAlchemy==1.2.4
7 | Werkzeug==0.14.1
8 | paramiko==2.4.2
9 | setuptools==40.6.2
10 | distribute==0.7.3
11 | MySQL-python==1.2.5
--------------------------------------------------------------------------------
/run.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from ops import app
3 |
4 | ##
5 | if __name__ == '__main__':
6 | app.run(host='0.0.0.0',port=5001)
--------------------------------------------------------------------------------