'+a.addText+""),h=d.find("tr:last a")):(c.filter(":last").after('"),h=c.filter(":last").next().find("a"));h.click(function(d){d.preventDefault();var f=b("#id_"+a.prefix+"-TOTAL_FORMS"),d=b("#"+a.prefix+
3 | "-empty"),c=d.clone(true);c.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id",a.prefix+"-"+g);c.is("tr")?c.children(":last").append('"):c.is("ul")||c.is("ol")?c.append(''+a.deleteText+""):c.children(":first").append(''+a.deleteText+"");c.find("*").each(function(){i(this,
4 | a.prefix,f.val())});c.insertBefore(b(d));b(f).val(parseInt(f.val(),10)+1);g=g+1;e.val()!==""&&e.val()-f.val()<=0&&h.parent().hide();c.find("a."+a.deleteCssClass).click(function(d){d.preventDefault();d=b(this).parents("."+a.formCssClass);d.remove();g=g-1;a.removed&&a.removed(d);d=b("."+a.formCssClass);b("#id_"+a.prefix+"-TOTAL_FORMS").val(d.length);(e.val()===""||e.val()-d.length>0)&&h.parent().show();for(var c=0,f=d.length;c 0) {
25 | values.push($(field).val());
26 | }
27 | })
28 | field.val(URLify(values.join(' '), maxLength));
29 | };
30 |
31 | $(dependencies.join(',')).keyup(populate).change(populate).focus(populate);
32 | });
33 | };
34 | })(django.jQuery);
35 |
--------------------------------------------------------------------------------
/static/admin/js/prepopulate.min.js:
--------------------------------------------------------------------------------
1 | (function(a){a.fn.prepopulate=function(d,g){return this.each(function(){var b=a(this);b.data("_changed",false);b.change(function(){b.data("_changed",true)});var c=function(){if(b.data("_changed")!=true){var e=[];a.each(d,function(h,f){a(f).val().length>0&&e.push(a(f).val())});b.val(URLify(e.join(" "),g))}};a(d.join(",")).keyup(c).change(c).focus(c)})}})(django.jQuery);
2 |
--------------------------------------------------------------------------------
/static/admin/js/timeparse.js:
--------------------------------------------------------------------------------
1 | var timeParsePatterns = [
2 | // 9
3 | { re: /^\d{1,2}$/i,
4 | handler: function(bits) {
5 | if (bits[0].length == 1) {
6 | return '0' + bits[0] + ':00';
7 | } else {
8 | return bits[0] + ':00';
9 | }
10 | }
11 | },
12 | // 13:00
13 | { re: /^\d{2}[:.]\d{2}$/i,
14 | handler: function(bits) {
15 | return bits[0].replace('.', ':');
16 | }
17 | },
18 | // 9:00
19 | { re: /^\d[:.]\d{2}$/i,
20 | handler: function(bits) {
21 | return '0' + bits[0].replace('.', ':');
22 | }
23 | },
24 | // 3 am / 3 a.m. / 3am
25 | { re: /^(\d+)\s*([ap])(?:.?m.?)?$/i,
26 | handler: function(bits) {
27 | var hour = parseInt(bits[1]);
28 | if (hour == 12) {
29 | hour = 0;
30 | }
31 | if (bits[2].toLowerCase() == 'p') {
32 | if (hour == 12) {
33 | hour = 0;
34 | }
35 | return (hour + 12) + ':00';
36 | } else {
37 | if (hour < 10) {
38 | return '0' + hour + ':00';
39 | } else {
40 | return hour + ':00';
41 | }
42 | }
43 | }
44 | },
45 | // 3.30 am / 3:15 a.m. / 3.00am
46 | { re: /^(\d+)[.:](\d{2})\s*([ap]).?m.?$/i,
47 | handler: function(bits) {
48 | var hour = parseInt(bits[1]);
49 | var mins = parseInt(bits[2]);
50 | if (mins < 10) {
51 | mins = '0' + mins;
52 | }
53 | if (hour == 12) {
54 | hour = 0;
55 | }
56 | if (bits[3].toLowerCase() == 'p') {
57 | if (hour == 12) {
58 | hour = 0;
59 | }
60 | return (hour + 12) + ':' + mins;
61 | } else {
62 | if (hour < 10) {
63 | return '0' + hour + ':' + mins;
64 | } else {
65 | return hour + ':' + mins;
66 | }
67 | }
68 | }
69 | },
70 | // noon
71 | { re: /^no/i,
72 | handler: function(bits) {
73 | return '12:00';
74 | }
75 | },
76 | // midnight
77 | { re: /^mid/i,
78 | handler: function(bits) {
79 | return '00:00';
80 | }
81 | }
82 | ];
83 |
84 | function parseTimeString(s) {
85 | for (var i = 0; i < timeParsePatterns.length; i++) {
86 | var re = timeParsePatterns[i].re;
87 | var handler = timeParsePatterns[i].handler;
88 | var bits = re.exec(s);
89 | if (bits) {
90 | return handler(bits);
91 | }
92 | }
93 | return s;
94 | }
95 |
--------------------------------------------------------------------------------
/static/css/blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/css/blue.png
--------------------------------------------------------------------------------
/static/css/blue@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/css/blue@2x.png
--------------------------------------------------------------------------------
/static/css/icheck_blue.css:
--------------------------------------------------------------------------------
1 | /* iCheck plugin Square skin, blue
2 | ----------------------------------- */
3 | .icheckbox_square-blue,
4 | .iradio_square-blue {
5 | display: inline-block;
6 | *display: inline;
7 | vertical-align: middle;
8 | margin: 0;
9 | padding: 0;
10 | width: 22px;
11 | height: 22px;
12 | background: url(blue.png) no-repeat;
13 | border: none;
14 | cursor: pointer;
15 | }
16 |
17 | .icheckbox_square-blue {
18 | background-position: 0 0;
19 | }
20 | .icheckbox_square-blue.hover {
21 | background-position: -24px 0;
22 | }
23 | .icheckbox_square-blue.checked {
24 | background-position: -48px 0;
25 | }
26 | .icheckbox_square-blue.disabled {
27 | background-position: -72px 0;
28 | cursor: default;
29 | }
30 | .icheckbox_square-blue.checked.disabled {
31 | background-position: -96px 0;
32 | }
33 |
34 | .iradio_square-blue {
35 | background-position: -120px 0;
36 | }
37 | .iradio_square-blue.hover {
38 | background-position: -144px 0;
39 | }
40 | .iradio_square-blue.checked {
41 | background-position: -168px 0;
42 | }
43 | .iradio_square-blue.disabled {
44 | background-position: -192px 0;
45 | cursor: default;
46 | }
47 | .iradio_square-blue.checked.disabled {
48 | background-position: -216px 0;
49 | }
50 |
51 | /* HiDPI support */
52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) {
53 | .icheckbox_square-blue,
54 | .iradio_square-blue {
55 | background-image: url(blue@2x.png);
56 | -webkit-background-size: 240px 24px;
57 | background-size: 240px 24px;
58 | }
59 | }
--------------------------------------------------------------------------------
/static/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/static/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/static/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/static/js/bootstrap-datetimepicker.zh-CN.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Simplified Chinese translation for bootstrap-datetimepicker
3 | * Yuan Cheung
4 | */
5 | ;(function($){
6 | $.fn.datetimepicker.dates['zh-CN'] = {
7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
12 | today: "今天",
13 | suffix: [],
14 | meridiem: ["上午", "下午"]
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/static/js/common.js:
--------------------------------------------------------------------------------
1 | function get_cookie(cookie_name) {
2 | var name = cookie_name + "=";
3 | var ca = document.cookie.split(';');
4 | for (var i = 0; i < ca.length; i++) {
5 | var c = ca[i];
6 | while (c.charAt(0) == ' ') c = c.substring(1);
7 | if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
8 | }
9 | return "";
10 | }
11 |
12 | function csrf_token() {
13 | return get_cookie("csrftoken")
14 | }
15 |
16 | function set_cookie(c_name, value) {
17 | expiredays = 1000;
18 | var exdate = new Date();
19 | exdate.setDate(exdate.getDate() + expiredays)
20 | document.cookie = c_name + "=" + escape(value) +
21 | ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString())
22 | }
23 |
24 | function shake_cart() {
25 | $("#shopping_cart_icon").attr("class", "am-icon-shopping-cart am-animation-shake");
26 | setTimeout(function () {
27 | $("#shopping_cart_icon").attr("class", "am-icon-shopping-cart");
28 | }, 300);
29 | }
30 |
31 | //除法函数,用来得到精确的除法结果
32 | //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
33 | //调用:accDiv(arg1,arg2)
34 | //返回值:arg1除以arg2的精确结果
35 | function accDiv(arg1, arg2) {
36 | var t1 = 0, t2 = 0, r1, r2;
37 | try {
38 | t1 = arg1.toString().split(".")[1].length
39 | } catch (e) {
40 | }
41 | try {
42 | t2 = arg2.toString().split(".")[1].length
43 | } catch (e) {
44 | }
45 | with (Math) {
46 | r1 = Number(arg1.toString().replace(".", ""));
47 | r2 = Number(arg2.toString().replace(".", ""));
48 | return (r1 / r2) * pow(10, t2 - t1);
49 | }
50 | }
51 |
52 | //给Number类型增加一个div方法,调用起来更加方便。
53 | Number.prototype.div = function (arg) {
54 | return accDiv(this, arg);
55 | };
56 |
57 | //乘法函数,用来得到精确的乘法结果
58 | //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
59 | //调用:accMul(arg1,arg2)
60 | //返回值:arg1乘以arg2的精确结果
61 | function accMul(arg1, arg2) {
62 | var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
63 | try {
64 | m += s1.split(".")[1].length
65 | } catch (e) {
66 | }
67 | try {
68 | m += s2.split(".")[1].length
69 | } catch (e) {
70 | }
71 | return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
72 | }
73 |
74 | //给Number类型增加一个mul方法,调用起来更加方便。
75 | Number.prototype.mul = function (arg) {
76 | return accMul(arg, this);
77 | };
78 |
79 | //加法函数,用来得到精确的加法结果
80 | //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
81 | //调用:accAdd(arg1,arg2)
82 | //返回值:arg1加上arg2的精确结果
83 | function accAdd(arg1, arg2) {
84 | var r1, r2, m;
85 | try {
86 | r1 = arg1.toString().split(".")[1].length
87 | } catch (e) {
88 | r1 = 0
89 | }
90 | try {
91 | r2 = arg2.toString().split(".")[1].length
92 | } catch (e) {
93 | r2 = 0
94 | }
95 | m = Math.pow(10, Math.max(r1, r2));
96 | return (arg1 * m + arg2 * m) / m;
97 | }
98 | //给Number类型增加一个add方法,调用起来更加方便。
99 | Number.prototype.add = function (arg) {
100 | return accAdd(arg, this);
101 | };
102 |
103 | //减法函数
104 | function accSub(arg1, arg2) {
105 | var r1, r2, m, n;
106 | try {
107 | r1 = arg1.toString().split(".")[1].length
108 | } catch (e) {
109 | r1 = 0
110 | }
111 | try {
112 | r2 = arg2.toString().split(".")[1].length
113 | } catch (e) {
114 | r2 = 0
115 | }
116 | m = Math.pow(10, Math.max(r1, r2));
117 | //last modify by deeka
118 | //动态控制精度长度
119 | n = (r1 >= r2) ? r1 : r2;
120 | return ((arg2 * m - arg1 * m) / m).toFixed(n);
121 | }
122 |
123 | ///给number类增加一个sub方法,调用起来更加方便
124 | Number.prototype.sub = function (arg) {
125 | return accSub(arg, this);
126 | };
127 |
128 |
129 | function getUrlParam(name) {
130 | var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
131 | var r = window.location.search.substr(1).match(reg); //匹配目标参数
132 | if (r != null) return unescape(r[2]);
133 | return null; //返回参数值
134 | }
--------------------------------------------------------------------------------
/static/xadmin/component.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "xadmin",
3 | "version": "0.1.0",
4 | "dependencies": {
5 | "jquery": ">=1.8.3",
6 | "jquery-ui": ">=1.10.0",
7 | "bootstrap": "http://twitter.github.io/bootstrap/assets/bootstrap.zip",
8 | "bootstrap-timepicker": ">=0.2.3",
9 | "bootstrap-datepicker": ">=1.0.0",
10 | "bootstrap-modal": ">=2.1",
11 | "flot": ">=0.8",
12 | "font-awesome": ">=3.0.2",
13 | "load-image": "blueimp/JavaScript-Load-Image",
14 | "bootstrap-image-gallery": "blueimp/Bootstrap-Image-Gallery",
15 | "select2": ">=3.3.2",
16 | "selectize": ">=0.8.4",
17 | "datejs": "datejs/Datejs",
18 | "bootstrap-multiselect": "davidstutz/bootstrap-multiselect"
19 | }
20 | }
--------------------------------------------------------------------------------
/static/xadmin/css/themes/bootstrap-xadmin.css:
--------------------------------------------------------------------------------
1 |
2 | /* results table */
3 | .table th {
4 | background-color: #FAFAFA;
5 | background-image: -moz-linear-gradient(top, white, #F2F2F2);
6 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(white), to(#F2F2F2));
7 | background-image: -webkit-linear-gradient(top, white, #F2F2F2);
8 | background-image: -o-linear-gradient(top, white, #F2F2F2);
9 | background-image: linear-gradient(to bottom, white, #F2F2F2);
10 | background-repeat: repeat-x;
11 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
12 | -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
13 | -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
14 | box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
15 | border-bottom-width: 1px !important;
16 | }
17 |
18 | /** panel **/
19 | .panel-default {
20 | border-radius: 2px;
21 | }
22 | .panel-default > .panel-heading {
23 | background-color: #F8F8F8;
24 | background-image: -moz-linear-gradient(top, #FDFDFD, #F6F6F6);
25 | background-image: -ms-linear-gradient(top, #FDFDFD, #F6F6F6);
26 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#FDFDFD), to(#F6F6F6));
27 | background-image: -webkit-linear-gradient(top, #FDFDFD, #F6F6F6);
28 | background-image: -o-linear-gradient(top, #FDFDFD, #F6F6F6);
29 | background-image: linear-gradient(top, #FDFDFD, #F6F6F6);
30 | }
31 |
32 | .form-group {
33 | border-bottom: 1px solid #EEE;
34 | background-color: #FBFBFB;
35 | margin-top: 0px !important;
36 | margin-bottom: 0px !important;
37 | }
38 | .controls {
39 | background-color: white;
40 | padding: 15px !important;
41 | }
42 | .control-label {
43 | margin-bottom: 0px !important;
44 | }
45 | .fieldset .panel-body {
46 | padding-top: 0px !important;
47 | padding-bottom: 0px !important;
48 | }
49 | .form-inline .form-group {
50 | background: transparent;
51 | border: none;
52 | }
53 |
54 | /** fieldset **/
55 | @media (min-width: 768px) {
56 | .form-horizontal .controls{
57 | border-left: 1px solid #EEE;
58 | }
59 | .form-horizontal .control-label {
60 | padding-top: 22px !important;
61 | }
62 | }
--------------------------------------------------------------------------------
/static/xadmin/css/xadmin.form.css:
--------------------------------------------------------------------------------
1 |
2 | /* CUSTOM FORM FIELDS */
3 | select.selectmultiple {
4 | width: 100%;
5 | height: 120px;
6 | }
7 | .select2-container{
8 | width: 100%;
9 | }
10 | .select2-container.form-control{
11 | padding: 0px;
12 | border: 0px;
13 | }
14 | .select2-container .select2-choice {
15 | height: 35px;
16 | padding-top: 3px;
17 | }
18 |
19 | /* form css */
20 | .form-container .column{
21 | min-height: 60px;
22 | }
23 | .form-group {
24 | margin-right: -15px;
25 | margin-left: -15px;
26 | }
27 | .control-label {
28 | padding: 7px 10px;
29 | font-weight: bold;
30 | }
31 | .form-horizontal .control-label {
32 | margin-bottom: 5px;
33 | }
34 | .controls {
35 | padding: 0px 15px 0px 15px;
36 | }
37 | .controls:before,
38 | .controls:after {
39 | display: table;
40 | content: " ";
41 | }
42 | .controls:after {
43 | clear: both;
44 | }
45 | .control-wrap {
46 | display: block;
47 | width: 100%;
48 | padding-right: 45px;
49 | }
50 | .asteriskField, .asterisk-field {
51 | color: red;
52 | }
53 | .controls > .radio:first-child,
54 | .controls > .checkbox:first-child,
55 | .control-wrap > .radio:first-child,
56 | .control-wrap > .checkbox:first-child {
57 | margin-top: -7px;
58 | }
59 | .controls > span {
60 | padding: 5px 0;
61 | display: inline-block;
62 | }
63 |
64 | .help-block {
65 | margin-bottom: 0px;
66 | }
67 |
68 | .form-row .row {
69 | margin: 0px !important;
70 | }
71 |
72 | .fieldset .panel-body {
73 | padding-bottom: 0px;
74 | }
75 |
76 | @media (min-width: 768px) {
77 |
78 | .text-field,
79 | .textinput,
80 | .url-field,
81 | select,
82 | .input-group ~ .text-field,
83 | .input-group ~ .textinput,
84 | .input-group ~ .url-field
85 | {
86 | max-width: 300px;
87 | }
88 | .input-group.date{ max-width: 220px;}
89 | .input-group.time{ max-width: 180px;}
90 | .int-field {
91 | max-width: 100px;
92 | }
93 | .datetime > .input-group {
94 | float: left;
95 | margin-right: 5px;
96 | }
97 | .datetime > .input-group:last-child {
98 | margin-right: 0px;
99 | }
100 | select.selectmultiple {
101 | max-width: 350px;
102 | }
103 | .select2-container, .selectize-control{
104 | max-width: 300px;
105 | }
106 |
107 | .form-actions.fixed{
108 | position:fixed;
109 | _position:absolute;
110 | bottom:0px;
111 | z-index:295;
112 | margin-left: -10px;
113 | -webkit-box-shadow: 2px 2px 16px rgba(0, 0, 0, 0.5);
114 | -moz-box-shadow: 2px 2px 16px rgba(0, 0, 0, 0.5);
115 | box-shadow: 2px 2px 16px rgba(0, 0, 0, 0.5);
116 | right: 10px;
117 | }
118 |
119 | .form-actions.fixed .pull-right{
120 | float: none !important;
121 | margin-left: 10px;
122 | }
123 |
124 | .form-horizontal .control-label {
125 | width: 170px;
126 | float: left;
127 | }
128 | .form-horizontal .controls {
129 | margin-left: 175px;
130 | }
131 | .form-horizontal.short_label .control-label,
132 | .form-horizontal .short_label .control-label {
133 | width: 120px;
134 | }
135 | .form-horizontal.short_label .controls,
136 | .form-horizontal .short_label .controls {
137 | margin-left: 120px;
138 | }
139 | .form-horizontal .form-group {
140 | margin-bottom: 24px;
141 | }
142 | .form-horizontal .form-inline .form-group {
143 | margin: 0px;
144 | padding-left: 0px;
145 | padding-right: 0px;
146 | }
147 | .form-horizontal .fieldset .panel-body {
148 | padding-top: 24px;
149 | }
150 | }
151 | @media (min-width: 768px) and (max-width: 991px) {
152 | .form-horizontal .control-label {
153 | width: 150px;
154 | }
155 | .form-horizontal .controls {
156 | margin-left: 155px;
157 | }
158 | .form-horizontal.short_label .control-label,
159 | .form-horizontal .short_label .control-label {
160 | width: 100px;
161 | }
162 | .form-horizontal.short_label .controls,
163 | .form-horizontal .short_label .controls {
164 | margin-left: 100px;
165 | }
166 | }
167 | @media (max-width: 767px) {
168 | .btn-toolbar.top-toolbar {
169 | margin: 0 10px 10px;
170 | text-align: right;
171 | }
172 | }
173 |
174 | /** detail page **/
175 | img.field_img {
176 | max-height: 100px;
177 | }
178 |
179 | /** revision form **/
180 | .diff_field .control-label {
181 | color: #FF8040;
182 | }
183 | .diff_field .controls{
184 | background-color: #FCF8E3;
185 | }
186 |
187 | /** tabs **/
188 | .nav.nav-tabs {
189 | margin-bottom: 15px;
190 | }
--------------------------------------------------------------------------------
/static/xadmin/css/xadmin.mobile.css:
--------------------------------------------------------------------------------
1 | #body-content {
2 | margin-top: 50px;
3 | padding-top: 10px;
4 | }
5 | #top-nav, #footer, .breadcrumb {
6 | display: none;
7 | }
8 |
9 | #top-nav .breadcrumb {
10 | margin-top: 20px;
11 | }
12 | #left-side {
13 | min-height: 0px;
14 | position: fixed;
15 | padding: 0px;
16 | top: 50px;
17 | left: 0px;
18 | right: 0px;
19 | bottom: 0px;
20 | background: #FFF;
21 | z-index: 999;
22 | overflow: auto;
23 | }
24 | #left-side .well {
25 | border: 0px;
26 | }
27 | #changelist-form {
28 | clear: both;
29 | }
30 | .navbar-brand {
31 | max-width: 300px;
32 | }
33 |
34 | .panel-content.nopadding {
35 | margin: -15px;
36 | }
37 |
38 | .panel-content.nopadding .table {
39 | margin-bottom: 0;
40 | }
41 |
42 | .col {
43 | padding-right: 10px;
44 | padding-left: 10px;
45 | }
46 | .row {
47 | margin-right: -10px;
48 | margin-left: -10px;
49 | }
50 |
51 | .results {
52 | width: 100%;
53 | overflow-x: auto;
54 | }
55 |
56 | .form-actions {
57 | margin-bottom: 0px;
58 | padding: 10px;
59 | position:fixed;
60 | bottom:0px;
61 | z-index:295;
62 | width: 100%;
63 | margin-right: -10px;
64 | margin-left: -10px;
65 | }
66 | .form-actions .more-btns input:first-child{
67 | margin-top: 10px;
68 | }
69 | .change-form #body-content {
70 | padding-bottom: 60px;
71 | }
72 | .model_ul {
73 | margin-left: 0px;
74 | margin-right: 0px;
75 | }
76 |
77 | .navbar-inverse .navbar-toggle{
78 | color: white;
79 | top: 7px;
80 | padding: 7px 12px;
81 | }
82 | .navbar.tools-navbar {
83 | height: 50px;
84 | margin-top: -10px;
85 | text-align: right;
86 | }
87 | .navbar-btns .btn span{
88 | display: none;
89 | }
90 | .navbar-btns {
91 | position: absolute;
92 | top: 1px;
93 | right: 10px;
94 | }
95 | .nav-back {
96 | left: 10px;
97 | right: auto;
98 | }
99 |
100 | .layout-btns {
101 | display: none;
102 | }
103 | .pagination.pagination-small{
104 | display: none;
105 | }
106 |
107 |
--------------------------------------------------------------------------------
/static/xadmin/css/xadmin.page.dashboard.css:
--------------------------------------------------------------------------------
1 |
2 | .dashboard.container-fluid {
3 | padding-left: 0px;
4 | }
5 | .dashboard .column{
6 | min-height: 60px;
7 | }
8 |
9 | .widget {
10 | position: relative;
11 | }
12 | .widget_options {
13 | overflow: visible;
14 | position: absolute;
15 | }
16 |
17 | /* Quick Buttons
18 | =================================================================== */
19 | .qbutton .panel-body {
20 | padding-top: 5px;
21 | }
22 | .btn-quick {
23 | margin-top: 10px;
24 | padding: 20px 0px 0px 0px;
25 | font-size: 15px;
26 | display:block;
27 | text-align: center;
28 | cursor: pointer;
29 | position: relative;
30 | }
31 | .btn-quick i {
32 | font-size: 32px;
33 | }
34 |
35 | /* Quick Buttons Small
36 | =================================================================== */
37 |
38 | .btn-quick-small {
39 | border-radius: 3px;
40 | padding: 15px 0px 0px 0px;
41 | font-size: 10px;
42 | display:block;
43 | text-align: center;
44 | cursor: pointer;
45 | position: relative;
46 | }
47 |
48 | .btn-quick-small i {
49 | font-size: 20px;
50 | }
--------------------------------------------------------------------------------
/static/xadmin/css/xadmin.plugin.aggregation.css:
--------------------------------------------------------------------------------
1 | td.aggregate {
2 | font-weight: bold;
3 | }
4 | td.aggregate span.aggregate_title {
5 | float: right;
6 | }
--------------------------------------------------------------------------------
/static/xadmin/css/xadmin.plugin.formset.css:
--------------------------------------------------------------------------------
1 |
2 | .empty-form {
3 | display: none;
4 | }
5 | .formset:not(.one) > .panel-body {
6 | padding-top: 0px !important;
7 | }
8 | .formset .row-deleted{
9 | background: #fff0f0 !important;
10 | }
11 | .formset .row-added {
12 | background: #d1ffdd !important;
13 | }
14 | .formset .formset-heading{
15 | padding: 10px;
16 | border-bottom: 1px solid #EEE;
17 | }
18 | .formset .row-deleted .formset-form {
19 | display: none;
20 | }
21 | .formset .box-content.accordion {
22 | margin: 0px;
23 | padding: 5px 5px 3px;
24 | }
25 | .formset .formset-form {
26 | padding-left: 15px;
27 | padding-right: 15px;
28 | }
29 | .formset .accordion-heading .delete-row {
30 | float: right;
31 | margin: 8px;
32 | }
33 | .formset .nav{
34 | margin-bottom: 5px;
35 | }
36 | .formset .nav.nav-tabs{
37 | padding: 10px 10px 0px;
38 | }
39 | .formset .panel-body.tabs {
40 | padding-left: 0px;
41 | padding-right: 0px;
42 | }
43 | .formset .box-content.tabs{
44 | padding: 5px 0px 0px;
45 | }
46 | .formset .tabs .tab-content{
47 | overflow: hidden;
48 | }
49 | .formset .tabs .delete-row{
50 | float: right;
51 | margin: 8px 8px;
52 | }
53 | .formset .table{
54 | margin-bottom: 0px;
55 | }
56 | .formset .table td{
57 | padding: 4px;
58 | }
59 |
60 | .formset .table td .delete-row{
61 | margin-top: 4px;
62 | display: block;
63 | }
64 |
--------------------------------------------------------------------------------
/static/xadmin/css/xadmin.plugin.quickfilter.css:
--------------------------------------------------------------------------------
1 | .nav-quickfilter .filter-item {
2 | white-space: nowrap;
3 | overflow: hidden;
4 | padding: 5px;
5 | }
6 |
7 | .nav-quickfilter .filter-col-1 {
8 | margin: 3px 2px 0 -2px;
9 | float: left;
10 | }
11 |
12 | .nav-quickfilter .filter-col-2 {
13 | }
14 |
15 | .nav-quickfilter .nav-expand {
16 | z-index:100;
17 | }
--------------------------------------------------------------------------------
/static/xadmin/css/xadmin.plugins.css:
--------------------------------------------------------------------------------
1 | /** Action **/
2 | .action-checkbox-column {
3 | width: 14px;
4 | }
5 |
6 | /** quick-form **/
7 | .quick-form .modal-body {
8 | padding-bottom: 0px;
9 | }
10 | .quick-form .modal-footer {
11 | margin-top: 0px;
12 | }
--------------------------------------------------------------------------------
/static/xadmin/css/xadmin.widget.editable.css:
--------------------------------------------------------------------------------
1 | .editable-handler .popover{
2 | width: auto;
3 | }
4 | .editable .popover-title{
5 | white-space:nowrap;
6 | }
7 | .editable .popover-title .close {
8 | margin: -4px 0px 0px 10px;
9 | }
10 | .editable form .btn-ajax{
11 | display: none;
12 | }
13 | .editable form .control-wrap{
14 | padding-right: 0px;
15 | }
16 | .editable form{
17 | margin-bottom: 0px;
18 | }
19 | .editable form .controls{
20 | margin: 0px;
21 | padding: 0px !important;
22 | border: 0px;
23 | }
24 | .editable form .form-group {
25 | margin: 0px 0px 10px !important;
26 | }
27 | .editable form .control-label{
28 | display: none;
29 | }
30 | .editable form .controls label {
31 | white-space:nowrap;
32 | }
33 |
34 | @media (min-width: 768px) {
35 | .editable form .text-field,
36 | .editable form .textinput {
37 | width: 200px;
38 | }
39 | .editable form .int-field {
40 | width: 150px;
41 | }
42 | .editable form .textarea-field{
43 | width: 250px;
44 | height: 50px;
45 | }
46 |
47 | .editable form select,
48 | .editable form .select2-container {
49 | max-width: 200px;
50 | min-width: 100px;
51 | width: 100%;
52 | }
53 | }
54 | @media (max-width: 767px) {
55 | .popover.editpop{
56 | position: fixed;
57 | top: 30px !important;
58 | left: 10px !important;
59 | right: 10px !important;
60 | z-index: 1040;
61 | max-width: none;
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/static/xadmin/css/xadmin.widget.select-transfer.css:
--------------------------------------------------------------------------------
1 |
2 | .selector {
3 | position: relative;
4 | float: left;
5 | overflow: hidden;
6 | width: 100%;
7 | }
8 | .selector-available, .selector-chosen {
9 | float: left;
10 | width: 45%;
11 | }
12 | .selector.stacked .selector-available, .selector.stacked .selector-chosen {
13 | width: 756px;
14 | }
15 | .selector p.title {
16 | padding: 7px 5px 0px 7px;
17 | font-size: 14px;
18 | line-height: 13px;
19 | font-weight: bold;
20 | }
21 |
22 | .selector .selector-filter {
23 | width: 100%;
24 | }
25 | .selector .selector-available .selector-filter {
26 | }
27 | .selector .selector-chosen .selector-filter {
28 | }
29 | .selector.stacked .selector-filter input[type=text] {
30 | width: 716px !important;
31 | max-width: 716px !important;
32 | }
33 | .selector select[multiple=multiple] {
34 | margin: 0;
35 | padding-left: 3px;
36 | width: 100%;
37 | height: 200px;
38 | display: block;
39 | max-width: none !important;
40 | }
41 | .selector .selector-chosen select[multiple=multiple] {
42 | height: 230px;
43 | }
44 | .selector.stacked select[multiple=multiple] {
45 | width: 757px !important;
46 | max-width: 757px !important;
47 | }
48 | .selector ul.selector-chooser {
49 | float: left;
50 | margin: 100px 2px 0;
51 | padding: 0;
52 | width: 31px;
53 | list-style: none;
54 | }
55 | .selector ul.selector-chooser li {
56 | margin-top: 10px;
57 | }
58 | .selector.stacked ul.selector-chooser {
59 | margin: 4px 0 0 356px;
60 | width: 36px;
61 | }
62 | .selector.stacked ul.selector-chooser li {
63 | float: left;
64 | }
65 | a.selector-chooseall, a.selector-clearall {
66 | display: block;
67 | margin: 0;
68 | padding: 2px 7px;
69 | font-size: 11px;
70 | line-height: 20px;
71 | font-weight: bold;
72 | }
73 | .selector-available, .selector-chosen {
74 | border: 1px solid #ddd;
75 | border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;
76 | background: #eee;
77 | }
78 | .selector h3, .inline-group .selector h3,
79 | .inline-related fieldset .selector-available h3, .inline-related fieldset .selector-chosen h3 {
80 | border: 0;
81 | border-bottom: 1px solid #d0d0d0;
82 | background: transparent;
83 | }
84 | .selector select[multiple=multiple] {
85 | border-left: 0;
86 | border-top: 1px solid #d0d0d0;
87 | border-bottom: 1px solid #d0d0d0;
88 | border-radius: 0; -moz-border-radius: 0; -webkit-border-radius: 0;
89 | }
90 |
91 | a.selector-chooseall, a.selector-clearall {
92 | border-top: 1px solid #e4e4e4;
93 | }
94 |
95 | .selector h3 + select {
96 | border-top: 0;
97 | }
98 |
99 | a.selector-chooseall, a.selector-clearall {
100 | border-top: 1px solid #e4e4e4;
101 | }
102 |
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.main.js:
--------------------------------------------------------------------------------
1 | ;(function($){
2 |
3 | $.fn.exform = function(){
4 | this.each(function () {
5 | var form = $(this);
6 | for (var i = $.fn.exform.renders.length - 1; i >= 0; i--) {
7 | $.fn.exform.renders[i](form)
8 | };
9 | form.addClass('rended');
10 | })
11 | }
12 | $.fn.exform.renders = [];
13 | $(function() {
14 | $('.exform:not(.rended)').exform();
15 | });
16 |
17 | $.getCookie = function(name) {
18 | var cookieValue = null;
19 | if (document.cookie && document.cookie != '') {
20 | var cookies = document.cookie.split(';');
21 | for (var i = 0; i < cookies.length; i++) {
22 | var cookie = jQuery.trim(cookies[i]);
23 | // Does this cookie string begin with the name we want?
24 | if (cookie.substring(0, name.length + 1) == (name + '=')) {
25 | cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
26 | break;
27 | }
28 | }
29 | }
30 | return cookieValue;
31 | }
32 |
33 | //dropdown submenu plugin
34 | $(document)
35 | .on('click.xa.dropdown.data-api touchstart.xa.dropdown.data-api', '.dropdown-submenu', function (e) { e.stopPropagation(); })
36 | .on('click.xa.dropdown.data-api', function(e){
37 | $('.dropdown-submenu.open').removeClass('open');
38 | });
39 |
40 | if ('ontouchstart' in document.documentElement) {
41 | $('.dropdown-submenu a').on('click.xa.dropdown.data-api', function(e){
42 | $(this).parent().toggleClass('open');
43 | });
44 | } else{
45 | $('.dropdown-submenu').on('click.xa.dropdown.data-api mouseover.xa.dropdown.data-api', function(e){
46 | $(this).parent().find('>.dropdown-submenu.open').removeClass('open');
47 | $(this).addClass('open');
48 | });
49 | }
50 |
51 | //toggle class button
52 | $('body').on('click.xa.togglebtn.data-api', '[data-toggle=class]', function (e) {
53 | var $this = $(this), href
54 | var target = $this.attr('data-target')
55 | || e.preventDefault()
56 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
57 | var className = $this.attr('data-class-name')
58 | $(target).toggleClass(className)
59 | })
60 |
61 | // loading btn
62 | // $('.btn.btn-loading,.btn[type=submit]')
63 | // .click(function () {
64 | // var btn = $(this)
65 | // btn.button('loading')
66 | // })
67 |
68 | //.nav-content bar nav-menu
69 | $('.navbar-xs .navbar-nav > li')
70 | .on('shown.bs.dropdown', function(e){
71 | $(this).find('>.dropdown-menu').css('max-height', $(window).height()-120);
72 | $(this).parent().find('>li').addClass('hidden-xs');
73 | $(this).removeClass('hidden-xs');
74 | })
75 | .on('hidden.bs.dropdown', function(e){
76 | $(this).parent().find('>li').removeClass('hidden-xs');
77 | });
78 |
79 | // dashboard widget
80 | $('.widget-form').each(function(e){
81 | var el = $(this);
82 | el.find('.btn-remove').click(function(){
83 | el.find('input[name=_delete]').val('on');
84 | return true;
85 | });
86 | });
87 |
88 | // g-search
89 | $('#g-search .dropdown-menu a').click(function(){
90 | $('#g-search').attr('action', $(this).data('action')).submit();
91 | })
92 |
93 | // save settings
94 | $.save_user_settings = function(key, value, success, error){
95 | var csrftoken = $.getCookie('csrftoken');
96 | $.ajax({
97 | type: 'POST',
98 | url: window.__admin_path_prefix__ + 'settings/user',
99 | data: {'key': key, 'value': value},
100 | success: success,
101 | error: error,
102 | beforeSend: function(xhr, settings) {
103 | xhr.setRequestHeader("X-CSRFToken", csrftoken);
104 | }
105 | });
106 | }
107 |
108 | })(jQuery)
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.page.dashboard.js:
--------------------------------------------------------------------------------
1 | jQuery(function() {
2 | $( ".btn-quick-form" ).click(function(){
3 | var btn = $(this),
4 | form_url;
5 | if(btn.is('a')){
6 | form_url = btn.attr('href');
7 | }
8 | if(form_url == undefined){
9 | form_url = btn.data('form-url');
10 | }
11 | if(!btn.data('form-modal')){
12 | var modal = $('');
16 | $('body').append(modal);
17 | btn.data('form-modal', modal);
18 | modal.find('.modal-body').load(form_url, function(form_html, status, xhr){
19 | var form = $(this).find('form');
20 | form.exform();
21 | modal.find('.btn-submit').click(function(){
22 | var csrftoken = $.getCookie('csrftoken');
23 | //clean form errors
24 | form.find('.text-error,.help-inline.error').remove();
25 | form.find('.control-group').removeClass('error');
26 | $.ajax({
27 | type: 'POST',
28 | url: form.attr('action'),
29 | data: form.serialize(),
30 | success: function(data){
31 | if(data['result'] != 'success' && data['errors']){
32 | var non_fields_errors = [];
33 | for (var i = data['errors'].length - 1; i >= 0; i--) {
34 | var e = data['errors'][i];
35 | var errdiv = form.find('#div_' + e['id']);
36 | if(errdiv.length){
37 | errdiv.addClass('error');
38 | var err_html = [];
39 | for (var i = e['errors'].length - 1; i >= 0; i--) {
40 | err_html.push(''+e['errors'][i]+'');
41 | };
42 | errdiv.find('.controls').append(err_html.join('\n'));
43 | } else {
44 | non_fields_errors = non_fields_errors.concat(e['errors']);
45 | }
46 | };
47 | if(non_fields_errors.length){
48 | var err_html = [];
49 | for (var i = non_fields_errors.length - 1; i >= 0; i--) {
50 | err_html.push(' '+e['errors'][i]+' ');
51 | };
52 | form.prepend(err_html.join('\n'));
53 | }
54 | } else {
55 | btn.trigger('post-success');
56 | }
57 | },
58 | dataType: 'json',
59 | beforeSend: function(xhr, settings) {
60 | xhr.setRequestHeader("X-CSRFToken", csrftoken);
61 | }
62 | });
63 | })
64 | });
65 | }
66 | btn.data('form-modal').modal().css(
67 | {
68 | 'margin-top': function () {
69 | return window.pageYOffset;
70 | }
71 | });
72 | return false;
73 | });
74 |
75 | $('.btn-quick-form').on('post-success', function(e){
76 | window.location.reload();
77 | });
78 | });
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.page.form.js:
--------------------------------------------------------------------------------
1 | ;(function($){
2 | $(function() {
3 | var action_bar = $('.form-actions');
4 | if(action_bar.length){
5 | var height=action_bar[0].offsetTop + action_bar.outerHeight();
6 | var onchange = function(){
7 | var s=(document.body.scrollTop||document.documentElement.scrollTop) + window.innerHeight;
8 | if(s 0){
28 | var first_activated = false;
29 | exform.find('.error').each(function(){
30 | if (!first_activated){
31 | var parent = $(this);
32 | while (!(parent.html() == exform.html())){
33 | if (parent.hasClass('tab-pane')){
34 | parent.addClass('active');
35 | parent.siblings().removeClass('active');
36 | var menu_tab = $('a[href="#' + parent.attr('id') + '"]');
37 | menu_tab.parent().addClass('active');
38 | menu_tab.parent().siblings().removeClass('active');
39 | first_activated = true;
40 |
41 | }
42 | if (parent.hasClass('box-content')){
43 | parent.show();
44 | }
45 | parent = parent.parent();
46 | }
47 | }
48 | });
49 | }
50 | })(jQuery)
51 |
52 |
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.page.list.js:
--------------------------------------------------------------------------------
1 | jQuery(function($){
2 | //full screen btn
3 | $('.layout-btns .layout-full').click(function(e){
4 | var icon = $(this).find('i')
5 | if($(this).hasClass('active')){
6 | // reset
7 | $('#left-side, ul.breadcrumb').show('fast');
8 | $('#content-block').removeClass('col-md-12 col-sm-12 full-content').addClass('col-sm-11 col-md-10');
9 | icon.removeClass('fa-compress').addClass('fa-expand');
10 | $(window).trigger('resize');
11 | } else {
12 | // full screen
13 | $('#left-side, ul.breadcrumb').hide('fast', function(){
14 | $('#content-block').removeClass('col-sm-11 col-md-10').addClass('col-md-12 col-sm-12 full-content');
15 | icon.removeClass('fa-expand').addClass('fa-compress');
16 | $(window).trigger('resize');
17 | });
18 | }
19 | });
20 |
21 | $('.layout-btns .layout-normal').click(function(e){
22 | $('.results table').removeClass('table-condensed');
23 | });
24 |
25 | $('.layout-btns .layout-condensed').click(function(e){
26 | $('.results table').addClass('table-condensed');
27 | });
28 |
29 | });
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.actions.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.fn.actions = function(opts) {
4 | var options = $.extend({}, $.fn.actions.defaults, opts);
5 | var actionCheckboxes = $(this);
6 |
7 | updateCounter = function() {
8 | var sel = $(actionCheckboxes).filter(":checked").length;
9 |
10 | $(options.counterContainer).html(interpolate(
11 | ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
12 | sel: sel,
13 | cnt: _actions_icnt
14 | }, true));
15 |
16 | if (sel == actionCheckboxes.length) {
17 | showQuestion();
18 | $(options.allToggle).prop('checked', true);
19 | } else {
20 | clearAcross();
21 | $(options.allToggle).prop('checked', false);
22 | }
23 | }
24 | showQuestion = function() {
25 | $(options.acrossClears).hide();
26 | $(options.acrossQuestions).show();
27 | $(options.allContainer).hide();
28 | }
29 | showClear = function() {
30 | $(options.acrossClears).show();
31 | $(options.acrossQuestions).hide();
32 | $(options.allContainer).show();
33 | $(options.counterContainer).hide();
34 | }
35 | reset = function() {
36 | $(options.acrossClears).hide();
37 | $(options.acrossQuestions).hide();
38 | $(options.allContainer).hide();
39 | $(options.counterContainer).show();
40 | }
41 | clearAcross = function() {
42 | reset();
43 | $(options.acrossInput).val(0);
44 | }
45 |
46 | // Show counter by default
47 | $(options.counterContainer).show();
48 | $(options.allToggle).show().click(function() {
49 | $(actionCheckboxes).trigger('checker', $(this).is(":checked"));
50 | });
51 |
52 | $("div.form-actions .question").click(function(event) {
53 | event.preventDefault();
54 | $(options.acrossInput).val(1);
55 | showClear();
56 | });
57 | $("div.form-actions .clear").click(function(event) {
58 | event.preventDefault();
59 | $(options.allToggle).prop("checked", false);
60 | $(actionCheckboxes).trigger('checker', false);
61 | clearAcross();
62 | });
63 |
64 | $(actionCheckboxes).bind('checker', function(e, checked){
65 | $(this).prop("checked", checked)
66 | .parentsUntil('.grid-item').parent().toggleClass(options.selectedClass, checked);
67 | updateCounter();
68 | });
69 |
70 | lastChecked = null;
71 | $(actionCheckboxes).click(function(event) {
72 | if (!event) { var event = window.event; }
73 | var target = event.target ? event.target : event.srcElement;
74 |
75 | if (lastChecked && $.data(lastChecked) != $.data(target) && event.shiftKey == true) {
76 | var inrange = false;
77 | $(lastChecked).trigger('checker', target.checked);
78 | $(actionCheckboxes).each(function() {
79 | if ($.data(this) == $.data(lastChecked) || $.data(this) == $.data(target)) {
80 | inrange = (inrange) ? false : true;
81 | }
82 | if (inrange) {
83 | $(this).trigger('checker', target.checked);
84 | }
85 | });
86 | }
87 |
88 | $(target).trigger('checker', target.checked);
89 | lastChecked = target;
90 | });
91 |
92 | // Check state of checkboxes and reinit state if needed
93 | $(this).filter(":checked").trigger('checker', true);
94 | updateCounter();
95 | if ($(options.acrossInput).val() == 1) {
96 | showClear();
97 | }
98 | }
99 | /* Setup plugin defaults */
100 | $.fn.actions.defaults = {
101 | counterContainer: "div.form-actions .action-counter",
102 | allContainer: "div.form-actions .all",
103 | acrossInput: "div.form-actions #select-across",
104 | acrossQuestions: "div.form-actions .question",
105 | acrossClears: "div.form-actions .clear",
106 | allToggle: "#action-toggle",
107 | selectedClass: "warning"
108 | }
109 |
110 | $.do_action = function(name){
111 | $('#action').val(name);
112 | $('#changelist-form').submit();
113 | }
114 |
115 | $(document).ready(function($) {
116 | $(".results input.action-select").actions();
117 | });
118 | })(jQuery);
119 |
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.batch.js:
--------------------------------------------------------------------------------
1 |
2 | ;(function($){
3 |
4 | $('.batch-field-checkbox').bind('click', function(event){
5 | if (!event) { var event = window.event; }
6 | var target = event.target ? event.target : event.srcElement;
7 |
8 | var wrap = $(this).parent().parent().find('.control-wrap');
9 | if(target.checked){
10 | wrap.show('fast');
11 | } else {
12 | wrap.hide('fast');
13 | }
14 | });
15 |
16 | })(jQuery)
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.bookmark.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $(function(){
4 | $('#bookmark_form').each(function(){
5 | var f = $(this);
6 | f.submit(function(e){
7 | f.find('button[type=submit]').button('loading');
8 | $.post(f.attr('action'), f.serialize(), function(data){
9 | $('#bookmark-menu .add-bookmark').remove();
10 | $('#bookmark-menu').append(' '+ data.title +'');
11 | }, 'json');
12 | return false;
13 | });
14 | });
15 | });
16 |
17 | })(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.charts.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function(){
2 |
3 | function showTooltip(x, y, contents) {
4 | $('' + contents + ' ').css( {
5 | position: 'absolute',
6 | display: 'none',
7 | top: y + 5,
8 | left: x + 5
9 | }).appendTo("body").fadeIn(200);
10 | }
11 |
12 | $.fn.chart = function(){
13 | $(this).each(function(){
14 | var $chart = $(this);
15 |
16 | if($chart.data('chart-obj')) return;
17 |
18 | $chart.html(' Loading chart...');
19 |
20 | $.getJSON($chart.data('chart-url'), function(data){
21 | var chart = $.plot($chart, data.data, data.option);
22 | var previousPoint = null;
23 | $chart.bind("plothover", function (event, pos, item) {
24 | if (item) {
25 | if (previousPoint != item.dataIndex) {
26 | previousPoint = item.dataIndex;
27 |
28 | $("#chart-tooltip").remove();
29 | var x = item.series.xaxis.tickFormatter(item.datapoint[0], item.series.xaxis),
30 | y = item.series.yaxis.tickFormatter(item.datapoint[1], item.series.yaxis);
31 | if (item.series.xaxis.options.mode=="categories") {
32 | x = item.series.data[item.dataIndex][0];
33 | }
34 | if (item.series.yaxis.options.mode=="categories") {
35 | y = item.series.data[item.dataIndex][1];
36 | }
37 | showTooltip(item.pageX, item.pageY,
38 | item.series.label + " : (" + x + " , " + y+")");
39 | }
40 | } else {
41 | $("#chart-tooltip").remove();
42 | previousPoint = null;
43 | }
44 | });
45 | $chart.data('chart-obj', chart);
46 | });
47 | })
48 | }
49 |
50 | $('.chart-tab a').click(function(e){
51 | e.preventDefault();
52 | $(this).tab('show');
53 |
54 | $($(this).attr('href')).chart();
55 | });
56 | $('.chart-tab a:first').click();
57 | $('.chart.init').chart();
58 | });
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.details.js:
--------------------------------------------------------------------------------
1 | (function($){
2 |
3 | var DetailsPop = function(element){
4 | this.$element = $(element);
5 | this.res_uri = this.$element.data('res-uri');
6 | this.edit_uri = this.$element.data('edit-uri');
7 | this.obj_data = null;
8 |
9 | this.$element.on('click', $.proxy(this.click, this));
10 | };
11 |
12 | DetailsPop.prototype = {
13 | constructor: DetailsPop,
14 |
15 | click: function(e){
16 | e.stopPropagation();
17 | e.preventDefault();
18 | var modal = $('#detail-modal-id');
19 | var el = this.$element;
20 | if(!modal.length){
21 | modal = $('');
26 | $('body').append(modal);
27 | }
28 | modal.find('.modal-title').html(el.attr('title'));
29 | modal.find('.edit-btn').attr('href', this.edit_uri);
30 | modal.find('.modal-body').html('');
31 | modal.find('.modal-body').load(this.res_uri + '?_format=html', function(response, status, xhr) {
32 | if (status == "error") {
33 | var msg = "Sorry but there was an error: ";
34 | modal.find('.modal-body').html(msg + xhr.status + " " + (typeof xhr === 'string' ? xhr : xhr.responseText || xhr.statusText || 'Unknown error!'));
35 | }
36 | });
37 | modal.modal();
38 | }
39 | };
40 |
41 | $.fn.details = function () {
42 | return this.each(function () {
43 | var $this = $(this), data = $this.data('details');
44 | if (!data) {
45 | $this.data('details', (data = new DetailsPop(this)));
46 | }
47 | });
48 | };
49 |
50 | $(function(){
51 | $('.details-handler').details();
52 | });
53 |
54 | })(jQuery);
55 |
56 |
57 |
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.filters.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $(function(){
4 |
5 | // filter
6 | $('.filter-multiselect input[type=checkbox]').click(function(e){
7 | window.location.href = $(this).parent().attr('href');
8 | });
9 |
10 | // menber filter
11 | $('.filter-number .remove').click(function(e){
12 | $(this).parent().parent().find('input[type="number"]').val('');
13 | });
14 |
15 | $('.filter-number .toggle').click(function(e){
16 | var new_name = $(this).hasClass('active') ? $(this).attr('data-off-name') : $(this).attr('data-on-name');
17 | $(this).parent().parent().find('input[type="number"]').attr('name', new_name);
18 | });
19 |
20 | $('#filter-menu form').submit(function(){
21 | $(this).find('input[type="text"],input[type="number"]').each(function(e){
22 | if(!$(this).val()) $(this).attr('name', '');
23 | });
24 | return true;
25 | });
26 |
27 | $('.menu-date-range form').each(function(){
28 | var el = $(this);
29 | var start_date = el.find('.calendar.date-start').datepicker({format: $.date_local.dateJSFormat, language: 'xadmin'});
30 | var end_date = el.find('.calendar.date-end').datepicker({format: $.date_local.dateJSFormat, language: 'xadmin'});
31 |
32 | var checkAvailable = function(){
33 | if(start_date.data('datepicker').getDate().valueOf() <= end_date.data('datepicker').getDate().valueOf()){
34 | el.find('button[type=submit]').removeAttr('disabled');
35 | } else {
36 | el.find('button[type=submit]').attr('disabled', 'disabled');
37 | }
38 | }
39 |
40 | start_date.on('changeDate', function(ev){
41 | var startdate = start_date.data('date');
42 | el.find('.start_input').val(startdate);
43 | end_date.data('datepicker').setStartDate(startdate);
44 | checkAvailable();
45 | });
46 | end_date.on('changeDate', function(ev){
47 | var enddate = end_date.data('date');
48 | el.find('.end_input').val(enddate);
49 | start_date.data('datepicker').setEndDate(enddate);
50 | checkAvailable();
51 | });
52 |
53 | checkAvailable();
54 | });
55 | });
56 |
57 | })(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.portal.js:
--------------------------------------------------------------------------------
1 | jQuery(function() {
2 | $( ".column" ).sortable({
3 | connectWith: ".column",
4 | handle: '.panel-heading',
5 | forcePlaceholderSize: true,
6 | cursor: "move",
7 | cancel: ".unsort, .tab-content",
8 | stop: function( event, ui ) {
9 | var pos = [];
10 | $('.column').each(function(){
11 | var col = [];
12 | $(this).find('.panel').each(function(){
13 | col.push($(this).attr('id'));
14 | });
15 | pos.push(col.join(','));
16 | });
17 | var pos_val = pos.join('|');
18 | var key = $('#_portal_key').val();
19 | $.save_user_settings(key, pos_val, function(){
20 | //alert('success');
21 | });
22 | }
23 | });
24 |
25 | $( ".panel-heading .icon.chevron" ).click(function() {
26 | $( this ).toggleClass( "fa fa-chevron-up" ).toggleClass( "fa fa-chevron-down" );
27 | $( this ).parents( ".panel:first" ).find( ".panel-body" ).toggle('fast');
28 | });
29 |
30 | });
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.quickfilter.js:
--------------------------------------------------------------------------------
1 | ;(function($){
2 | $('[data-toggle=tooltip]').tooltip();
3 | var max=10;
4 |
5 | function addShowMore($,v){
6 | $(v).nextUntil('li.nav-header').last().after(
7 | $('Show more').click(function(e){
8 | e.preventDefault();
9 | e.stopPropagation();
10 | $(v).nextUntil('li.nav-header').show();
11 | $(v).nextUntil('li.nav-header').last().remove();
12 | addShowLess($,v);
13 | })
14 | );
15 | $(v).nextUntil('li.nav-header').last().show();
16 | }
17 |
18 | function addShowLess($,v){
19 | $(v).nextUntil('li.nav-header').last().after(
20 | $('Show less').click(function(e){
21 | e.preventDefault();
22 | e.stopPropagation();
23 | $(v).nextUntil('li.nav-header').filter(function(i){return !$(this).find('input').is(':checked');}).slice(max).hide();
24 | $(v).nextUntil('li.nav-header').last().remove();
25 | $(v).scrollMinimal(3000);
26 | addShowMore($,v);
27 | })
28 | );
29 | $(v).nextUntil('li.nav-header').last().show();
30 | }
31 |
32 | $.each($('.nav-quickfilter li.nav-header'),function(i,v){
33 | if ($(v).nextUntil('li.nav-header').size()>max) {
34 | $(v).nextUntil('li.nav-header').filter(function(i){return !$(this).find('input').is(':checked');}).slice(max).hide();
35 | addShowMore($,v);
36 | }
37 | });
38 |
39 | $('.nav-quickfilter li.nav-header').on('click',function(e) {
40 | e.preventDefault();
41 | e.stopPropagation();
42 | $('.nav-quickfilter li.nav-header i').toggleClass('icon-chevron-right');
43 | $('.nav-quickfilter li.nav-header i').toggleClass('icon-chevron-left');
44 | $('#left-side').toggleClass('col-md-2');
45 | $('#left-side').toggleClass('col-md-4');
46 | $('#content-block').toggleClass('col-md-10');
47 | $('#content-block').toggleClass('col-md-8');
48 | });
49 | })(jQuery)
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.refresh.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.dofresh = function(){
4 | var refresh_el = $('#refresh_time');
5 | var time = parseInt(refresh_el.text());
6 | if(time == 1){
7 | refresh_el.text(0);
8 | window.location.reload();
9 | } else {
10 | refresh_el.text(time-1);
11 | setTimeout("$.dofresh()",1000)
12 | }
13 | };
14 |
15 | $(function(){
16 | var refresh_el = $('#refresh_time');
17 | if(refresh_el){
18 | setTimeout("$.dofresh()",1000)
19 | }
20 | });
21 |
22 | })(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.revision.js:
--------------------------------------------------------------------------------
1 | jQuery(function($){
2 | $('.diff_field').each(function(){
3 | var el = $(this);
4 | var textarea = el.find('textarea.org-data');
5 | var title = el.data('org-data') || el.attr('title');
6 | if(textarea.length){
7 | title = textarea.val();
8 | }
9 | el.find('.controls').tooltip({
10 | title: title,
11 | html: true
12 | })
13 | });
14 |
15 | $('.formset-content .formset-row').each(function(){
16 | var row = $(this);
17 | var del = row.find('input[id $= "-DELETE"]');
18 | if(del.val() == 'on' || del.val() == 'True'){
19 | row.addClass('row-deleted');
20 | del.val('on');
21 | }
22 | var idinput = row.find('input[id $= "-id"]');
23 | if(idinput.val() == '' || idinput.val() == undefined){
24 | row.addClass('row-added');
25 | row.find('.formset-num').html(gettext('New Item'));
26 | }
27 | });
28 | });
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.sortable.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $(function(){
4 | $(".results table tbody").sortable({
5 | axis: 'y',
6 | items: 'tr',
7 | //handle: 'a.sort_hand',
8 | cursor: 'move',
9 | opacity: 0.8,
10 | stop: function(event, ui) {
11 | //alert(0);
12 | }
13 | });
14 | });
15 |
16 | })(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.plugin.themes.js:
--------------------------------------------------------------------------------
1 | (function($) {
2 |
3 | $.setCookie = function(name, value, options){
4 | options = options || {};
5 | if (value === null) {
6 | value = '';
7 | options.expires = -1;
8 | }
9 | var expires = '';
10 | if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
11 | var date;
12 | if (typeof options.expires == 'number') {
13 | date = new Date();
14 | date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
15 | } else {
16 | date = options.expires;
17 | }
18 | expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
19 | }
20 | var path = options.path ? '; path=' + options.path : '';
21 | var domain = options.domain ? '; domain=' + options.domain : '';
22 | var secure = options.secure ? '; secure' : '';
23 | document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
24 | }
25 |
26 | $(function(){
27 | var top_nav = $('#top-nav');
28 | $('#body-content').css('margin-top', (top_nav.height() + 15) + 'px');
29 |
30 | if($("#g-theme-menu")){
31 | $('#g-theme-menu li>a').click(function(){
32 | var $el = $(this);
33 | var themeHref = $el.data('css-href');
34 |
35 | var topmenu = $('#top-nav .navbar-collapse');
36 | if(topmenu.data('bs.collapse')) topmenu.collapse('hide');
37 |
38 | var modal = $('');
40 | $('body').append(modal);
41 |
42 | modal.on('shown.bs.modal', function(){
43 | $.save_user_settings("site-theme", themeHref, function(){
44 | $.setCookie('_theme', themeHref);
45 |
46 | var iframe = document.createElement("IFRAME");
47 | iframe.style.display = 'none';
48 | document.body.appendChild(iframe);
49 |
50 | modal.on('hidden', function(e){
51 | if(iframe){
52 | $(iframe).unbind('load');
53 | iframe.parentNode.removeChild(iframe);
54 | iframe = null;
55 | }
56 | modal.remove();
57 | });
58 |
59 | $(iframe).load(function () {
60 | $('#site-theme').attr('href', themeHref);
61 |
62 | setTimeout(function(){
63 | var nav_height = $('#top-nav').height();
64 | $('#body-content').animate({'margin-top': (nav_height + 15)}, 500, 'easeOutBounce');
65 | }, 500);
66 |
67 | modal.modal('hide');
68 | iframe.parentNode.removeChild(iframe);
69 | iframe = null;
70 | })
71 |
72 | var ifmDoc = iframe.contentDocument || iframe.contentWindow.document;
73 | ifmDoc.open();
74 | ifmDoc.write('');
75 | ifmDoc.write('');
76 | ifmDoc.write('');
77 | ifmDoc.close();
78 |
79 |
80 | $('#g-theme-menu li').removeClass('active');
81 | $el.parent().addClass('active');
82 | });
83 | })
84 |
85 | modal.modal().css(
86 | {
87 | 'margin-top': function () {
88 | return window.pageYOffset;
89 | }
90 | });
91 | })
92 | }
93 | });
94 |
95 | })(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.widget.datetime.js:
--------------------------------------------------------------------------------
1 | ;(function($){
2 | $.convert_format = function(format){
3 | var fields = {
4 | d: 'dd',
5 | H: 'hh',
6 | I: "HH",
7 | m: 'mm',
8 | M: 'MM',
9 | p: 'PM/AM',
10 | S: 'ss',
11 | w: 'w',
12 | y: 'yy',
13 | Y: 'yyyy',
14 | '%' : '%'
15 | };
16 | var result = '', i = 0;
17 | while (i < format.length) {
18 | if (format.charAt(i) === '%') {
19 | if(f = fields[format.charAt(i + 1)]){
20 | result = result + f;
21 | }
22 | ++i;
23 | } else {
24 | result = result + format.charAt(i);
25 | }
26 | ++i;
27 | }
28 | return result;
29 | }
30 |
31 | $.date_local = {
32 | days: gettext("Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday").split(' '),
33 | daysShort: gettext("Sun Mon Tue Wed Thu Fri Sat Sun").split(' '),
34 | daysMin: gettext("Su Mo Tu We Th Fr Sa Su").split(' '),
35 | months: gettext('January February March April May June July August September October November December').split(' '),
36 | monthsShort: gettext("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec").split(' '),
37 | today: gettext("Today"),
38 | date_string: gettext('%a %d %b %Y %T %Z'),
39 | ampm: gettext("AM PM").split(' '),
40 | ampmLower: gettext("am pm").split(' '),
41 | dateFormat: get_format('DATE_INPUT_FORMATS')[0],
42 | dateJSFormat: $.convert_format(get_format('DATE_INPUT_FORMATS')[0]),
43 | timeRepr: gettext('%T')
44 | }
45 |
46 | $.fn.datepicker.dates['xadmin'] = $.date_local;
47 |
48 | $.fn.exform.renders.push(function(f){
49 | f.find('.input-group.date input').each(function(e){
50 | var dp = $(this).datepicker({format: $.date_local.dateJSFormat, language: 'xadmin', todayBtn: "linked", autoclose: true})
51 | .data('datepicker');
52 | $(this).parent().find('button').click(function(e){
53 | dp.update(new Date());
54 | })
55 | })
56 | if($.fn.timepicker){
57 | f.find('.input-group.time').each(function(e){
58 | var el = $(this).find('input');
59 | var value = el.val();
60 | var tp = el.timepicker({
61 | minuteStep: 1,
62 | showSeconds: true,
63 | showMeridian: false,
64 | defaultTime: false
65 | }).data('timepicker');
66 | $(this).find('button').click(function(e){
67 | tp.$element.val("");
68 | tp.setDefaultTime('current');
69 | tp.update();
70 | })
71 | })
72 | }
73 | });
74 |
75 | })(jQuery)
76 |
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.widget.multiselect.js:
--------------------------------------------------------------------------------
1 |
2 | ;(function($){
3 |
4 | $.fn.exform.renders.push(function(f){
5 | if($.fn.multiselect){
6 | f.find('.selectmultiple.selectdropdown').multiselect({
7 |
8 | });
9 | }
10 | });
11 |
12 | })(jQuery)
--------------------------------------------------------------------------------
/static/xadmin/js/xadmin.widget.select.js:
--------------------------------------------------------------------------------
1 | ;(function($){
2 | // add select2 render
3 | if(!window.__admin_ismobile__){
4 | $.fn.exform.renders.push(function(f){
5 | if($.fn.selectize){
6 | f.find('select:not(.select-search):not([multiple=multiple])').selectize();
7 | f.find('.select-search').each(function(){
8 | var $el = $(this);
9 | $el.select2({
10 | minimumInputLength: 1,
11 | initSelection: function(elem, callback){
12 | callback({id: elem.val(), '__str__': $el.data('label')});
13 | },
14 | ajax: {
15 | url: $el.data('search-url')+$el.data('choices'),
16 | dataType: 'json',
17 | data: function (term, page) {
18 | return {
19 | '_q_' : term,
20 | '_cols': 'id.__str__',
21 | 'p': page - 1
22 | };
23 | },
24 | results: function (data, page) {
25 | return {results: data.objects, more: data.has_more};
26 | }
27 | },
28 | formatResult: function(item){return item['__str__']},
29 | formatSelection: function(item){return item['__str__']}
30 | });
31 | })
32 | }});
33 | } else {
34 | $.fn.exform.renders.push(function(f){
35 | if($.fn.select2){
36 | f.find('.select-search').each(function(){
37 | var $el = $(this);
38 | $el.select2({
39 | minimumInputLength: 1,
40 | initSelection: function(elem, callback){
41 | callback({id: elem.val(), '__str__': $el.data('label')});
42 | },
43 | ajax: {
44 | url: $el.data('search-url')+$el.data('choices'),
45 | dataType: 'json',
46 | data: function (term, page) {
47 | return {
48 | '_q_' : term,
49 | '_cols': 'id.__str__',
50 | 'p': page - 1
51 | };
52 | },
53 | results: function (data, page) {
54 | return {results: data.objects, more: data.has_more};
55 | }
56 | },
57 | formatResult: function(item){return item['__str__']},
58 | formatSelection: function(item){return item['__str__']}
59 | });
60 | })
61 | }});
62 | }
63 | })(jQuery)
64 |
65 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.bg.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Bulgarian translation for bootstrap-datepicker
3 | * Apostol Apostolov
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['bg'] = {
7 | days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"],
8 | daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"],
9 | daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"],
10 | months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"],
11 | monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"],
12 | today: "днес"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.ca.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Catalan translation for bootstrap-datepicker
3 | * J. Garcia
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['ca'] = {
7 | days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"],
8 | daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"],
9 | daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"],
10 | months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"],
11 | monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"],
12 | today: "Avui"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.cs.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Czech translation for bootstrap-datepicker
3 | * Matěj Koubík
4 | * Fixes by Michal Remiš
5 | */
6 | ;(function($){
7 | $.fn.datepicker.dates['cs'] = {
8 | days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"],
9 | daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"],
10 | daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"],
11 | months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"],
12 | monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"],
13 | today: "Dnes"
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.da.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Danish translation for bootstrap-datepicker
3 | * Christian Pedersen
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['da'] = {
7 | days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"],
8 | daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
9 | daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
10 | months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
12 | today: "I Dag"
13 | };
14 | }(jQuery));
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.de.js:
--------------------------------------------------------------------------------
1 | /**
2 | * German translation for bootstrap-datepicker
3 | * Sam Zurcher
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['de'] = {
7 | days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"],
8 | daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"],
9 | daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"],
10 | months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
11 | monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
12 | today: "Heute",
13 | weekStart: 1,
14 | format: "dd.mm.yyyy"
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.el.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Greek translation for bootstrap-datepicker
3 | */
4 | ;(function($){
5 | $.fn.datepicker.dates['el'] = {
6 | days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"],
7 | daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"],
8 | daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"],
9 | months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"],
10 | monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"],
11 | today: "Σήμερα"
12 | };
13 | }(jQuery));
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.es.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Spanish translation for bootstrap-datepicker
3 | * Bruno Bonamin
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['es'] = {
7 | days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"],
8 | daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"],
9 | daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"],
10 | months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
11 | monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
12 | today: "Hoy"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.fi.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Finnish translation for bootstrap-datepicker
3 | * Jaakko Salonen
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['fi'] = {
7 | days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"],
8 | daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"],
9 | daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"],
10 | months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"],
11 | monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"],
12 | today: "tänään"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.fr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * French translation for bootstrap-datepicker
3 | * Nico Mollet
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['fr'] = {
7 | days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"],
8 | daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"],
9 | daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"],
10 | months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"],
11 | monthsShort: ["Jan", "Fev", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec"],
12 | today: "Aujourd'hui",
13 | weekStart: 1,
14 | format: "dd/mm/yyyy"
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.he.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Hebrew translation for bootstrap-datepicker
3 | * Sagie Maoz
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['he'] = {
7 | days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"],
8 | daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
9 | daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"],
10 | months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
11 | monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"],
12 | today: "היום",
13 | rtl: true
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.hr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Croatian localisation
3 | */
4 | ;(function($){
5 | $.fn.datepicker.dates['hr'] = {
6 | days: ["Nedjelja", "Ponedjelja", "Utorak", "Srijeda", "Četrtak", "Petak", "Subota", "Nedjelja"],
7 | daysShort: ["Ned", "Pon", "Uto", "Srr", "Čet", "Pet", "Sub", "Ned"],
8 | daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"],
9 | months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"],
10 | monthsShort: ["Sije", "Velj", "Ožu", "Tra", "Svi", "Lip", "Jul", "Kol", "Ruj", "Lis", "Stu", "Pro"],
11 | today: "Danas"
12 | };
13 | }(jQuery));
14 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.hu.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Hungarian translation for bootstrap-datepicker
3 | * Sotus László
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['hu'] = {
7 | days: ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"],
8 | daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo", "Vas"],
9 | daysMin: ["Va", "Hé", "Ke", "Sz", "Cs", "Pé", "Sz", "Va"],
10 | months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"],
11 | monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"],
12 | today: "Ma",
13 | weekStart: 1,
14 | format: "yyyy.mm.dd"
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.id.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Bahasa translation for bootstrap-datepicker
3 | * Azwar Akbar
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['id'] = {
7 | days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"],
8 | daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"],
9 | daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"],
10 | months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"]
12 | };
13 | }(jQuery));
14 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.is.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Icelandic translation for bootstrap-datepicker
3 | * Hinrik Örn Sigurðsson
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['is'] = {
7 | days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"],
8 | daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"],
9 | daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"],
10 | months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"],
12 | today: "Í Dag"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.it.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Italian translation for bootstrap-datepicker
3 | * Enrico Rubboli
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['it'] = {
7 | days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"],
8 | daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"],
9 | daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"],
10 | months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
11 | monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
12 | today: "Oggi",
13 | weekStart: 1,
14 | format: "dd/mm/yyyy"
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.ja.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Japanese translation for bootstrap-datepicker
3 | * Norio Suzuki
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['ja'] = {
7 | days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"],
8 | daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"],
9 | daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"],
10 | months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
11 | monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
12 | today: "今日",
13 | format: "yyyy/mm/dd"
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.kr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Korean translation for bootstrap-datepicker
3 | * Gu Youn
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['kr'] = {
7 | days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"],
8 | daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"],
9 | daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"],
10 | months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
11 | monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]
12 | };
13 | }(jQuery));
14 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.lt.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Lithuanian translation for bootstrap-datepicker
3 | * Šarūnas Gliebus
4 | */
5 |
6 | ;(function($){
7 | $.fn.datepicker.dates['lt'] = {
8 | days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"],
9 | daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"],
10 | daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"],
11 | months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"],
12 | monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"],
13 | today: "Šiandien",
14 | weekStart: 1
15 | };
16 | }(jQuery));
17 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.lv.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Latvian translation for bootstrap-datepicker
3 | * Artis Avotins
4 | */
5 |
6 | ;(function($){
7 | $.fn.datepicker.dates['lv'] = {
8 | days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"],
9 | daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"],
10 | daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "St", "Sv"],
11 | months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"],
12 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec."],
13 | today: "Šodien",
14 | weekStart: 1
15 | };
16 | }(jQuery));
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.ms.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Malay translation for bootstrap-datepicker
3 | * Ateman Faiz
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['ms'] = {
7 | days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"],
8 | daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"],
9 | daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"],
10 | months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"],
12 | today: "Hari Ini"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.nb.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Norwegian (bokmål) translation for bootstrap-datepicker
3 | * Fredrik Sundmyhr
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['nb'] = {
7 | days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"],
8 | daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
9 | daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
10 | months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"],
12 | today: "I Dag"
13 | };
14 | }(jQuery));
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.nl.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Dutch translation for bootstrap-datepicker
3 | * Reinier Goltstein
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['nl'] = {
7 | days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"],
8 | daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
9 | daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
10 | months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
11 | monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
12 | today: "Vandaag"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.pl.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Polish translation for bootstrap-datepicker
3 | * Robert
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['pl'] = {
7 | days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"],
8 | daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"],
9 | daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"],
10 | months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
11 | monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"],
12 | today: "Dzisiaj",
13 | weekStart: 1
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.pt-BR.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Brazilian translation for bootstrap-datepicker
3 | * Cauan Cabral
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['pt-BR'] = {
7 | days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
8 | daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
9 | daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
10 | months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
11 | monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
12 | today: "Hoje"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.pt.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Portuguese translation for bootstrap-datepicker
3 | * Original code: Cauan Cabral
4 | * Tiago Melo
5 | */
6 | ;(function($){
7 | $.fn.datepicker.dates['pt'] = {
8 | days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
9 | daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
10 | daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
11 | months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
12 | monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"]
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.ro.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Romanian translation for bootstrap-datepicker
3 | * Cristian Vasile
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['ro'] = {
7 | days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"],
8 | daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"],
9 | daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"],
10 | months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"],
11 | monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"],
12 | today: "Astăzi",
13 | weekStart: 1
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.rs-latin.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Serbian latin translation for bootstrap-datepicker
3 | * Bojan Milosavlević
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['rs'] = {
7 | days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"],
8 | daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"],
9 | daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"],
10 | months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
12 | today: "Danas"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.rs.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Serbian cyrillic translation for bootstrap-datepicker
3 | * Bojan Milosavlević
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['rs'] = {
7 | days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"],
8 | daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"],
9 | daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"],
10 | months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"],
11 | monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"],
12 | today: "Данас"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.ru.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Russian translation for bootstrap-datepicker
3 | * Victor Taranenko
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['ru'] = {
7 | days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"],
8 | daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"],
9 | daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"],
10 | months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
11 | monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
12 | today: "Сегодня"
13 | };
14 | }(jQuery));
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.sk.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Slovak translation for bootstrap-datepicker
3 | * Marek Lichtner
4 | * Fixes by Michal Remiš
5 | */
6 | ;(function($){
7 | $.fn.datepicker.dates["sk"] = {
8 | days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"],
9 | daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"],
10 | daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So", "Ne"],
11 | months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"],
12 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"],
13 | today: "Dnes"
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.sl.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Slovene translation for bootstrap-datepicker
3 | * Gregor Rudolf
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['sl'] = {
7 | days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"],
8 | daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"],
9 | daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"],
10 | months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
12 | today: "Danes"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.sv.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Swedish translation for bootstrap-datepicker
3 | * Patrik Ragnarsson
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['sv'] = {
7 | days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"],
8 | daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"],
9 | daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"],
10 | months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"],
11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
12 | today: "I Dag"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.sw.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Swahili translation for bootstrap-datepicker
3 | * Edwin Mugendi
4 | * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku
5 | */
6 | ;(function($){
7 | $.fn.datepicker.dates['sw'] = {
8 | days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"],
9 | daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"],
10 | daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"],
11 | months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"],
12 | monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"],
13 | today: "Leo"
14 | };
15 | }(jQuery));
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.th.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Thai translation for bootstrap-datepicker
3 | * Suchau Jiraprapot
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['th'] = {
7 | days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"],
8 | daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
9 | daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
10 | months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"],
11 | monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."],
12 | today: "วันนี้"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.tr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Turkish translation for bootstrap-datepicker
3 | * Serkan Algur
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['tr'] = {
7 | days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"],
8 | daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"],
9 | daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"],
10 | months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
11 | monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"],
12 | today: "Bugün"
13 | };
14 | }(jQuery));
15 |
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.uk.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Ukrainian translation for bootstrap-datepicker
3 | * Andrey Vityuk
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['uk'] = {
7 | days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя"],
8 | daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"],
9 | daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"],
10 | months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"],
11 | monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"],
12 | today: "Сьогодні"
13 | };
14 | }(jQuery));
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.zh-CN.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Simplified Chinese translation for bootstrap-datepicker
3 | * Yuan Cheung
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['zh-CN'] = {
7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
12 | today: "今日"
13 | };
14 | }(jQuery));
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-datepicker/js/locales/bootstrap-datepicker.zh-TW.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Traditional Chinese translation for bootstrap-datepicker
3 | * Rung-Sheng Jang
4 | */
5 | ;(function($){
6 | $.fn.datepicker.dates['zh-TW'] = {
7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
12 | };
13 | }(jQuery));
14 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-image-gallery/css/bootstrap-image-gallery.css:
--------------------------------------------------------------------------------
1 | @charset 'UTF-8';
2 | /*
3 | * Bootstrap Image Gallery CSS 2.5.3
4 | * https://github.com/blueimp/Bootstrap-Image-Gallery
5 | *
6 | * Copyright 2011, Sebastian Tschan
7 | * https://blueimp.net
8 | *
9 | * Licensed under the MIT license:
10 | * http://www.opensource.org/licenses/MIT
11 | */
12 |
13 | .modal-gallery {
14 | }
15 | .modal-gallery.fade.in {
16 | }
17 | .modal-gallery .modal-body {
18 | }
19 | .modal-gallery .modal-title {
20 | }
21 | .modal-gallery .modal-image {
22 | position: relative;
23 | margin: auto;
24 | min-width: 128px;
25 | min-height: 128px;
26 | overflow: hidden;
27 | cursor: pointer;
28 | }
29 | .modal-gallery .modal-footer {
30 | margin-top: 0px;
31 | }
32 | .modal-gallery .modal-image:hover:before,
33 | .modal-gallery .modal-image:hover:after {
34 | content: '\2039';
35 | position: absolute;
36 | top: 50%;
37 | left: 15px;
38 | width: 40px;
39 | height: 40px;
40 | margin-top: -20px;
41 | font-size: 60px;
42 | font-weight: 100;
43 | line-height: 24px;
44 | color: #ffffff;
45 | text-align: center;
46 | background: #222222;
47 | border: 3px solid #ffffff;
48 | -webkit-border-radius: 23px;
49 | -moz-border-radius: 23px;
50 | border-radius: 23px;
51 | opacity: 0.5;
52 | filter: alpha(opacity=50);
53 | z-index: 1;
54 | }
55 | .modal-gallery .modal-image:hover:after {
56 | content: '\203A';
57 | left: auto;
58 | right: 15px;
59 | }
60 | .modal-single .modal-image:hover:before,
61 | .modal-single .modal-image:hover:after {
62 | display: none;
63 | }
64 | .modal-gallery.fade .modal-image, .modal-gallery.fade .modal-dialog {
65 | -webkit-transition: width 0.15s ease, height 0.15s ease;
66 | -moz-transition: width 0.15s ease, height 0.15s ease;
67 | -ms-transition: width 0.15s ease, height 0.15s ease;
68 | -o-transition: width 0.15s ease, height 0.15s ease;
69 | transition: width 0.15s ease, height 0.15s ease;
70 | }
71 | .modal-gallery .modal-image *:not(.loader) {
72 | position: absolute;
73 | top: 0;
74 | }
75 | .modal-gallery .modal-image *:not(.loader) {
76 | opacity: 0;
77 | filter: alpha(opacity=0);
78 | }
79 | .modal-gallery .modal-image h1.loader {
80 | height: 50%;
81 | width: 100%;
82 | text-align: center;
83 | font-size: 4em;
84 | display: none;
85 | }
86 | .modal-loading.modal-gallery .modal-image h1.loader {
87 | display: block;
88 | }
89 | .modal-gallery.fade .modal-image * {
90 | -webkit-transition: opacity 0.5s linear;
91 | -moz-transition: opacity 0.5s linear;
92 | -ms-transition: opacity 0.5s linear;
93 | -o-transition: opacity 0.5s linear;
94 | transition: opacity 0.5s linear;
95 | }
96 | .modal-gallery .modal-image *.in {
97 | opacity: 1;
98 | filter: alpha(opacity=100);
99 | }
100 | .modal-fullscreen {
101 | border: none;
102 | -webkit-border-radius: 0;
103 | -moz-border-radius: 0;
104 | border-radius: 0;
105 | background: transparent;
106 | overflow: hidden;
107 | }
108 | .modal-fullscreen.modal-loading {
109 | border: 0;
110 | -webkit-box-shadow: none;
111 | -moz-box-shadow: none;
112 | box-shadow: none;
113 | }
114 | .modal-fullscreen .modal-body {
115 | padding: 0;
116 | }
117 | .modal-fullscreen .modal-header,
118 | .modal-fullscreen .modal-footer {
119 | position: absolute;
120 | top: 0;
121 | right: 0;
122 | left: 0;
123 | background: transparent;
124 | border: 0;
125 | -webkit-box-shadow: none;
126 | -moz-box-shadow: none;
127 | box-shadow: none;
128 | opacity: 0;
129 | z-index: 2000;
130 | }
131 | .modal-fullscreen .modal-footer {
132 | top: auto;
133 | bottom: 0;
134 | }
135 | .modal-fullscreen .close,
136 | .modal-fullscreen .modal-title {
137 | color: #fff;
138 | text-shadow: 0 0 2px rgba(33, 33, 33, 0.8);
139 | }
140 | .modal-fullscreen .modal-header:hover,
141 | .modal-fullscreen .modal-footer:hover {
142 | opacity: 1;
143 | }
144 |
145 | @media (max-width: 767px) {
146 | .modal-gallery .btn span {
147 | display: none;
148 | }
149 | .modal-fullscreen {
150 | right: 0;
151 | left: 0;
152 | }
153 | }
154 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-image-gallery/css/bootstrap-image-gallery.min.css:
--------------------------------------------------------------------------------
1 | @charset 'UTF-8';
2 | .modal-gallery{width:auto;max-height:none;outline:none;}
3 | .modal-gallery.fade.in{top:50%;}
4 | .modal-gallery .modal-body{max-height:none;}
5 | .modal-gallery .modal-title{display:inline-block;max-height:54px;overflow:hidden;}
6 | .modal-gallery .modal-image{position:relative;margin:auto;min-width:128px;min-height:128px;overflow:hidden;cursor:pointer;}
7 | .modal-gallery .modal-image:hover:before,.modal-gallery .modal-image:hover:after{content:'\2039';position:absolute;top:50%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);z-index:1;}
8 | .modal-gallery .modal-image:hover:after{content:'\203A';left:auto;right:15px;}
9 | .modal-single .modal-image:hover:before,.modal-single .modal-image:hover:after{display:none;}
10 | .modal-loading .modal-image{background:url(../img/loading.gif) center no-repeat;}
11 | .modal-gallery.fade .modal-image{-webkit-transition:width 0.15s ease, height 0.15s ease;-moz-transition:width 0.15s ease, height 0.15s ease;-ms-transition:width 0.15s ease, height 0.15s ease;-o-transition:width 0.15s ease, height 0.15s ease;transition:width 0.15s ease, height 0.15s ease;}
12 | .modal-gallery .modal-image *{position:absolute;top:0;opacity:0;filter:alpha(opacity=0);}
13 | .modal-gallery.fade .modal-image *{-webkit-transition:opacity 0.5s linear;-moz-transition:opacity 0.5s linear;-ms-transition:opacity 0.5s linear;-o-transition:opacity 0.5s linear;transition:opacity 0.5s linear;}
14 | .modal-gallery .modal-image *.in{opacity:1;filter:alpha(opacity=100);}
15 | .modal-fullscreen{border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background:transparent;overflow:hidden;}
16 | .modal-fullscreen.modal-loading{border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
17 | .modal-fullscreen .modal-body{padding:0;}
18 | .modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{position:absolute;top:0;right:0;left:0;background:transparent;border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:0;z-index:2000;}
19 | .modal-fullscreen .modal-footer{top:auto;bottom:0;}
20 | .modal-fullscreen .close,.modal-fullscreen .modal-title{color:#fff;text-shadow:0 0 2px rgba(33, 33, 33, 0.8);}
21 | .modal-fullscreen .modal-header:hover,.modal-fullscreen .modal-footer:hover{opacity:1;}
22 | @media (max-width:767px){.modal-gallery .btn span{display:none;} .modal-fullscreen{right:0;left:0;}}
23 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-image-gallery/img/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/xadmin/vendor/bootstrap-image-gallery/img/loading.gif
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-modal/img/ajax-loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/xadmin/vendor/bootstrap-modal/img/ajax-loader.gif
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-multiselect/css/bootstrap-multiselect.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/xadmin/vendor/bootstrap-multiselect/css/bootstrap-multiselect.css
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-timepicker/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 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/bootstrap-timepicker/css/bootstrap-timepicker.min.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 | */.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker-widget.dropdown-menu{padding:2px 3px 2px 2px}.bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,0.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.bootstrap-timepicker-widget a.btn,.bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker-widget table td:not(.separator){min-width:30px}.bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker-widget table td a{border:1px transparent solid;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker-widget table td a i{margin-top:2px}.bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center}.bootstrap-timepicker-widget .modal-content{padding:4px}@media(min-width:767px){.bootstrap-timepicker-widget.modal{width:200px;margin-left:-100px}}@media(max-width:767px){.bootstrap-timepicker{width:100%}.bootstrap-timepicker .dropdown-menu{width:100%}}
--------------------------------------------------------------------------------
/static/xadmin/vendor/flot/jquery.flot.resize.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 | */
13 |
14 | /* Inline dependency:
15 | * jQuery resize event - v1.1 - 3/14/2010
16 | * http://benalman.com/projects/jquery-resize-plugin/
17 | *
18 | * Copyright (c) 2010 "Cowboy" Ben Alman
19 | * Dual licensed under the MIT and GPL licenses.
20 | * http://benalman.com/about/license/
21 | */
22 |
23 | (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);
24 |
25 | (function ($) {
26 | var options = { }; // no options
27 |
28 | function init(plot) {
29 | function onResize() {
30 | var placeholder = plot.getPlaceholder();
31 |
32 | // somebody might have hidden us and we can't plot
33 | // when we don't have the dimensions
34 | if (placeholder.width() == 0 || placeholder.height() == 0)
35 | return;
36 |
37 | plot.resize();
38 | plot.setupGrid();
39 | plot.draw();
40 | }
41 |
42 | function bindEvents(plot, eventHolder) {
43 | plot.getPlaceholder().resize(onResize);
44 | }
45 |
46 | function shutdown(plot, eventHolder) {
47 | plot.getPlaceholder().unbind("resize", onResize);
48 | }
49 |
50 | plot.hooks.bindEvents.push(bindEvents);
51 | plot.hooks.shutdown.push(shutdown);
52 | }
53 |
54 | $.plot.plugins.push({
55 | init: init,
56 | options: options,
57 | name: 'resize',
58 | version: '1.0'
59 | });
60 | })(jQuery);
61 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/flot/jquery.flot.symbol.js:
--------------------------------------------------------------------------------
1 | /* Flot plugin that adds some extra symbols for plotting points.
2 |
3 | Copyright (c) 2007-2013 IOLA and Ole Laursen.
4 | Licensed under the MIT license.
5 |
6 | The symbols are accessed as strings through the standard symbol options:
7 |
8 | series: {
9 | points: {
10 | symbol: "square" // or "diamond", "triangle", "cross"
11 | }
12 | }
13 |
14 | */
15 |
16 | (function ($) {
17 | function processRawData(plot, series, datapoints) {
18 | // we normalize the area of each symbol so it is approximately the
19 | // same as a circle of the given radius
20 |
21 | var handlers = {
22 | square: function (ctx, x, y, radius, shadow) {
23 | // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2
24 | var size = radius * Math.sqrt(Math.PI) / 2;
25 | ctx.rect(x - size, y - size, size + size, size + size);
26 | },
27 | diamond: function (ctx, x, y, radius, shadow) {
28 | // pi * r^2 = 2s^2 => s = r * sqrt(pi/2)
29 | var size = radius * Math.sqrt(Math.PI / 2);
30 | ctx.moveTo(x - size, y);
31 | ctx.lineTo(x, y - size);
32 | ctx.lineTo(x + size, y);
33 | ctx.lineTo(x, y + size);
34 | ctx.lineTo(x - size, y);
35 | },
36 | triangle: function (ctx, x, y, radius, shadow) {
37 | // pi * r^2 = 1/2 * s^2 * sin (pi / 3) => s = r * sqrt(2 * pi / sin(pi / 3))
38 | var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3));
39 | var height = size * Math.sin(Math.PI / 3);
40 | ctx.moveTo(x - size/2, y + height/2);
41 | ctx.lineTo(x + size/2, y + height/2);
42 | if (!shadow) {
43 | ctx.lineTo(x, y - height/2);
44 | ctx.lineTo(x - size/2, y + height/2);
45 | }
46 | },
47 | cross: function (ctx, x, y, radius, shadow) {
48 | // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2
49 | var size = radius * Math.sqrt(Math.PI) / 2;
50 | ctx.moveTo(x - size, y - size);
51 | ctx.lineTo(x + size, y + size);
52 | ctx.moveTo(x - size, y + size);
53 | ctx.lineTo(x + size, y - size);
54 | }
55 | };
56 |
57 | var s = series.points.symbol;
58 | if (handlers[s])
59 | series.points.symbol = handlers[s];
60 | }
61 |
62 | function init(plot) {
63 | plot.hooks.processDatapoints.push(processRawData);
64 | }
65 |
66 | $.plot.plugins.push({
67 | init: init,
68 | name: 'symbols',
69 | version: '1.0'
70 | });
71 | })(jQuery);
72 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/font-awesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/xadmin/vendor/font-awesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/static/xadmin/vendor/font-awesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/xadmin/vendor/font-awesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/static/xadmin/vendor/font-awesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/xadmin/vendor/font-awesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/static/xadmin/vendor/font-awesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/xadmin/vendor/font-awesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/static/xadmin/vendor/jquery-ui/jquery.ui.core.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.2 - 2013-03-14
2 | * http://jqueryui.com
3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
4 | (function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/vendor/jquery-ui/jquery.ui.mouse.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery UI - v1.10.2 - 2013-03-14
2 | * http://jqueryui.com
3 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
4 | (function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/vendor/load-image/load-image.min.js:
--------------------------------------------------------------------------------
1 | (function(e){"use strict";var t=function(e,a,n){var r,i,c=document.createElement("img");if(c.onerror=a,c.onload=function(){!i||n&&n.noRevoke||t.revokeObjectURL(i),a&&a(t.scale(c,n))},t.isInstanceOf("Blob",e)||t.isInstanceOf("File",e))r=i=t.createObjectURL(e),c._type=e.type;else{if("string"!=typeof e)return!1;r=e,n&&n.crossOrigin&&(c.crossOrigin=n.crossOrigin)}return r?(c.src=r,c):t.readFile(e,function(e){var t=e.target;t&&t.result?c.src=t.result:a&&a(e)})},a=window.createObjectURL&&window||window.URL&&URL.revokeObjectURL&&URL||window.webkitURL&&webkitURL;t.isInstanceOf=function(e,t){return Object.prototype.toString.call(t)==="[object "+e+"]"},t.detectSubsampling=function(e){var t,a,n=e.width,r=e.height;return n*r>1048576?(t=document.createElement("canvas"),t.width=t.height=1,a=t.getContext("2d"),a.drawImage(e,-n+1,0),0===a.getImageData(0,0,1,1).data[3]):!1},t.detectVerticalSquash=function(e,t){var a,n,r,i,c,o=document.createElement("canvas"),d=o.getContext("2d");for(o.width=1,o.height=t,d.drawImage(e,0,0),a=d.getImageData(0,0,1,t).data,n=0,r=t,i=t;i>n;)c=a[4*(i-1)+3],0===c?r=i:n=i,i=r+n>>1;return i/t||1},t.renderImageToCanvas=function(e,a,n,r){var i,c,o,d,g,h,s,u,l=e.width,m=e.height,f=a.getContext("2d"),w=1024,v=document.createElement("canvas");for(f.save(),t.detectSubsampling(e)&&(l/=2,m/=2),i=t.detectVerticalSquash(e,m),v.width=v.height=w,c=v.getContext("2d"),o=Math.ceil(w*n/l),d=Math.ceil(w*r/m/i),h=0,u=0;m>u;){for(g=0,s=0;l>s;)c.clearRect(0,0,w,w),c.drawImage(e,-s,-u),f.drawImage(v,0,0,w,w,g,h,o,d),s+=w,g+=o;u+=w,h+=d}f.restore(),v=c=null},t.scale=function(e,a){a=a||{};var n=document.createElement("canvas"),r=e.width,i=e.height,c=Math.max((a.minWidth||r)/r,(a.minHeight||i)/i);return c>1&&(r=Math.ceil(r*c),i=Math.ceil(i*c)),c=Math.min((a.maxWidth||r)/r,(a.maxHeight||i)/i),1>c&&(r=Math.ceil(r*c),i=Math.ceil(i*c)),e.getContext||a.canvas&&n.getContext?(n.width=r,n.height=i,"image/jpeg"===e._type?t.renderImageToCanvas(e,n,r,i):n.getContext("2d").drawImage(e,0,0,r,i),n):(e.width=r,e.height=i,e)},t.createObjectURL=function(e){return a?a.createObjectURL(e):!1},t.revokeObjectURL=function(e){return a?a.revokeObjectURL(e):!1},t.readFile=function(e,t){if(window.FileReader&&FileReader.prototype.readAsDataURL){var a=new FileReader;return a.onload=a.onerror=t,a.readAsDataURL(e),a}return!1},"function"==typeof define&&define.amd?define(function(){return t}):e.loadImage=t})(this);
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2-spinner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/xadmin/vendor/select2/select2-spinner.gif
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/xadmin/vendor/select2/select2.png
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_de.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 German translation
3 | */
4 | (function ($) {
5 | "use strict";
6 |
7 | $.extend($.fn.select2.defaults, {
8 | formatNoMatches: function () { return "Keine Übereinstimmungen gefunden"; },
9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Bitte " + n + " Zeichen mehr eingeben"; },
10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Bitte " + n + " Zeichen weniger eingeben"; },
11 | formatSelectionTooBig: function (limit) { return "Sie können nur " + limit + " Eintr" + (limit === 1 ? "ag" : "äge") + " auswählen"; },
12 | formatLoadMore: function (pageNumber) { return "Lade mehr Ergebnisse..."; },
13 | formatSearching: function () { return "Suche..."; }
14 | });
15 | })(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_es.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Spanish translation
3 | */
4 | (function ($) {
5 | "use strict";
6 |
7 | $.extend($.fn.select2.defaults, {
8 | formatNoMatches: function () { return "No se encontraron resultados"; },
9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Por favor adicione " + n + " caracter" + (n == 1? "" : "es"); },
10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Por favor elimine " + n + " caracter" + (n == 1? "" : "es"); },
11 | formatSelectionTooBig: function (limit) { return "Solo puede seleccionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
12 | formatLoadMore: function (pageNumber) { return "Cargando más resultados..."; },
13 | formatSearching: function () { return "Buscando..."; }
14 | });
15 | })(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_eu.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Basque translation.
3 | *
4 | * Author: Julen Ruiz Aizpuru
5 | */
6 | (function ($) {
7 | "use strict";
8 |
9 | $.extend($.fn.select2.defaults, {
10 | formatNoMatches: function () {
11 | return "Ez da bat datorrenik aurkitu";
12 | },
13 | formatInputTooShort: function (input, min) {
14 | var n = min - input.length;
15 | if (n === 1) {
16 | return "Idatzi karaktere bat gehiago";
17 | } else {
18 | return "Idatzi " + n + " karaktere gehiago";
19 | }
20 | },
21 | formatInputTooLong: function (input, max) {
22 | var n = input.length - max;
23 | if (n === 1) {
24 | return "Idatzi karaktere bat gutxiago";
25 | } else {
26 | return "Idatzi " + n + " karaktere gutxiago";
27 | }
28 | },
29 | formatSelectionTooBig: function (limit) {
30 | if (limit === 1 ) {
31 | return "Elementu bakarra hauta dezakezu";
32 | } else {
33 | return limit + " elementu hauta ditzakezu soilik";
34 | }
35 | },
36 | formatLoadMore: function (pageNumber) {
37 | return "Emaitza gehiago kargatzen...";
38 | },
39 | formatSearching: function () {
40 | return "Bilatzen...";
41 | }
42 | });
43 | })(jQuery);
44 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_fr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 French translation
3 | */
4 | (function ($) {
5 | "use strict";
6 |
7 | $.extend($.fn.select2.defaults, {
8 | formatNoMatches: function () { return "Aucun résultat trouvé"; },
9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Merci de saisir " + n + " caractère" + (n == 1? "" : "s") + " de plus"; },
10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Merci de saisir " + n + " caractère" + (n == 1? "" : "s") + " de moins"; },
11 | formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); },
12 | formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires..."; },
13 | formatSearching: function () { return "Recherche en cours..."; }
14 | });
15 | })(jQuery);
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_hr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Croatian translation.
3 | *
4 | * Author: Edi Modrić
5 | */
6 | (function ($) {
7 | "use strict";
8 |
9 | var specialNumbers = {
10 | 1: function(n) { return (n % 100 != 11 ? "znak" : "znakova"); },
11 | 2: function(n) { return (n % 100 != 12 ? "znaka" : "znakova"); },
12 | 3: function(n) { return (n % 100 != 13 ? "znaka" : "znakova"); },
13 | 4: function(n) { return (n % 100 != 14 ? "znaka" : "znakova"); }
14 | };
15 |
16 | $.extend($.fn.select2.defaults, {
17 | formatNoMatches: function () { return "Nema rezultata"; },
18 | formatInputTooShort: function (input, min) {
19 | var n = min - input.length;
20 | var nMod10 = n % 10;
21 |
22 | if (nMod10 > 0 && nMod10 < 5) {
23 | return "Unesite još " + n + " " + specialNumbers[nMod10](n);
24 | }
25 |
26 | return "Unesite još " + n + " znakova";
27 | },
28 | formatInputTooLong: function (input, max) {
29 | var n = input.length - max;
30 | var nMod10 = n % 10;
31 |
32 | if (nMod10 > 0 && nMod10 < 5) {
33 | return "Unesite " + n + " " + specialNumbers[nMod10](n) + " manje";
34 | }
35 |
36 | return "Unesite " + n + " znakova manje";
37 | },
38 | formatSelectionTooBig: function (limit) { return "Maksimalan broj odabranih stavki je " + limit; },
39 | formatLoadMore: function (pageNumber) { return "Učitavanje rezultata..."; },
40 | formatSearching: function () { return "Pretraga..."; }
41 | });
42 | })(jQuery);
43 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_hu.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Hungarian translation
3 | */
4 | (function ($) {
5 | "use strict";
6 |
7 | $.extend($.fn.select2.defaults, {
8 | formatNoMatches: function () { return "Nincs találat."; },
9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Túl rövid. Még " + n + " karakter hiányzik."; },
10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Túl hosszú. " + n + " kerekterrel több mint kellene."; },
11 | formatSelectionTooBig: function (limit) { return "Csak " + limit + " elemet lehet kiválasztani."; },
12 | formatLoadMore: function (pageNumber) { return "Töltés..."; },
13 | formatSearching: function () { return "Keresés..."; }
14 | });
15 | })(jQuery);
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_it.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Italian translation
3 | */
4 | (function ($) {
5 | "use strict";
6 |
7 | $.extend($.fn.select2.defaults, {
8 | formatNoMatches: function () { return "Nessuna corrispondenza trovata"; },
9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Inserisci ancora " + n + " caratter" + (n == 1? "e" : "i"); },
10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Inserisci " + n + " caratter" + (n == 1? "e" : "i") + " in meno"; },
11 | formatSelectionTooBig: function (limit) { return "Puoi selezionare solo " + limit + " element" + (limit == 1 ? "o" : "i"); },
12 | formatLoadMore: function (pageNumber) { return "Caricamento in corso..."; },
13 | formatSearching: function () { return "Ricerca..."; }
14 | });
15 | })(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_nl.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Dutch translation
3 | */
4 | (function ($) {
5 | "use strict";
6 |
7 | $.extend($.fn.select2.defaults, {
8 | formatNoMatches: function () { return "Geen resultaten gevonden"; },
9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Vul " + n + " karakter" + (n == 1? "" : "s") + " meer in"; },
10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Vul " + n + " karakter" + (n == 1? "" : "s") + " minder in"; },
11 | formatSelectionTooBig: function (limit) { return "Maximaal " + limit + " item" + (limit == 1 ? "" : "s") + " toegestaan"; },
12 | formatLoadMore: function (pageNumber) { return "Meer resultaten laden..."; },
13 | formatSearching: function () { return "Zoeken..."; },
14 | });
15 | })(jQuery);
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_pt-BR.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Brazilian Portuguese translation
3 | */
4 | (function ($) {
5 | "use strict";
6 |
7 | $.extend($.fn.select2.defaults, {
8 | formatNoMatches: function () { return "Nenhum resultado encontrado"; },
9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Informe " + n + " caracter" + (n == 1? "" : "es"); },
10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caracter" + (n == 1? "" : "es"); },
11 | formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
12 | formatLoadMore: function (pageNumber) { return "Carregando mais resultados..."; },
13 | formatSearching: function () { return "Buscando..."; }
14 | });
15 | })(jQuery);
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_pt-PT.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Portuguese (Portugal) translation
3 | */
4 | (function ($) {
5 | "use strict";
6 |
7 | $.extend($.fn.select2.defaults, {
8 | formatNoMatches: function () { return "Nenhum resultado encontrado"; },
9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduza " + n + " caracter" + (n == 1 ? "" : "es"); },
10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caracter" + (n == 1 ? "" : "es"); },
11 | formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
12 | formatLoadMore: function (pageNumber) { return "A carregar mais resultados..."; },
13 | formatSearching: function () { return "A pesquisar..."; }
14 | });
15 | })(jQuery);
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_ro.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Romanian translation.
3 | */
4 | (function ($) {
5 | "use strict";
6 |
7 | $.extend($.fn.select2.defaults, {
8 | formatNoMatches: function () { return "Nu a fost găsit nimic"; },
9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Vă rugăm să introduceți incă " + n + " caracter" + (n == 1 ? "" : "e"); },
10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Vă rugăm să introduceți mai puțin de " + n + " caracter" + (n == 1? "" : "e"); },
11 | formatSelectionTooBig: function (limit) { return "Aveți voie să selectați cel mult " + limit + " element" + (limit == 1 ? "" : "e"); },
12 | formatLoadMore: function (pageNumber) { return "Se încarcă..."; },
13 | formatSearching: function () { return "Căutare..."; }
14 | });
15 | })(jQuery);
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_ru.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Russian translation
3 | */
4 | (function ($) {
5 | "use strict";
6 |
7 | $.extend($.fn.select2.defaults, {
8 | formatNoMatches: function () { return "Совпадений не найдено"; },
9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Пожалуйста, введите еще " + n + " символ" + (n == 1 ? "" : ((n > 1)&&(n < 5) ? "а" : "ов")); },
10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Пожалуйста, введите на " + n + " символ" + (n == 1 ? "" : ((n > 1)&&(n < 5)? "а" : "ов")) + " меньше"; },
11 | formatSelectionTooBig: function (limit) { return "Вы можете выбрать не более " + limit + " элемент" + (limit == 1 ? "" : ((limit > 1)&&(limit < 5)? "а" : "ов")); },
12 | formatLoadMore: function (pageNumber) { return "Загрузка данных..."; },
13 | formatSearching: function () { return "Поиск..."; }
14 | });
15 | })(jQuery);
16 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_sk.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Slovak translation.
3 | *
4 | * Author: David Vallner
5 | */
6 | (function ($) {
7 | "use strict";
8 | // use text for the numbers 2 through 4
9 | var smallNumbers = {
10 | 2: function(masc) { return (masc ? "dva" : "dve"); },
11 | 3: function() { return "tri"; },
12 | 4: function() { return "štyri"; }
13 | }
14 | $.extend($.fn.select2.defaults, {
15 | formatNoMatches: function () { return "Nenašli sa žiadne položky"; },
16 | formatInputTooShort: function (input, min) {
17 | var n = min - input.length;
18 | if (n == 1) {
19 | return "Prosím zadajte ešte jeden znak";
20 | } else if (n <= 4) {
21 | return "Prosím zadajte ešte ďalšie "+smallNumbers[n](true)+" znaky";
22 | } else {
23 | return "Prosím zadajte ešte ďalších "+n+" znakov";
24 | }
25 | },
26 | formatInputTooLong: function (input, max) {
27 | var n = input.length - max;
28 | if (n == 1) {
29 | return "Prosím zadajte o jeden znak menej";
30 | } else if (n <= 4) {
31 | return "Prosím zadajte o "+smallNumbers[n](true)+" znaky menej";
32 | } else {
33 | return "Prosím zadajte o "+n+" znakov menej";
34 | }
35 | },
36 | formatSelectionTooBig: function (limit) {
37 | if (limit == 1) {
38 | return "Môžete zvoliť len jednu položku";
39 | } else if (limit <= 4) {
40 | return "Môžete zvoliť najviac "+smallNumbers[limit](false)+" položky";
41 | } else {
42 | return "Môžete zvoliť najviac "+limit+" položiek";
43 | }
44 | },
45 | formatLoadMore: function (pageNumber) { return "Načítavajú sa ďalšie výsledky..."; },
46 | formatSearching: function () { return "Vyhľadávanie..."; }
47 | });
48 | })(jQuery);
49 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_sv.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Swedish translation.
3 | *
4 | * Author: Jens Rantil
5 | */
6 | (function ($) {
7 | "use strict";
8 |
9 | $.extend($.fn.select2.defaults, {
10 | formatNoMatches: function () { return "Inga träffar"; },
11 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Var god skriv in " + n + (n>1 ? " till tecken" : " tecken till"); },
12 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Var god sudda ut " + n + " tecken"; },
13 | formatSelectionTooBig: function (limit) { return "Du kan max välja " + limit + " element"; },
14 | formatLoadMore: function (pageNumber) { return "Laddar fler resultat..."; },
15 | formatSearching: function () { return "Söker..."; }
16 | });
17 | })(jQuery);
18 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_tr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Turkish translation.
3 | *
4 | * Author: Salim KAYABAŞI
5 | */
6 | (function ($) {
7 | "use strict";
8 |
9 | $.extend($.fn.select2.defaults, {
10 | formatNoMatches: function () { return "Sonuç bulunamadı"; },
11 | formatInputTooShort: function (input, min) { var n = min - input.length; return "En az " + n + " karakter daha girmelisiniz"; },
12 | formatInputTooLong: function (input, max) { var n = input.length - max; return n + " karakter azaltmalısınız"; },
13 | formatSelectionTooBig: function (limit) { return "Sadece " + limit + " seçim yapabilirsiniz"; },
14 | formatLoadMore: function (pageNumber) { return "Daha fazla ..."; },
15 | formatSearching: function () { return "Aranıyor..."; }
16 | });
17 | })(jQuery);
18 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_ua.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 translation.
3 | *
4 | * Author: bigmihail
5 | */
6 | (function ($) {
7 | "use strict";
8 |
9 | $.extend($.fn.select2.defaults, {
10 | formatNoMatches: function () { return "Нічого не знайдено"; },
11 | formatInputTooShort: function (input, min) { var n = min - input.length, s = ["", "и", "ів"], p = [2,0,1,1,1,2]; return "Введіть буль ласка ще " + n + " символ" + s[ (n%100>4 && n%100<=20)? 2 : p[Math.min(n%10, 5)] ]; },
12 | formatInputTooLong: function (input, max) { var n = input.length - max, s = ["", "и", "ів"], p = [2,0,1,1,1,2]; return "Введіть буль ласка на " + n + " символ" + s[ (n%100>4 && n%100<=20)? 2 : p[Math.min(n%10, 5)] ] + " менше"; },
13 | formatSelectionTooBig: function (limit) {var s = ["", "и", "ів"], p = [2,0,1,1,1,2]; return "Ви можете вибрати лише " + limit + " елемент" + s[ (limit%100>4 && limit%100<=20)? 2 : p[Math.min(limit%10, 5)] ]; },
14 | formatLoadMore: function (pageNumber) { return "Завантаження даних..."; },
15 | formatSearching: function () { return "Пошук..."; }
16 | });
17 | })(jQuery);
18 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2_locale_zh-CN.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Select2 Chinese translation
3 | */
4 | (function ($) {
5 | "use strict";
6 | $.extend($.fn.select2.defaults, {
7 | formatNoMatches: function () { return "没有找到匹配项"; },
8 | formatInputTooShort: function (input, min) { var n = min - input.length; return "请再输入" + n + "个字符";},
9 | formatInputTooLong: function (input, max) { var n = input.length - max; return "请删掉" + n + "个字符";},
10 | formatSelectionTooBig: function (limit) { return "你只能选择最多" + limit + "项"; },
11 | formatLoadMore: function (pageNumber) { return "加载结果中..."; },
12 | formatSearching: function () { return "搜索中..."; }
13 | });
14 | })(jQuery);
15 |
--------------------------------------------------------------------------------
/static/xadmin/vendor/select2/select2x2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/static/xadmin/vendor/select2/select2x2.png
--------------------------------------------------------------------------------
/static/xadmin/vendor/snapjs/snap.css:
--------------------------------------------------------------------------------
1 |
2 | .snap-content {
3 | position: absolute;
4 | top: 0;
5 | right: 0;
6 | bottom: 0;
7 | left: 0;
8 | width: auto;
9 | height: auto;
10 | z-index: 2;
11 | overflow: auto;
12 | -webkit-overflow-scrolling: touch;
13 | -webkit-transform: translate3d(0, 0, 0);
14 | -moz-transform: translate3d(0, 0, 0);
15 | -ms-transform: translate3d(0, 0, 0);
16 | -o-transform: translate3d(0, 0, 0);
17 | transform: translate3d(0, 0, 0);
18 | }
19 |
20 | .snap-drawers {
21 | position: absolute;
22 | top: 0;
23 | right: 0;
24 | bottom: 0;
25 | left: 0;
26 | width: auto;
27 | height: auto;
28 | }
29 |
30 | .snap-drawer {
31 | position: absolute;
32 | top: 0;
33 | right: auto;
34 | bottom: 0;
35 | left: auto;
36 | width: 265px;
37 | height: auto;
38 | overflow: auto;
39 | -webkit-overflow-scrolling: touch;
40 | -webkit-transition: width 0.3s ease;
41 | -moz-transition: width 0.3s ease;
42 | -ms-transition: width 0.3s ease;
43 | -o-transition: width 0.3s ease;
44 | transition: width 0.3s ease;
45 | }
46 |
47 | .snap-drawer-left {
48 | left: 0;
49 | z-index: 1;
50 | }
51 |
52 | .snap-drawer-right {
53 | right: 0;
54 | z-index: 1;
55 | }
56 |
57 | .snapjs-left .snap-drawer-right,
58 | .snapjs-right .snap-drawer-left {
59 | display: none;
60 | }
61 |
62 | .snapjs-expand-left .snap-drawer-left,
63 | .snapjs-expand-right .snap-drawer-right {
64 | width: 100%;
65 | }
66 |
--------------------------------------------------------------------------------
/template/base.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {% block title %}投票系统{% endblock %}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | {% block cssblock %}
21 | {% endblock %}
22 | {% block javascriptblock %}
23 |
24 |
25 | {% endblock %}
26 |
27 |
28 |
42 | {% block body %}
43 | {% endblock %}
44 |
45 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/template/vote/activity_chart.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% block title %}
3 |
4 | {% endblock %}
5 | {% block cssblock %}
6 |
7 |
8 | {% endblock %}
9 | {% block javascriptblock %}
10 |
11 |
12 |
13 | {% endblock %}
14 |
15 | {% block body %}
16 |
20 | {{activity.name}} {{voter_info.name}}投票统计
21 | 开始时间:
22 |
23 | 结束时间;
24 |
25 | 时间间隔(分钟):
26 |
27 |
28 |
29 |
30 |
31 |
32 |
98 | {% endblock %}
--------------------------------------------------------------------------------
/template/vote/error.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% block title %}
3 |
4 | {% endblock %}
5 |
6 | {% block javascriptblock %}
7 |
8 | {% endblock %}
9 |
10 | {% block body %}
11 |
12 |
13 |
14 | {{ error }}
15 |
16 |
17 | {% endblock %}
--------------------------------------------------------------------------------
/template/vote/show.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% block title %}
3 |
4 | {% endblock %}
5 |
6 | {% block javascriptblock %}
7 |
8 | {% endblock %}
9 |
10 | {% block body %}
11 |
24 |
25 |
50 |
51 | {% for item in vote_info %}
52 |
53 |
54 | 
55 |
56 |
57 | {{ item.name }}
58 |
59 | 编号:{{ item.vote_id }} 票数:{{ item.vote_number }}
60 |
61 |
62 |
63 | {% endfor %}
64 |
65 |
66 | {% endblock %}
--------------------------------------------------------------------------------
/template/vote/signup.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% block title %}
3 |
4 | {% endblock %}
5 |
6 | {% block javascriptblock %}
7 |
8 | {% endblock %}
9 |
10 | {% block body %}
11 |
29 | {% verbatim %}
30 |
58 | {% endverbatim %}
59 |
62 | {% verbatim %}
63 |
127 | {% endverbatim %}
128 |
129 |
130 | {% endblock %}
--------------------------------------------------------------------------------
/template/vote/voter_chart.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/vote/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/vote/__init__.py
--------------------------------------------------------------------------------
/vote/adminx.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 | import datetime
3 | from pytz import timezone
4 |
5 | import xadmin
6 | from xadmin import views
7 |
8 | from .models import VoterInfo, VoteLog, VoteActivity
9 |
10 |
11 | class MainDashboard(object):
12 | widgets = [
13 | [
14 | {"type": "html", "title": u"首页", "content": "投票管理系统"},
15 | ],
16 | [
17 | {"type": "qbutton", "title": u"快速查看", "btns": [{'model': VoterInfo}, {'model':VoteLog}]}
18 | ]
19 | ]
20 | xadmin.site.register(views.website.IndexView, MainDashboard)
21 |
22 |
23 | class BaseSetting(object):
24 | enable_themes = False
25 | use_bootswatch = True
26 | xadmin.site.register(views.BaseAdminView, BaseSetting)
27 |
28 |
29 | class GlobalSetting(object):
30 | global_search_models = [VoteLog, VoterInfo]
31 | global_models_icon = {
32 | VoteLog: 'fa fa-laptop', VoterInfo: 'fa fa-cloud'
33 | }
34 | menu_style = 'accordion'
35 | xadmin.site.register(views.CommAdminView, GlobalSetting)
36 |
37 |
38 | class VoteActivityAdmin(object):
39 | def result_link(self, instance):
40 | return '报名 排名 ' \
41 | '图表 投票记录' % \
42 | (str(instance.id), str(instance.id), str(instance.id), str(instance.id))
43 | result_link.short_description = "结果"
44 | result_link.allow_tags = True
45 | result_link.is_column = True
46 |
47 | def status(self, instance):
48 | now = timezone("Asia/Shanghai").localize(datetime.datetime.now())
49 | print now
50 | if instance.signup_start_time > now:
51 | return u"报名未开始"
52 | if instance.signup_start_time <= now and instance.vote_start_time > now:
53 | return u"正在报名"
54 | if instance.vote_start_time <= now and instance.vote_end_time > now:
55 | return u"正在投票"
56 | return u"活动结束"
57 |
58 | status.short_description = u"状态"
59 | status.is_column = True
60 |
61 | search_fields = ["name"]
62 | list_display = ["id", "name", "signup_start_time", "vote_start_time", "vote_end_time", "status", "result_link"]
63 | exclude = ["vote_id_start"]
64 |
65 |
66 | class VoterInfoAdmin(object):
67 | def my_log(self, instance):
68 | return "投票记录 图表" % (str(instance.id), str(instance.vote_activity.id), str(instance.id))
69 | my_log.short_description = u"投票记录"
70 | my_log.allow_tags = True
71 | my_log.is_column = True
72 |
73 | list_display = ["id", "vote_activity", "name", "phone", "vote_number", "vote_id", "my_log"]
74 | list_filter = ["vote_activity"]
75 | search_fields = ["name", "phone", "address"]
76 |
77 |
78 | class VoteLogAdmin(object):
79 | list_filter = ["vote_activity", "voter_info"]
80 | list_display = ["id", "open_id", "vote_activity", "voter_info", "create_time"]
81 | search_fields = ["open_id"]
82 |
83 |
84 | xadmin.site.register(VoterInfo, VoterInfoAdmin)
85 | xadmin.site.register(VoteLog, VoteLogAdmin)
86 | xadmin.site.register(VoteActivity, VoteActivityAdmin)
87 |
--------------------------------------------------------------------------------
/vote/models.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 | import datetime
3 | from django.db import models
4 |
5 | from weixin.models import WeixinConfig
6 |
7 |
8 | class VoteActivity(models.Model):
9 | weixin_config = models.ForeignKey(WeixinConfig, verbose_name=u"微信账号")
10 | name = models.CharField(u"活动名称", max_length=100)
11 | content = models.TextField(u"说明", blank=True, null=True)
12 | vote_id_prefix = models.CharField(u"选手编号前缀", max_length=10, blank=True, null=True)
13 | vote_id_start= models.IntegerField(default=1)
14 | signup_start_time = models.DateTimeField(u"报名开始时间")
15 | vote_start_time = models.DateTimeField(u"投票开始时间", help_text=u"也就是报名结束时间")
16 | vote_end_time = models.DateTimeField(u"投票结束时间")
17 | create_time = models.DateTimeField(u"创建时间", auto_now_add=True)
18 |
19 | class Meta:
20 | db_table = "VoteActivity"
21 | verbose_name = u"投票活动"
22 | verbose_name_plural = u"投票活动"
23 |
24 | def __unicode__(self):
25 | return self.name
26 |
27 |
28 | class VoterInfo(models.Model):
29 | vote_activity = models.ForeignKey(VoteActivity, verbose_name=u"投票活动")
30 | name = models.CharField(u"姓名", max_length=50, blank=True, null=True)
31 | phone = models.CharField(u"手机", max_length=11, blank=True, null=True)
32 | pic = models.CharField(u"图片地址", max_length=300, blank=True, null=True)
33 | address = models.CharField(u"地址", max_length=200, blank=True, null=True)
34 |
35 | vote_number = models.IntegerField(u"票数", default=0)
36 |
37 | vote_id = models.CharField(u"投票序号", help_text=u"正在进行的活动中不要有重复的", max_length=10, blank=True, null=True)
38 | is_valid = models.BooleanField(u"是否有效", help_text=u"反选代表删除,不能投票", default=True)
39 | create_time = models.DateTimeField(u"创建时间", auto_now_add=True)
40 |
41 | class Meta:
42 | db_table = "voter_info"
43 | verbose_name = u"选手信息"
44 | verbose_name_plural = u"选手信息"
45 |
46 | def __unicode__(self):
47 | return self.name
48 |
49 | def save(self, *args, **kwargs):
50 | if not self.pk:
51 | vote_id = str(self.vote_activity.vote_id_start)
52 |
53 | if self.vote_activity.vote_id_start <= 99:
54 | vote_id = "0" * (2 - len(vote_id)) + vote_id
55 | elif self.vote_activity.vote_id_start > 99 and self.activity.vote_id_start <= 9999:
56 | vote_id = "0" * (4 - len(vote_id)) + vote_id
57 | else:
58 | vote_id = "0" * (8 - len(vote_id)) + vote_id
59 |
60 | if self.vote_activity.vote_id_prefix:
61 | vote_id = self.vote_activity.vote_id_prefix + vote_id
62 | self.vote_id = vote_id
63 | self.vote_activity.vote_id_start += 1
64 | self.vote_activity.save()
65 | super(VoterInfo, self).save(*args, **kwargs)
66 |
67 |
68 | class VoteLog(models.Model):
69 | vote_activity = models.ForeignKey(VoteActivity, verbose_name=u"投票活动")
70 | create_time = models.DateTimeField(u"创建时间", default=datetime.datetime.now)
71 | open_id = models.CharField(u"openid", max_length=100)
72 | voter_info = models.ForeignKey(VoterInfo, verbose_name=u"选手信息")
73 |
74 | class Meta:
75 | db_table = "vote_log"
76 | verbose_name = u"投票记录"
77 | verbose_name_plural = u"投票记录"
78 |
79 | def __unicode__(self):
80 | return self.open_id
81 |
--------------------------------------------------------------------------------
/vote/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/vote/upload_file.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 | import os
3 | import time
4 | import json
5 | import requests
6 | from django.http import HttpResponse
7 | from django.shortcuts import render
8 | from django.views.decorators.csrf import csrf_exempt
9 |
10 |
11 | class FileOperation(object):
12 | def __init__(self, file_content, dir_name="/", file_name=None, bucket_name="vote1"):
13 | self._file_content = file_content
14 | if not file_name:
15 | self._file_name = self._file_content.name
16 | else:
17 | self._file_name = file_name
18 | self._bucket_name = bucket_name
19 | self._dir_name = dir_name
20 | self._new_name = str(int(time.time())) + self._file_name
21 | self._upload_url = "https://v0.api.upyun.com/" + self._bucket_name \
22 | + self._dir_name + self._new_name
23 | self._file_url = "http://" + self._bucket_name + ".b0.upaiyun.com" + self._dir_name + self._new_name
24 |
25 | def save(self):
26 | header = {"Mkdir": "true"}
27 | r = requests.put(self._upload_url, data=self._file_content, auth=('***', '***'), headers=header)
28 | print r.content, r.status_code
29 | return {"state": "SUCCESS", "type": "jpg", "original": self._file_name,
30 | "title": self._new_name, "url": self._file_url, "size": 1000}
31 |
32 | def get_storage_path(self):
33 | return self._dir_name + self._new_name
34 |
35 | def get_file_url(self):
36 | return self._file_url
37 |
--------------------------------------------------------------------------------
/weixin/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/weixin/__init__.py
--------------------------------------------------------------------------------
/weixin/adminx.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 | import datetime
3 | from pytz import timezone
4 |
5 | import xadmin
6 | from xadmin import views
7 |
8 | from weixin_vote.config import domain
9 | from .models import WeixinConfig
10 |
11 |
12 | class WeixinConfigAdmin(object):
13 | def url(self, instance):
14 | return "http://" + domain + "/%s/" % (str(instance.id), )
15 | url.short_description = "url"
16 | url.allow_tags = True
17 | url.is_column = True
18 |
19 | list_display = ["name", "url", "token"]
20 | save_as = True
21 |
22 |
23 | xadmin.site.register(WeixinConfig, WeixinConfigAdmin)
--------------------------------------------------------------------------------
/weixin/message.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 | import time
3 | from .models import WeixinConfig
4 |
5 |
6 | class TextMessage(object):
7 | def __init__(self, open_id, weixin_config, text):
8 | weixin_id = WeixinConfig.objects.all()[0].weixin_id
9 | self.xml = u"""
10 |
11 |
12 |
13 | %s
14 |
15 |
16 |
17 | """ % (open_id, weixin_config.weixin_id, str(int(time.time())), text)
18 |
19 | @property
20 | def data(self):
21 | return self.xml
22 |
23 |
24 | class NewsMessage(object):
25 | def __init__(self, open_id, weixin_config, news):
26 | news_num = len(news)
27 |
28 | self.xml = u"""
29 |
30 |
31 |
32 | {2}
33 |
34 | {3}
35 |
36 | """.format(open_id, weixin_config.weixin_id, str(int(time.time())), news_num)
37 |
38 | for num in range(0, news_num):
39 | item_xml = u"""
40 | -
41 |
42 |
43 |
44 |
45 |
46 | """.format(news[num]["title"], news[num]["description"], news[num]["pic_url"], news[num]["url"])
47 | self.xml += item_xml
48 |
49 | self.xml += u"""
50 |
51 |
52 | """
53 |
54 | @property
55 | def data(self):
56 | return self.xml
--------------------------------------------------------------------------------
/weixin/models.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 | import time
3 | import hashlib
4 | from django.db import models
5 |
6 |
7 | def get_token():
8 | return hashlib.md5(str(time.time())).hexdigest()[:15]
9 |
10 |
11 | class WeixinConfig(models.Model):
12 | name = models.CharField(u"公众号名称", max_length=30)
13 | weixin_id = models.CharField(u"公众号id", max_length=30)
14 | token = models.CharField("token", default=get_token, max_length=30)
15 | forward = models.BooleanField(u"是否开启转发", help_text=u"如果开启转发,非投票编号的消息都会转发出去", default=False)
16 | forward_url = models.CharField(u"第三方平台的url", max_length=200, blank=True, null=True)
17 | forward_token = models.CharField(u"第三方平台token", max_length=100, blank=True, null=True)
18 |
19 | class Meta:
20 | db_table = "weixin_config"
21 | verbose_name = u"平台设置"
22 | verbose_name_plural = u"平台设置"
23 |
24 | def __unicode__(self):
25 | return self.name
--------------------------------------------------------------------------------
/weixin/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/weixin_vote/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/virusdefender/weixin_vote/05e2fa641c8ddf6928b047966f549015ac0424c0/weixin_vote/__init__.py
--------------------------------------------------------------------------------
/weixin_vote/config.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 |
3 | domain = "test.tmqdu.com"
--------------------------------------------------------------------------------
/weixin_vote/fake_data.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 | import datetime
3 |
4 | from vote.models import VoterInfo, VoteActivity
5 | from weixin.models import WeixinConfig
6 |
7 | from django.contrib.auth.models import User
8 |
9 | root = User.objects.create(username="root")
10 | root.set_password("root")
11 | root.is_superuser = True
12 | root.is_staff = True
13 | root.save()
14 | weixin_config = WeixinConfig.objects.create(name="account1", weixin_id='gh_18e1e6751caf', token="virusdefender")
15 |
16 | activity = VoteActivity.objects.create(weixin_config=weixin_config, name="test activity",
17 | signup_start_time=datetime.datetime.now() - datetime.timedelta(days=1),
18 | vote_start_time=datetime.datetime.now() + datetime.timedelta(days=1),
19 | vote_end_time=datetime.datetime.now() + datetime.timedelta(days=100))
20 |
21 | VoterInfo.objects.create(vote_activity=activity,
22 | name="1",
23 | pic="http://vote1.b0.upaiyun.com/1423551952e7cd7b899e510fb36c1ec2d7da33c895d1430c6e.jpg")
24 |
25 |
26 | VoterInfo.objects.create(vote_activity=activity,
27 | name="2",
28 | pic="http://vote1.b0.upaiyun.com/1423551952e7cd7b899e510fb36c1ec2d7da33c895d1430c6e.jpg")
--------------------------------------------------------------------------------
/weixin_vote/local_settings.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 |
3 | LOG_PATH = "/Users/virusdefender/Desktop/"
--------------------------------------------------------------------------------
/weixin_vote/server_settings.py:
--------------------------------------------------------------------------------
1 | # coding=utf-8
2 |
3 | LOG_PATH = "/mnt/log/django/"
--------------------------------------------------------------------------------
/weixin_vote/urls.py:
--------------------------------------------------------------------------------
1 | from django.conf.urls import patterns, include, url
2 |
3 | import xadmin
4 | xadmin.autodiscover()
5 |
6 | urlpatterns = patterns('',
7 | # Examples:
8 | # url(r'^$', 'weixin_vote.views.home', name='home'),
9 | # url(r'^blog/', include('blog.urls')),
10 |
11 | # url(r'^admin/', include(admin.site.urls)),
12 | url(r'admin/', include(xadmin.site.urls)),
13 |
14 | url(r"^(?P\d+)/$", "weixin.views.weixin_main"),
15 |
16 | url(r"^signup/(?P\d+)/$", "vote.views.signup_page"),
17 |
18 | url(r"^show/(?P\d+)/$", "vote.views.show_page"),
19 |
20 | url(r"^upload/$", "vote.views.upload"),
21 |
22 | url(r"^chart/(?P\d+)/", "vote.views.activity_chart"),
23 | )
24 |
--------------------------------------------------------------------------------
/weixin_vote/wsgi.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for weixin_vote project.
3 |
4 | It exposes the WSGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/
8 | """
9 |
10 | import os
11 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "weixin_vote.settings")
12 |
13 | from django.core.wsgi import get_wsgi_application
14 | application = get_wsgi_application()
15 |
--------------------------------------------------------------------------------
|