LezWatch.TV News and Information - Version 1.0.0

Version Description

==

  • September 2018 by Ipstenu
  • Reboot and rebranding - all the good, none of the bad.
Download this release

Release Info

Developer Ipstenu
Plugin Icon 128x128 LezWatch.TV News and Information
Version 1.0.0
Comparing to
See all releases

Version 1.0.0

assets/birthday.jpg ADDED
Binary file
assets/css/images/ui-icons_444444_256x240.png ADDED
Binary file
assets/css/images/ui-icons_555555_256x240.png ADDED
Binary file
assets/css/images/ui-icons_777620_256x240.png ADDED
Binary file
assets/css/images/ui-icons_777777_256x240.png ADDED
Binary file
assets/css/images/ui-icons_cc0000_256x240.png ADDED
Binary file
assets/css/images/ui-icons_ffffff_256x240.png ADDED
Binary file
assets/css/jquery-ui.css ADDED
@@ -0,0 +1,1312 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.12.1 - 2017-02-15
2
+ * http://jqueryui.com
3
+ * Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
5
+ * Copyright jQuery Foundation and other contributors; Licensed MIT */
6
+
7
+ .ui-draggable-handle {
8
+ -ms-touch-action: none;
9
+ touch-action: none;
10
+ }
11
+ /* Layout helpers
12
+ ----------------------------------*/
13
+ .ui-helper-hidden {
14
+ display: none;
15
+ }
16
+ .ui-helper-hidden-accessible {
17
+ border: 0;
18
+ clip: rect(0 0 0 0);
19
+ height: 1px;
20
+ margin: -1px;
21
+ overflow: hidden;
22
+ padding: 0;
23
+ position: absolute;
24
+ width: 1px;
25
+ }
26
+ .ui-helper-reset {
27
+ margin: 0;
28
+ padding: 0;
29
+ border: 0;
30
+ outline: 0;
31
+ line-height: 1.3;
32
+ text-decoration: none;
33
+ font-size: 100%;
34
+ list-style: none;
35
+ }
36
+ .ui-helper-clearfix:before,
37
+ .ui-helper-clearfix:after {
38
+ content: "";
39
+ display: table;
40
+ border-collapse: collapse;
41
+ }
42
+ .ui-helper-clearfix:after {
43
+ clear: both;
44
+ }
45
+ .ui-helper-zfix {
46
+ width: 100%;
47
+ height: 100%;
48
+ top: 0;
49
+ left: 0;
50
+ position: absolute;
51
+ opacity: 0;
52
+ filter:Alpha(Opacity=0); /* support: IE8 */
53
+ }
54
+
55
+ .ui-front {
56
+ z-index: 100;
57
+ }
58
+
59
+
60
+ /* Interaction Cues
61
+ ----------------------------------*/
62
+ .ui-state-disabled {
63
+ cursor: default !important;
64
+ pointer-events: none;
65
+ }
66
+
67
+
68
+ /* Icons
69
+ ----------------------------------*/
70
+ .ui-icon {
71
+ display: inline-block;
72
+ vertical-align: middle;
73
+ margin-top: -.25em;
74
+ position: relative;
75
+ text-indent: -99999px;
76
+ overflow: hidden;
77
+ background-repeat: no-repeat;
78
+ }
79
+
80
+ .ui-widget-icon-block {
81
+ left: 50%;
82
+ margin-left: -8px;
83
+ display: block;
84
+ }
85
+
86
+ /* Misc visuals
87
+ ----------------------------------*/
88
+
89
+ /* Overlays */
90
+ .ui-widget-overlay {
91
+ position: fixed;
92
+ top: 0;
93
+ left: 0;
94
+ width: 100%;
95
+ height: 100%;
96
+ }
97
+ .ui-resizable {
98
+ position: relative;
99
+ }
100
+ .ui-resizable-handle {
101
+ position: absolute;
102
+ font-size: 0.1px;
103
+ display: block;
104
+ -ms-touch-action: none;
105
+ touch-action: none;
106
+ }
107
+ .ui-resizable-disabled .ui-resizable-handle,
108
+ .ui-resizable-autohide .ui-resizable-handle {
109
+ display: none;
110
+ }
111
+ .ui-resizable-n {
112
+ cursor: n-resize;
113
+ height: 7px;
114
+ width: 100%;
115
+ top: -5px;
116
+ left: 0;
117
+ }
118
+ .ui-resizable-s {
119
+ cursor: s-resize;
120
+ height: 7px;
121
+ width: 100%;
122
+ bottom: -5px;
123
+ left: 0;
124
+ }
125
+ .ui-resizable-e {
126
+ cursor: e-resize;
127
+ width: 7px;
128
+ right: -5px;
129
+ top: 0;
130
+ height: 100%;
131
+ }
132
+ .ui-resizable-w {
133
+ cursor: w-resize;
134
+ width: 7px;
135
+ left: -5px;
136
+ top: 0;
137
+ height: 100%;
138
+ }
139
+ .ui-resizable-se {
140
+ cursor: se-resize;
141
+ width: 12px;
142
+ height: 12px;
143
+ right: 1px;
144
+ bottom: 1px;
145
+ }
146
+ .ui-resizable-sw {
147
+ cursor: sw-resize;
148
+ width: 9px;
149
+ height: 9px;
150
+ left: -5px;
151
+ bottom: -5px;
152
+ }
153
+ .ui-resizable-nw {
154
+ cursor: nw-resize;
155
+ width: 9px;
156
+ height: 9px;
157
+ left: -5px;
158
+ top: -5px;
159
+ }
160
+ .ui-resizable-ne {
161
+ cursor: ne-resize;
162
+ width: 9px;
163
+ height: 9px;
164
+ right: -5px;
165
+ top: -5px;
166
+ }
167
+ .ui-selectable {
168
+ -ms-touch-action: none;
169
+ touch-action: none;
170
+ }
171
+ .ui-selectable-helper {
172
+ position: absolute;
173
+ z-index: 100;
174
+ border: 1px dotted black;
175
+ }
176
+ .ui-sortable-handle {
177
+ -ms-touch-action: none;
178
+ touch-action: none;
179
+ }
180
+ .ui-accordion .ui-accordion-header {
181
+ display: block;
182
+ cursor: pointer;
183
+ position: relative;
184
+ margin: 2px 0 0 0;
185
+ padding: .5em .5em .5em .7em;
186
+ font-size: 100%;
187
+ }
188
+ .ui-accordion .ui-accordion-content {
189
+ padding: 1em 2.2em;
190
+ border-top: 0;
191
+ overflow: auto;
192
+ }
193
+ .ui-autocomplete {
194
+ position: absolute;
195
+ top: 0;
196
+ left: 0;
197
+ cursor: default;
198
+ }
199
+ .ui-menu {
200
+ list-style: none;
201
+ padding: 0;
202
+ margin: 0;
203
+ display: block;
204
+ outline: 0;
205
+ }
206
+ .ui-menu .ui-menu {
207
+ position: absolute;
208
+ }
209
+ .ui-menu .ui-menu-item {
210
+ margin: 0;
211
+ cursor: pointer;
212
+ /* support: IE10, see #8844 */
213
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
214
+ }
215
+ .ui-menu .ui-menu-item-wrapper {
216
+ position: relative;
217
+ padding: 3px 1em 3px .4em;
218
+ }
219
+ .ui-menu .ui-menu-divider {
220
+ margin: 5px 0;
221
+ height: 0;
222
+ font-size: 0;
223
+ line-height: 0;
224
+ border-width: 1px 0 0 0;
225
+ }
226
+ .ui-menu .ui-state-focus,
227
+ .ui-menu .ui-state-active {
228
+ margin: -1px;
229
+ }
230
+
231
+ /* icon support */
232
+ .ui-menu-icons {
233
+ position: relative;
234
+ }
235
+ .ui-menu-icons .ui-menu-item-wrapper {
236
+ padding-left: 2em;
237
+ }
238
+
239
+ /* left-aligned */
240
+ .ui-menu .ui-icon {
241
+ position: absolute;
242
+ top: 0;
243
+ bottom: 0;
244
+ left: .2em;
245
+ margin: auto 0;
246
+ }
247
+
248
+ /* right-aligned */
249
+ .ui-menu .ui-menu-icon {
250
+ left: auto;
251
+ right: 0;
252
+ }
253
+ .ui-button {
254
+ padding: .4em 1em;
255
+ display: inline-block;
256
+ position: relative;
257
+ line-height: normal;
258
+ margin-right: .1em;
259
+ cursor: pointer;
260
+ vertical-align: middle;
261
+ text-align: center;
262
+ -webkit-user-select: none;
263
+ -moz-user-select: none;
264
+ -ms-user-select: none;
265
+ user-select: none;
266
+
267
+ /* Support: IE <= 11 */
268
+ overflow: visible;
269
+ }
270
+
271
+ .ui-button,
272
+ .ui-button:link,
273
+ .ui-button:visited,
274
+ .ui-button:hover,
275
+ .ui-button:active {
276
+ text-decoration: none;
277
+ }
278
+
279
+ /* to make room for the icon, a width needs to be set here */
280
+ .ui-button-icon-only {
281
+ width: 2em;
282
+ box-sizing: border-box;
283
+ text-indent: -9999px;
284
+ white-space: nowrap;
285
+ }
286
+
287
+ /* no icon support for input elements */
288
+ input.ui-button.ui-button-icon-only {
289
+ text-indent: 0;
290
+ }
291
+
292
+ /* button icon element(s) */
293
+ .ui-button-icon-only .ui-icon {
294
+ position: absolute;
295
+ top: 50%;
296
+ left: 50%;
297
+ margin-top: -8px;
298
+ margin-left: -8px;
299
+ }
300
+
301
+ .ui-button.ui-icon-notext .ui-icon {
302
+ padding: 0;
303
+ width: 2.1em;
304
+ height: 2.1em;
305
+ text-indent: -9999px;
306
+ white-space: nowrap;
307
+
308
+ }
309
+
310
+ input.ui-button.ui-icon-notext .ui-icon {
311
+ width: auto;
312
+ height: auto;
313
+ text-indent: 0;
314
+ white-space: normal;
315
+ padding: .4em 1em;
316
+ }
317
+
318
+ /* workarounds */
319
+ /* Support: Firefox 5 - 40 */
320
+ input.ui-button::-moz-focus-inner,
321
+ button.ui-button::-moz-focus-inner {
322
+ border: 0;
323
+ padding: 0;
324
+ }
325
+ .ui-controlgroup {
326
+ vertical-align: middle;
327
+ display: inline-block;
328
+ }
329
+ .ui-controlgroup > .ui-controlgroup-item {
330
+ float: left;
331
+ margin-left: 0;
332
+ margin-right: 0;
333
+ }
334
+ .ui-controlgroup > .ui-controlgroup-item:focus,
335
+ .ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
336
+ z-index: 9999;
337
+ }
338
+ .ui-controlgroup-vertical > .ui-controlgroup-item {
339
+ display: block;
340
+ float: none;
341
+ width: 100%;
342
+ margin-top: 0;
343
+ margin-bottom: 0;
344
+ text-align: left;
345
+ }
346
+ .ui-controlgroup-vertical .ui-controlgroup-item {
347
+ box-sizing: border-box;
348
+ }
349
+ .ui-controlgroup .ui-controlgroup-label {
350
+ padding: .4em 1em;
351
+ }
352
+ .ui-controlgroup .ui-controlgroup-label span {
353
+ font-size: 80%;
354
+ }
355
+ .ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
356
+ border-left: none;
357
+ }
358
+ .ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
359
+ border-top: none;
360
+ }
361
+ .ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
362
+ border-right: none;
363
+ }
364
+ .ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
365
+ border-bottom: none;
366
+ }
367
+
368
+ /* Spinner specific style fixes */
369
+ .ui-controlgroup-vertical .ui-spinner-input {
370
+
371
+ /* Support: IE8 only, Android < 4.4 only */
372
+ width: 75%;
373
+ width: calc( 100% - 2.4em );
374
+ }
375
+ .ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
376
+ border-top-style: solid;
377
+ }
378
+
379
+ .ui-checkboxradio-label .ui-icon-background {
380
+ box-shadow: inset 1px 1px 1px #ccc;
381
+ border-radius: .12em;
382
+ border: none;
383
+ }
384
+ .ui-checkboxradio-radio-label .ui-icon-background {
385
+ width: 16px;
386
+ height: 16px;
387
+ border-radius: 1em;
388
+ overflow: visible;
389
+ border: none;
390
+ }
391
+ .ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
392
+ .ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
393
+ background-image: none;
394
+ width: 8px;
395
+ height: 8px;
396
+ border-width: 4px;
397
+ border-style: solid;
398
+ }
399
+ .ui-checkboxradio-disabled {
400
+ pointer-events: none;
401
+ }
402
+ .ui-datepicker {
403
+ width: 17em;
404
+ padding: .2em .2em 0;
405
+ display: none;
406
+ }
407
+ .ui-datepicker .ui-datepicker-header {
408
+ position: relative;
409
+ padding: .2em 0;
410
+ }
411
+ .ui-datepicker .ui-datepicker-prev,
412
+ .ui-datepicker .ui-datepicker-next {
413
+ position: absolute;
414
+ top: 2px;
415
+ width: 1.8em;
416
+ height: 1.8em;
417
+ }
418
+ .ui-datepicker .ui-datepicker-prev-hover,
419
+ .ui-datepicker .ui-datepicker-next-hover {
420
+ top: 1px;
421
+ }
422
+ .ui-datepicker .ui-datepicker-prev {
423
+ left: 2px;
424
+ }
425
+ .ui-datepicker .ui-datepicker-next {
426
+ right: 2px;
427
+ }
428
+ .ui-datepicker .ui-datepicker-prev-hover {
429
+ left: 1px;
430
+ }
431
+ .ui-datepicker .ui-datepicker-next-hover {
432
+ right: 1px;
433
+ }
434
+ .ui-datepicker .ui-datepicker-prev span,
435
+ .ui-datepicker .ui-datepicker-next span {
436
+ display: block;
437
+ position: absolute;
438
+ left: 50%;
439
+ margin-left: -8px;
440
+ top: 50%;
441
+ margin-top: -8px;
442
+ }
443
+ .ui-datepicker .ui-datepicker-title {
444
+ margin: 0 2.3em;
445
+ line-height: 1.8em;
446
+ text-align: center;
447
+ }
448
+ .ui-datepicker .ui-datepicker-title select {
449
+ font-size: 1em;
450
+ margin: 1px 0;
451
+ }
452
+ .ui-datepicker select.ui-datepicker-month,
453
+ .ui-datepicker select.ui-datepicker-year {
454
+ width: 45%;
455
+ }
456
+ .ui-datepicker table {
457
+ width: 100%;
458
+ font-size: .9em;
459
+ border-collapse: collapse;
460
+ margin: 0 0 .4em;
461
+ }
462
+ .ui-datepicker th {
463
+ padding: .7em .3em;
464
+ text-align: center;
465
+ font-weight: bold;
466
+ border: 0;
467
+ }
468
+ .ui-datepicker td {
469
+ border: 0;
470
+ padding: 1px;
471
+ }
472
+ .ui-datepicker td span,
473
+ .ui-datepicker td a {
474
+ display: block;
475
+ padding: .2em;
476
+ text-align: right;
477
+ text-decoration: none;
478
+ }
479
+ .ui-datepicker .ui-datepicker-buttonpane {
480
+ background-image: none;
481
+ margin: .7em 0 0 0;
482
+ padding: 0 .2em;
483
+ border-left: 0;
484
+ border-right: 0;
485
+ border-bottom: 0;
486
+ }
487
+ .ui-datepicker .ui-datepicker-buttonpane button {
488
+ float: right;
489
+ margin: .5em .2em .4em;
490
+ cursor: pointer;
491
+ padding: .2em .6em .3em .6em;
492
+ width: auto;
493
+ overflow: visible;
494
+ }
495
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
496
+ float: left;
497
+ }
498
+
499
+ /* with multiple calendars */
500
+ .ui-datepicker.ui-datepicker-multi {
501
+ width: auto;
502
+ }
503
+ .ui-datepicker-multi .ui-datepicker-group {
504
+ float: left;
505
+ }
506
+ .ui-datepicker-multi .ui-datepicker-group table {
507
+ width: 95%;
508
+ margin: 0 auto .4em;
509
+ }
510
+ .ui-datepicker-multi-2 .ui-datepicker-group {
511
+ width: 50%;
512
+ }
513
+ .ui-datepicker-multi-3 .ui-datepicker-group {
514
+ width: 33.3%;
515
+ }
516
+ .ui-datepicker-multi-4 .ui-datepicker-group {
517
+ width: 25%;
518
+ }
519
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
520
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
521
+ border-left-width: 0;
522
+ }
523
+ .ui-datepicker-multi .ui-datepicker-buttonpane {
524
+ clear: left;
525
+ }
526
+ .ui-datepicker-row-break {
527
+ clear: both;
528
+ width: 100%;
529
+ font-size: 0;
530
+ }
531
+
532
+ /* RTL support */
533
+ .ui-datepicker-rtl {
534
+ direction: rtl;
535
+ }
536
+ .ui-datepicker-rtl .ui-datepicker-prev {
537
+ right: 2px;
538
+ left: auto;
539
+ }
540
+ .ui-datepicker-rtl .ui-datepicker-next {
541
+ left: 2px;
542
+ right: auto;
543
+ }
544
+ .ui-datepicker-rtl .ui-datepicker-prev:hover {
545
+ right: 1px;
546
+ left: auto;
547
+ }
548
+ .ui-datepicker-rtl .ui-datepicker-next:hover {
549
+ left: 1px;
550
+ right: auto;
551
+ }
552
+ .ui-datepicker-rtl .ui-datepicker-buttonpane {
553
+ clear: right;
554
+ }
555
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button {
556
+ float: left;
557
+ }
558
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
559
+ .ui-datepicker-rtl .ui-datepicker-group {
560
+ float: right;
561
+ }
562
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
563
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
564
+ border-right-width: 0;
565
+ border-left-width: 1px;
566
+ }
567
+
568
+ /* Icons */
569
+ .ui-datepicker .ui-icon {
570
+ display: block;
571
+ text-indent: -99999px;
572
+ overflow: hidden;
573
+ background-repeat: no-repeat;
574
+ left: .5em;
575
+ top: .3em;
576
+ }
577
+ .ui-dialog {
578
+ position: absolute;
579
+ top: 0;
580
+ left: 0;
581
+ padding: .2em;
582
+ outline: 0;
583
+ }
584
+ .ui-dialog .ui-dialog-titlebar {
585
+ padding: .4em 1em;
586
+ position: relative;
587
+ }
588
+ .ui-dialog .ui-dialog-title {
589
+ float: left;
590
+ margin: .1em 0;
591
+ white-space: nowrap;
592
+ width: 90%;
593
+ overflow: hidden;
594
+ text-overflow: ellipsis;
595
+ }
596
+ .ui-dialog .ui-dialog-titlebar-close {
597
+ position: absolute;
598
+ right: .3em;
599
+ top: 50%;
600
+ width: 20px;
601
+ margin: -10px 0 0 0;
602
+ padding: 1px;
603
+ height: 20px;
604
+ }
605
+ .ui-dialog .ui-dialog-content {
606
+ position: relative;
607
+ border: 0;
608
+ padding: .5em 1em;
609
+ background: none;
610
+ overflow: auto;
611
+ }
612
+ .ui-dialog .ui-dialog-buttonpane {
613
+ text-align: left;
614
+ border-width: 1px 0 0 0;
615
+ background-image: none;
616
+ margin-top: .5em;
617
+ padding: .3em 1em .5em .4em;
618
+ }
619
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
620
+ float: right;
621
+ }
622
+ .ui-dialog .ui-dialog-buttonpane button {
623
+ margin: .5em .4em .5em 0;
624
+ cursor: pointer;
625
+ }
626
+ .ui-dialog .ui-resizable-n {
627
+ height: 2px;
628
+ top: 0;
629
+ }
630
+ .ui-dialog .ui-resizable-e {
631
+ width: 2px;
632
+ right: 0;
633
+ }
634
+ .ui-dialog .ui-resizable-s {
635
+ height: 2px;
636
+ bottom: 0;
637
+ }
638
+ .ui-dialog .ui-resizable-w {
639
+ width: 2px;
640
+ left: 0;
641
+ }
642
+ .ui-dialog .ui-resizable-se,
643
+ .ui-dialog .ui-resizable-sw,
644
+ .ui-dialog .ui-resizable-ne,
645
+ .ui-dialog .ui-resizable-nw {
646
+ width: 7px;
647
+ height: 7px;
648
+ }
649
+ .ui-dialog .ui-resizable-se {
650
+ right: 0;
651
+ bottom: 0;
652
+ }
653
+ .ui-dialog .ui-resizable-sw {
654
+ left: 0;
655
+ bottom: 0;
656
+ }
657
+ .ui-dialog .ui-resizable-ne {
658
+ right: 0;
659
+ top: 0;
660
+ }
661
+ .ui-dialog .ui-resizable-nw {
662
+ left: 0;
663
+ top: 0;
664
+ }
665
+ .ui-draggable .ui-dialog-titlebar {
666
+ cursor: move;
667
+ }
668
+ .ui-progressbar {
669
+ height: 2em;
670
+ text-align: left;
671
+ overflow: hidden;
672
+ }
673
+ .ui-progressbar .ui-progressbar-value {
674
+ margin: -1px;
675
+ height: 100%;
676
+ }
677
+ .ui-progressbar .ui-progressbar-overlay {
678
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
679
+ height: 100%;
680
+ filter: alpha(opacity=25); /* support: IE8 */
681
+ opacity: 0.25;
682
+ }
683
+ .ui-progressbar-indeterminate .ui-progressbar-value {
684
+ background-image: none;
685
+ }
686
+ .ui-selectmenu-menu {
687
+ padding: 0;
688
+ margin: 0;
689
+ position: absolute;
690
+ top: 0;
691
+ left: 0;
692
+ display: none;
693
+ }
694
+ .ui-selectmenu-menu .ui-menu {
695
+ overflow: auto;
696
+ overflow-x: hidden;
697
+ padding-bottom: 1px;
698
+ }
699
+ .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
700
+ font-size: 1em;
701
+ font-weight: bold;
702
+ line-height: 1.5;
703
+ padding: 2px 0.4em;
704
+ margin: 0.5em 0 0 0;
705
+ height: auto;
706
+ border: 0;
707
+ }
708
+ .ui-selectmenu-open {
709
+ display: block;
710
+ }
711
+ .ui-selectmenu-text {
712
+ display: block;
713
+ margin-right: 20px;
714
+ overflow: hidden;
715
+ text-overflow: ellipsis;
716
+ }
717
+ .ui-selectmenu-button.ui-button {
718
+ text-align: left;
719
+ white-space: nowrap;
720
+ width: 14em;
721
+ }
722
+ .ui-selectmenu-icon.ui-icon {
723
+ float: right;
724
+ margin-top: 0;
725
+ }
726
+ .ui-slider {
727
+ position: relative;
728
+ text-align: left;
729
+ }
730
+ .ui-slider .ui-slider-handle {
731
+ position: absolute;
732
+ z-index: 2;
733
+ width: 1.2em;
734
+ height: 1.2em;
735
+ cursor: default;
736
+ -ms-touch-action: none;
737
+ touch-action: none;
738
+ }
739
+ .ui-slider .ui-slider-range {
740
+ position: absolute;
741
+ z-index: 1;
742
+ font-size: .7em;
743
+ display: block;
744
+ border: 0;
745
+ background-position: 0 0;
746
+ }
747
+
748
+ /* support: IE8 - See #6727 */
749
+ .ui-slider.ui-state-disabled .ui-slider-handle,
750
+ .ui-slider.ui-state-disabled .ui-slider-range {
751
+ filter: inherit;
752
+ }
753
+
754
+ .ui-slider-horizontal {
755
+ height: .8em;
756
+ }
757
+ .ui-slider-horizontal .ui-slider-handle {
758
+ top: -.3em;
759
+ margin-left: -.6em;
760
+ }
761
+ .ui-slider-horizontal .ui-slider-range {
762
+ top: 0;
763
+ height: 100%;
764
+ }
765
+ .ui-slider-horizontal .ui-slider-range-min {
766
+ left: 0;
767
+ }
768
+ .ui-slider-horizontal .ui-slider-range-max {
769
+ right: 0;
770
+ }
771
+
772
+ .ui-slider-vertical {
773
+ width: .8em;
774
+ height: 100px;
775
+ }
776
+ .ui-slider-vertical .ui-slider-handle {
777
+ left: -.3em;
778
+ margin-left: 0;
779
+ margin-bottom: -.6em;
780
+ }
781
+ .ui-slider-vertical .ui-slider-range {
782
+ left: 0;
783
+ width: 100%;
784
+ }
785
+ .ui-slider-vertical .ui-slider-range-min {
786
+ bottom: 0;
787
+ }
788
+ .ui-slider-vertical .ui-slider-range-max {
789
+ top: 0;
790
+ }
791
+ .ui-spinner {
792
+ position: relative;
793
+ display: inline-block;
794
+ overflow: hidden;
795
+ padding: 0;
796
+ vertical-align: middle;
797
+ }
798
+ .ui-spinner-input {
799
+ border: none;
800
+ background: none;
801
+ color: inherit;
802
+ padding: .222em 0;
803
+ margin: .2em 0;
804
+ vertical-align: middle;
805
+ margin-left: .4em;
806
+ margin-right: 2em;
807
+ }
808
+ .ui-spinner-button {
809
+ width: 1.6em;
810
+ height: 50%;
811
+ font-size: .5em;
812
+ padding: 0;
813
+ margin: 0;
814
+ text-align: center;
815
+ position: absolute;
816
+ cursor: default;
817
+ display: block;
818
+ overflow: hidden;
819
+ right: 0;
820
+ }
821
+ /* more specificity required here to override default borders */
822
+ .ui-spinner a.ui-spinner-button {
823
+ border-top-style: none;
824
+ border-bottom-style: none;
825
+ border-right-style: none;
826
+ }
827
+ .ui-spinner-up {
828
+ top: 0;
829
+ }
830
+ .ui-spinner-down {
831
+ bottom: 0;
832
+ }
833
+ .ui-tabs {
834
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
835
+ padding: .2em;
836
+ }
837
+ .ui-tabs .ui-tabs-nav {
838
+ margin: 0;
839
+ padding: .2em .2em 0;
840
+ }
841
+ .ui-tabs .ui-tabs-nav li {
842
+ list-style: none;
843
+ float: left;
844
+ position: relative;
845
+ top: 0;
846
+ margin: 1px .2em 0 0;
847
+ border-bottom-width: 0;
848
+ padding: 0;
849
+ white-space: nowrap;
850
+ }
851
+ .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
852
+ float: left;
853
+ padding: .5em 1em;
854
+ text-decoration: none;
855
+ }
856
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active {
857
+ margin-bottom: -1px;
858
+ padding-bottom: 1px;
859
+ }
860
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
861
+ .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
862
+ .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
863
+ cursor: text;
864
+ }
865
+ .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
866
+ cursor: pointer;
867
+ }
868
+ .ui-tabs .ui-tabs-panel {
869
+ display: block;
870
+ border-width: 0;
871
+ padding: 1em 1.4em;
872
+ background: none;
873
+ }
874
+ .ui-tooltip {
875
+ padding: 8px;
876
+ position: absolute;
877
+ z-index: 9999;
878
+ max-width: 300px;
879
+ }
880
+ body .ui-tooltip {
881
+ border-width: 2px;
882
+ }
883
+
884
+ /* Component containers
885
+ ----------------------------------*/
886
+ .ui-widget {
887
+ font-family: Arial,Helvetica,sans-serif;
888
+ font-size: 1em;
889
+ }
890
+ .ui-widget .ui-widget {
891
+ font-size: 1em;
892
+ }
893
+ .ui-widget input,
894
+ .ui-widget select,
895
+ .ui-widget textarea,
896
+ .ui-widget button {
897
+ font-family: Arial,Helvetica,sans-serif;
898
+ font-size: 1em;
899
+ }
900
+ .ui-widget.ui-widget-content {
901
+ border: 1px solid #c5c5c5;
902
+ }
903
+ .ui-widget-content {
904
+ border: 1px solid #dddddd;
905
+ background: #ffffff;
906
+ color: #333333;
907
+ }
908
+ .ui-widget-content a {
909
+ color: #333333;
910
+ }
911
+ .ui-widget-header {
912
+ border: 1px solid #dddddd;
913
+ background: #e9e9e9;
914
+ color: #333333;
915
+ font-weight: bold;
916
+ }
917
+ .ui-widget-header a {
918
+ color: #333333;
919
+ }
920
+
921
+ /* Interaction states
922
+ ----------------------------------*/
923
+ .ui-state-default,
924
+ .ui-widget-content .ui-state-default,
925
+ .ui-widget-header .ui-state-default,
926
+ .ui-button,
927
+
928
+ /* We use html here because we need a greater specificity to make sure disabled
929
+ works properly when clicked or hovered */
930
+ html .ui-button.ui-state-disabled:hover,
931
+ html .ui-button.ui-state-disabled:active {
932
+ border: 1px solid #c5c5c5;
933
+ background: #f6f6f6;
934
+ font-weight: normal;
935
+ color: #454545;
936
+ }
937
+ .ui-state-default a,
938
+ .ui-state-default a:link,
939
+ .ui-state-default a:visited,
940
+ a.ui-button,
941
+ a:link.ui-button,
942
+ a:visited.ui-button,
943
+ .ui-button {
944
+ color: #454545;
945
+ text-decoration: none;
946
+ }
947
+ .ui-state-hover,
948
+ .ui-widget-content .ui-state-hover,
949
+ .ui-widget-header .ui-state-hover,
950
+ .ui-state-focus,
951
+ .ui-widget-content .ui-state-focus,
952
+ .ui-widget-header .ui-state-focus,
953
+ .ui-button:hover,
954
+ .ui-button:focus {
955
+ border: 1px solid #cccccc;
956
+ background: #ededed;
957
+ font-weight: normal;
958
+ color: #2b2b2b;
959
+ }
960
+ .ui-state-hover a,
961
+ .ui-state-hover a:hover,
962
+ .ui-state-hover a:link,
963
+ .ui-state-hover a:visited,
964
+ .ui-state-focus a,
965
+ .ui-state-focus a:hover,
966
+ .ui-state-focus a:link,
967
+ .ui-state-focus a:visited,
968
+ a.ui-button:hover,
969
+ a.ui-button:focus {
970
+ color: #2b2b2b;
971
+ text-decoration: none;
972
+ }
973
+
974
+ .ui-visual-focus {
975
+ box-shadow: 0 0 3px 1px rgb(94, 158, 214);
976
+ }
977
+ .ui-state-active,
978
+ .ui-widget-content .ui-state-active,
979
+ .ui-widget-header .ui-state-active,
980
+ a.ui-button:active,
981
+ .ui-button:active,
982
+ .ui-button.ui-state-active:hover {
983
+ border: 1px solid #003eff;
984
+ background: #007fff;
985
+ font-weight: normal;
986
+ color: #ffffff;
987
+ }
988
+ .ui-icon-background,
989
+ .ui-state-active .ui-icon-background {
990
+ border: #003eff;
991
+ background-color: #ffffff;
992
+ }
993
+ .ui-state-active a,
994
+ .ui-state-active a:link,
995
+ .ui-state-active a:visited {
996
+ color: #ffffff;
997
+ text-decoration: none;
998
+ }
999
+
1000
+ /* Interaction Cues
1001
+ ----------------------------------*/
1002
+ .ui-state-highlight,
1003
+ .ui-widget-content .ui-state-highlight,
1004
+ .ui-widget-header .ui-state-highlight {
1005
+ border: 1px solid #dad55e;
1006
+ background: #fffa90;
1007
+ color: #777620;
1008
+ }
1009
+ .ui-state-checked {
1010
+ border: 1px solid #dad55e;
1011
+ background: #fffa90;
1012
+ }
1013
+ .ui-state-highlight a,
1014
+ .ui-widget-content .ui-state-highlight a,
1015
+ .ui-widget-header .ui-state-highlight a {
1016
+ color: #777620;
1017
+ }
1018
+ .ui-state-error,
1019
+ .ui-widget-content .ui-state-error,
1020
+ .ui-widget-header .ui-state-error {
1021
+ border: 1px solid #f1a899;
1022
+ background: #fddfdf;
1023
+ color: #5f3f3f;
1024
+ }
1025
+ .ui-state-error a,
1026
+ .ui-widget-content .ui-state-error a,
1027
+ .ui-widget-header .ui-state-error a {
1028
+ color: #5f3f3f;
1029
+ }
1030
+ .ui-state-error-text,
1031
+ .ui-widget-content .ui-state-error-text,
1032
+ .ui-widget-header .ui-state-error-text {
1033
+ color: #5f3f3f;
1034
+ }
1035
+ .ui-priority-primary,
1036
+ .ui-widget-content .ui-priority-primary,
1037
+ .ui-widget-header .ui-priority-primary {
1038
+ font-weight: bold;
1039
+ }
1040
+ .ui-priority-secondary,
1041
+ .ui-widget-content .ui-priority-secondary,
1042
+ .ui-widget-header .ui-priority-secondary {
1043
+ opacity: .7;
1044
+ filter:Alpha(Opacity=70); /* support: IE8 */
1045
+ font-weight: normal;
1046
+ }
1047
+ .ui-state-disabled,
1048
+ .ui-widget-content .ui-state-disabled,
1049
+ .ui-widget-header .ui-state-disabled {
1050
+ opacity: .35;
1051
+ filter:Alpha(Opacity=35); /* support: IE8 */
1052
+ background-image: none;
1053
+ }
1054
+ .ui-state-disabled .ui-icon {
1055
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
1056
+ }
1057
+
1058
+ /* Icons
1059
+ ----------------------------------*/
1060
+
1061
+ /* states and images */
1062
+ .ui-icon {
1063
+ width: 16px;
1064
+ height: 16px;
1065
+ }
1066
+ .ui-icon,
1067
+ .ui-widget-content .ui-icon {
1068
+ background-image: url("images/ui-icons_444444_256x240.png");
1069
+ }
1070
+ .ui-widget-header .ui-icon {
1071
+ background-image: url("images/ui-icons_444444_256x240.png");
1072
+ }
1073
+ .ui-state-hover .ui-icon,
1074
+ .ui-state-focus .ui-icon,
1075
+ .ui-button:hover .ui-icon,
1076
+ .ui-button:focus .ui-icon {
1077
+ background-image: url("images/ui-icons_555555_256x240.png");
1078
+ }
1079
+ .ui-state-active .ui-icon,
1080
+ .ui-button:active .ui-icon {
1081
+ background-image: url("images/ui-icons_ffffff_256x240.png");
1082
+ }
1083
+ .ui-state-highlight .ui-icon,
1084
+ .ui-button .ui-state-highlight.ui-icon {
1085
+ background-image: url("images/ui-icons_777620_256x240.png");
1086
+ }
1087
+ .ui-state-error .ui-icon,
1088
+ .ui-state-error-text .ui-icon {
1089
+ background-image: url("images/ui-icons_cc0000_256x240.png");
1090
+ }
1091
+ .ui-button .ui-icon {
1092
+ background-image: url("images/ui-icons_777777_256x240.png");
1093
+ }
1094
+
1095
+ /* positioning */
1096
+ .ui-icon-blank { background-position: 16px 16px; }
1097
+ .ui-icon-caret-1-n { background-position: 0 0; }
1098
+ .ui-icon-caret-1-ne { background-position: -16px 0; }
1099
+ .ui-icon-caret-1-e { background-position: -32px 0; }
1100
+ .ui-icon-caret-1-se { background-position: -48px 0; }
1101
+ .ui-icon-caret-1-s { background-position: -65px 0; }
1102
+ .ui-icon-caret-1-sw { background-position: -80px 0; }
1103
+ .ui-icon-caret-1-w { background-position: -96px 0; }
1104
+ .ui-icon-caret-1-nw { background-position: -112px 0; }
1105
+ .ui-icon-caret-2-n-s { background-position: -128px 0; }
1106
+ .ui-icon-caret-2-e-w { background-position: -144px 0; }
1107
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
1108
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
1109
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
1110
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
1111
+ .ui-icon-triangle-1-s { background-position: -65px -16px; }
1112
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
1113
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
1114
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
1115
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
1116
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
1117
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
1118
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
1119
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
1120
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
1121
+ .ui-icon-arrow-1-s { background-position: -65px -32px; }
1122
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
1123
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
1124
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
1125
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
1126
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
1127
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
1128
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
1129
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
1130
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
1131
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
1132
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
1133
+ .ui-icon-arrowthick-1-n { background-position: 1px -48px; }
1134
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
1135
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
1136
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
1137
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
1138
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
1139
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
1140
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
1141
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
1142
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
1143
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
1144
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
1145
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
1146
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
1147
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
1148
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
1149
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
1150
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
1151
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
1152
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
1153
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
1154
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
1155
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
1156
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
1157
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
1158
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
1159
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
1160
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
1161
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
1162
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
1163
+ .ui-icon-extlink { background-position: -32px -80px; }
1164
+ .ui-icon-newwin { background-position: -48px -80px; }
1165
+ .ui-icon-refresh { background-position: -64px -80px; }
1166
+ .ui-icon-shuffle { background-position: -80px -80px; }
1167
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
1168
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
1169
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
1170
+ .ui-icon-folder-open { background-position: -16px -96px; }
1171
+ .ui-icon-document { background-position: -32px -96px; }
1172
+ .ui-icon-document-b { background-position: -48px -96px; }
1173
+ .ui-icon-note { background-position: -64px -96px; }
1174
+ .ui-icon-mail-closed { background-position: -80px -96px; }
1175
+ .ui-icon-mail-open { background-position: -96px -96px; }
1176
+ .ui-icon-suitcase { background-position: -112px -96px; }
1177
+ .ui-icon-comment { background-position: -128px -96px; }
1178
+ .ui-icon-person { background-position: -144px -96px; }
1179
+ .ui-icon-print { background-position: -160px -96px; }
1180
+ .ui-icon-trash { background-position: -176px -96px; }
1181
+ .ui-icon-locked { background-position: -192px -96px; }
1182
+ .ui-icon-unlocked { background-position: -208px -96px; }
1183
+ .ui-icon-bookmark { background-position: -224px -96px; }
1184
+ .ui-icon-tag { background-position: -240px -96px; }
1185
+ .ui-icon-home { background-position: 0 -112px; }
1186
+ .ui-icon-flag { background-position: -16px -112px; }
1187
+ .ui-icon-calendar { background-position: -32px -112px; }
1188
+ .ui-icon-cart { background-position: -48px -112px; }
1189
+ .ui-icon-pencil { background-position: -64px -112px; }
1190
+ .ui-icon-clock { background-position: -80px -112px; }
1191
+ .ui-icon-disk { background-position: -96px -112px; }
1192
+ .ui-icon-calculator { background-position: -112px -112px; }
1193
+ .ui-icon-zoomin { background-position: -128px -112px; }
1194
+ .ui-icon-zoomout { background-position: -144px -112px; }
1195
+ .ui-icon-search { background-position: -160px -112px; }
1196
+ .ui-icon-wrench { background-position: -176px -112px; }
1197
+ .ui-icon-gear { background-position: -192px -112px; }
1198
+ .ui-icon-heart { background-position: -208px -112px; }
1199
+ .ui-icon-star { background-position: -224px -112px; }
1200
+ .ui-icon-link { background-position: -240px -112px; }
1201
+ .ui-icon-cancel { background-position: 0 -128px; }
1202
+ .ui-icon-plus { background-position: -16px -128px; }
1203
+ .ui-icon-plusthick { background-position: -32px -128px; }
1204
+ .ui-icon-minus { background-position: -48px -128px; }
1205
+ .ui-icon-minusthick { background-position: -64px -128px; }
1206
+ .ui-icon-close { background-position: -80px -128px; }
1207
+ .ui-icon-closethick { background-position: -96px -128px; }
1208
+ .ui-icon-key { background-position: -112px -128px; }
1209
+ .ui-icon-lightbulb { background-position: -128px -128px; }
1210
+ .ui-icon-scissors { background-position: -144px -128px; }
1211
+ .ui-icon-clipboard { background-position: -160px -128px; }
1212
+ .ui-icon-copy { background-position: -176px -128px; }
1213
+ .ui-icon-contact { background-position: -192px -128px; }
1214
+ .ui-icon-image { background-position: -208px -128px; }
1215
+ .ui-icon-video { background-position: -224px -128px; }
1216
+ .ui-icon-script { background-position: -240px -128px; }
1217
+ .ui-icon-alert { background-position: 0 -144px; }
1218
+ .ui-icon-info { background-position: -16px -144px; }
1219
+ .ui-icon-notice { background-position: -32px -144px; }
1220
+ .ui-icon-help { background-position: -48px -144px; }
1221
+ .ui-icon-check { background-position: -64px -144px; }
1222
+ .ui-icon-bullet { background-position: -80px -144px; }
1223
+ .ui-icon-radio-on { background-position: -96px -144px; }
1224
+ .ui-icon-radio-off { background-position: -112px -144px; }
1225
+ .ui-icon-pin-w { background-position: -128px -144px; }
1226
+ .ui-icon-pin-s { background-position: -144px -144px; }
1227
+ .ui-icon-play { background-position: 0 -160px; }
1228
+ .ui-icon-pause { background-position: -16px -160px; }
1229
+ .ui-icon-seek-next { background-position: -32px -160px; }
1230
+ .ui-icon-seek-prev { background-position: -48px -160px; }
1231
+ .ui-icon-seek-end { background-position: -64px -160px; }
1232
+ .ui-icon-seek-start { background-position: -80px -160px; }
1233
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1234
+ .ui-icon-seek-first { background-position: -80px -160px; }
1235
+ .ui-icon-stop { background-position: -96px -160px; }
1236
+ .ui-icon-eject { background-position: -112px -160px; }
1237
+ .ui-icon-volume-off { background-position: -128px -160px; }
1238
+ .ui-icon-volume-on { background-position: -144px -160px; }
1239
+ .ui-icon-power { background-position: 0 -176px; }
1240
+ .ui-icon-signal-diag { background-position: -16px -176px; }
1241
+ .ui-icon-signal { background-position: -32px -176px; }
1242
+ .ui-icon-battery-0 { background-position: -48px -176px; }
1243
+ .ui-icon-battery-1 { background-position: -64px -176px; }
1244
+ .ui-icon-battery-2 { background-position: -80px -176px; }
1245
+ .ui-icon-battery-3 { background-position: -96px -176px; }
1246
+ .ui-icon-circle-plus { background-position: 0 -192px; }
1247
+ .ui-icon-circle-minus { background-position: -16px -192px; }
1248
+ .ui-icon-circle-close { background-position: -32px -192px; }
1249
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
1250
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
1251
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
1252
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
1253
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
1254
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
1255
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
1256
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
1257
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
1258
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
1259
+ .ui-icon-circle-check { background-position: -208px -192px; }
1260
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
1261
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
1262
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
1263
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
1264
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
1265
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
1266
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1267
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1268
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1269
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1270
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1271
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1272
+
1273
+
1274
+ /* Misc visuals
1275
+ ----------------------------------*/
1276
+
1277
+ /* Corner radius */
1278
+ .ui-corner-all,
1279
+ .ui-corner-top,
1280
+ .ui-corner-left,
1281
+ .ui-corner-tl {
1282
+ border-top-left-radius: 3px;
1283
+ }
1284
+ .ui-corner-all,
1285
+ .ui-corner-top,
1286
+ .ui-corner-right,
1287
+ .ui-corner-tr {
1288
+ border-top-right-radius: 3px;
1289
+ }
1290
+ .ui-corner-all,
1291
+ .ui-corner-bottom,
1292
+ .ui-corner-left,
1293
+ .ui-corner-bl {
1294
+ border-bottom-left-radius: 3px;
1295
+ }
1296
+ .ui-corner-all,
1297
+ .ui-corner-bottom,
1298
+ .ui-corner-right,
1299
+ .ui-corner-br {
1300
+ border-bottom-right-radius: 3px;
1301
+ }
1302
+
1303
+ /* Overlays */
1304
+ .ui-widget-overlay {
1305
+ background: #aaaaaa;
1306
+ opacity: .3;
1307
+ filter: Alpha(Opacity=30); /* support: IE8 */
1308
+ }
1309
+ .ui-widget-shadow {
1310
+ -webkit-box-shadow: 0px 0px 5px #666666;
1311
+ box-shadow: 0px 0px 5px #666666;
1312
+ }
assets/css/jquery-ui.min.css ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.12.1 - 2017-02-15
2
+ * http://jqueryui.com
3
+ * Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
5
+ * Copyright jQuery Foundation and other contributors; Licensed MIT */
6
+
7
+ .ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}
assets/js/otd-datepicker.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Datepicker format
3
+ */
4
+
5
+ jQuery(function() {
6
+ jQuery( ".datepicker" ).datepicker({
7
+ dateFormat : "mm-dd"
8
+ });
9
+ });
changelog.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ === 1.0.0 ===
2
+
3
+ * September 2018 by Ipstenu
4
+ * Reboot and rebranding - all the good, none of the bad.
gutenberg/_main.php ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin File: Gutenberg Blocks
4
+ * @since 1.0
5
+ */
6
+
7
+ if ( ! defined( 'WPINC' ) ) {
8
+ die;
9
+ }
10
+
11
+ class LezWatchTV_Gutenblocks {
12
+
13
+ protected static $directory;
14
+
15
+ public function __construct() {
16
+ self::$directory = dirname( __FILE__ );
17
+
18
+ //add_action( 'init', array( $this, 'died_on_this_day' ) );
19
+ add_action( 'init', array( $this, 'of_the_day' ) );
20
+ add_action( 'init', array( $this, 'last_death' ) );
21
+
22
+ // Add a block category
23
+ add_filter( 'block_categories', function( $categories, $post ) {
24
+ return array_merge(
25
+ $categories,
26
+ array(
27
+ array(
28
+ 'slug' => 'lezwatchtv',
29
+ 'title' => 'LezWatchTV',
30
+ ),
31
+ )
32
+ );
33
+ }, 10, 2 );
34
+ }
35
+
36
+ public function last_death() {
37
+ $index_js = 'last-death/index.js';
38
+ wp_register_script(
39
+ 'last-death-editor',
40
+ plugins_url( $index_js, __FILE__ ),
41
+ array( 'wp-blocks', 'wp-element', 'wp-components', 'wp-editor' ),
42
+ filemtime( self::$directory . '/' . $index_js ),
43
+ false
44
+ );
45
+
46
+ $style_css = 'last-death/style.css';
47
+ wp_register_style(
48
+ 'last-death-style',
49
+ plugins_url( $style_css, __FILE__ ),
50
+ array( 'wp-editor', 'wp-blocks' ),
51
+ filemtime( self::$directory . '/' . $style_css )
52
+ );
53
+
54
+ register_block_type(
55
+ 'lezwatchtv/last-death',
56
+ array(
57
+ 'attributes' => array(),
58
+ 'editor_script' => 'last-death-editor',
59
+ 'render_callback' => array( 'LezWatchTV', 'last_death' ),
60
+ )
61
+ );
62
+ }
63
+
64
+ public function of_the_day() {
65
+ $index_js = 'of-the-day/index.js';
66
+ wp_register_script(
67
+ 'of-the-day-editor',
68
+ plugins_url( $index_js, __FILE__ ),
69
+ array( 'wp-blocks', 'wp-element', 'wp-components', 'wp-editor' ),
70
+ filemtime( self::$directory . '/' . $index_js ),
71
+ false
72
+ );
73
+
74
+ $style_css = 'of-the-day/style.css';
75
+ wp_register_style(
76
+ 'of-the-day-style',
77
+ plugins_url( $style_css, __FILE__ ),
78
+ array( 'wp-editor', 'wp-blocks' ),
79
+ filemtime( self::$directory . '/' . $style_css )
80
+ );
81
+
82
+ register_block_type(
83
+ 'lezwatchtv/of-the-day',
84
+ array(
85
+ 'attributes' => array(
86
+ 'data' => array(
87
+ 'type' => 'string',
88
+ 'default' => 'of-the-day',
89
+ ),
90
+ 'otd' => array(
91
+ 'type' => 'string',
92
+ ),
93
+ ),
94
+ 'editor_script' => 'of-the-day-editor',
95
+ 'style' => 'of-the-day-style',
96
+ 'render_callback' => array( 'LezWatchTV', 'shortcode' ),
97
+ )
98
+ );
99
+ }
100
+
101
+ public function died_on_this_day() {
102
+ $index_js = 'died-on-this-day/index.js';
103
+ wp_register_script(
104
+ 'died-on-this-day-editor',
105
+ plugins_url( $index_js, __FILE__ ),
106
+ array( 'wp-blocks', 'wp-element', 'wp-components', 'wp-editor' ),
107
+ filemtime( self::$directory . '/' . $index_js ),
108
+ false
109
+ );
110
+
111
+ register_block_type(
112
+ 'lezwatchtv/died-on-this-day',
113
+ array(
114
+ 'attributes' => array(
115
+ 'data' => array(
116
+ 'type' => 'string',
117
+ 'default' => 'on-this-day',
118
+ ),
119
+ 'date' => array(
120
+ 'type' => 'array',
121
+ 'default' => time(),
122
+ ),
123
+ ),
124
+ 'editor_script' => 'died-on-this-day-editor',
125
+ 'render_callback' => array( 'LezWatchTV', 'shortcode' ),
126
+ )
127
+ );
128
+ }
129
+
130
+ }
131
+
132
+ if ( function_exists( 'register_block_type' ) ) {
133
+ new LezWatchTV_Gutenblocks();
134
+ }
gutenberg/died-on-this-day/index.js ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // License: GPLv2+
2
+ // https://gist.github.com/pento/cf38fd73ce0f13fcf0f0ae7d6c4b685d
3
+
4
+ var el = wp.element.createElement,
5
+ registerBlockType = wp.blocks.registerBlockType,
6
+ ServerSideRender = wp.components.ServerSideRender,
7
+ DateTimePicker = wp.components.DateTimePicker,
8
+ InspectorControls = wp.editor.InspectorControls;
9
+
10
+ // https://fontawesome.com/icons/dizzy?style=regular
11
+ const iconDizzy = el('svg', { width: 20, height: 20, viewBox: '0 0 496 512' },
12
+ el('path', { d: "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-33.8-217.9c7.8-7.8 7.8-20.5 0-28.3L196.3 192l17.9-17.9c7.8-7.8 7.8-20.5 0-28.3-7.8-7.8-20.5-7.8-28.3 0L168 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.9 7.7 20.5 7.7 28.4-.2zm160-92.2c-7.8-7.8-20.5-7.8-28.3 0L328 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.8 7.8 20.5 7.8 28.3 0 7.8-7.8 7.8-20.5 0-28.3l-17.8-18 17.9-17.9c7.7-7.8 7.7-20.4 0-28.2zM248 272c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64z" } )
13
+ );
14
+
15
+ registerBlockType( 'lezwatchtv/died-on-this-day', {
16
+ title: 'Died On This Day (LezWatchTV)',
17
+ icon: iconDizzy,
18
+ category: 'lezwatchtv',
19
+
20
+ edit: function( props ) {
21
+ return [
22
+ el( ServerSideRender, {
23
+ block: 'lezwatchtv/died-on-this-day',
24
+ attributes: props.attributes,
25
+ } ),
26
+ el( InspectorControls, {},
27
+ el( DateTimePicker, {
28
+ currentTime : props.attributes.date,
29
+ locale : 'en',
30
+ onChange: ( selected ) => { props.setAttributes( { date: selected } ); },
31
+ selected : props.attributes.date
32
+ } )
33
+ ),
34
+ ];
35
+ },
36
+
37
+ save: function() {
38
+ return null;
39
+ },
40
+ } );
gutenberg/last-death/index.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // License: GPLv2+
2
+ // https://gist.github.com/pento/cf38fd73ce0f13fcf0f0ae7d6c4b685d
3
+
4
+ var el = wp.element.createElement,
5
+ registerBlockType = wp.blocks.registerBlockType,
6
+ ServerSideRender = wp.components.ServerSideRender;
7
+
8
+ // https://fontawesome.com/icons/skull?style=solid
9
+ const iconSkull = el('svg', { width: 20, height: 20, viewBox: '0 0 512 512' },
10
+ el('path', { d: "M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z" } )
11
+ );
12
+
13
+ registerBlockType( 'lezwatchtv/last-death', {
14
+ title: 'Last Death (LezWatchTV)',
15
+ icon: iconSkull,
16
+ category: 'lezwatchtv',
17
+
18
+
19
+ edit: function( props ) {
20
+ return [
21
+ el( ServerSideRender, {
22
+ block: 'lezwatchtv/last-death',
23
+ } ),
24
+ ];
25
+ },
26
+
27
+ save: function() {
28
+ return null;
29
+ },
30
+ } );
gutenberg/last-death/style.css ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ .lezwatchtv.last-death {
2
+ background-color: #ebf5fa;
3
+ font-size: 0.875rem;
4
+ padding: 1rem;
5
+ }
gutenberg/of-the-day/index.js ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // License: GPLv2+
2
+ // https://gist.github.com/pento/cf38fd73ce0f13fcf0f0ae7d6c4b685d
3
+
4
+ var el = wp.element.createElement,
5
+ registerBlockType = wp.blocks.registerBlockType,
6
+ ServerSideRender = wp.components.ServerSideRender,
7
+ SelectControl = wp.components.SelectControl,
8
+ InspectorControls = wp.editor.InspectorControls;
9
+
10
+ // https://fontawesome.com/icons/calendar-check?style=regular
11
+ const iconCalendar = el('svg', { width: 20, height: 20, viewBox: '0 0 482 512' },
12
+ el('path', { d: "M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z" } )
13
+ );
14
+
15
+ registerBlockType( 'lezwatchtv/of-the-day', {
16
+ title: '... Of The Day (LezWatchTV)',
17
+ icon: iconCalendar,
18
+ category: 'lezwatchtv',
19
+
20
+ edit: function( props ) {
21
+ return [
22
+ el( ServerSideRender, {
23
+ block: 'lezwatchtv/of-the-day',
24
+ attributes: props.attributes,
25
+ } ),
26
+ el( InspectorControls, {},
27
+ el( SelectControl, {
28
+ type: 'string',
29
+ label: 'Content Type',
30
+ value: props.attributes.otd,
31
+ onChange: ( value ) => { props.setAttributes( { otd: value } ); },
32
+ options: [
33
+ { value: 'character', label: 'Character' },
34
+ { value: 'show', label: 'TV Show' },
35
+ { value: 'death', label: 'Character Death' },
36
+ { value: 'birthday', label: 'Actor Birthday' },
37
+ ],
38
+ } )
39
+ ),
40
+ ];
41
+ },
42
+
43
+ save: function() {
44
+ return null;
45
+ },
46
+ } );
gutenberg/of-the-day/style.css ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ .lezwatchtv.of-the-day {
2
+ text-align: center;
3
+ }
lezwatchtv-main.php ADDED
@@ -0,0 +1,391 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin Name: LezWatch.TV News & Information
4
+ * Plugin URI: https://lezwatchtv.com/about/resources/
5
+ * Description: Display information on queer female and trans representation on TV. Brought to you by LezWatch.TV.
6
+ * Version: 1.0.0
7
+ * Author: LezWatch.TV
8
+ * Author URI: https://lezwatchtv.com/
9
+ * License: GPLv2 (or Later)
10
+ *
11
+ * Copyright 2017-18 LezWatch.TV (email: webmaster@lezwatchtv.com)
12
+ *
13
+ * This file is part of LezWatch.TV News & Information, a plugin for WordPress.
14
+ *
15
+ * This plugin is free software: you can redistribute it and/or modify
16
+ * it under the terms of the GNU General Public License as published by
17
+ * the Free Software Foundation, either version 2 of the License, or
18
+ * (at your option) any later version.
19
+ *
20
+ * This plugin is distributed in the hope that it will be useful,
21
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
22
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
+ * GNU General Public License for more details.
24
+ *
25
+ * You should have received a copy of the GNU General Public License
26
+ * along with WordPress. If not, see <http://www.gnu.org/licenses/>.
27
+ */
28
+
29
+ /*
30
+ * class LezWatch.TV
31
+ *
32
+ * Main class for plugin
33
+ *
34
+ * @since 1.0
35
+ */
36
+ class LezWatchTV {
37
+
38
+ protected static $version;
39
+ public static $apiurl;
40
+
41
+ /**
42
+ * Constructor
43
+ */
44
+ public function __construct() {
45
+ add_action( 'widgets_init', array( $this, 'register_widgets' ) );
46
+ add_action( 'admin_init', array( $this, 'admin_init' ) );
47
+ add_action( 'init', array( $this, 'init' ) );
48
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
49
+
50
+ self::$version = '1.0.0';
51
+ self::$apiurl = 'https://lezwatchtv.com/wp-json/lwtv/v1';
52
+
53
+ // This should only apply to LWTV Dev sites.
54
+ if ( WP_DEBUG && ( defined( 'LWTV_DEV_SITE' ) && LWTV_DEV_SITE ) ) {
55
+ self::$apiurl = home_url() . '/wp-json/lwtv/v1';
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Admin Init
61
+ */
62
+ public function admin_init() {
63
+ if ( is_plugin_active( 'bury-your-queers/bury-your-queers.php' ) ) {
64
+ deactivate_plugins( 'bury-your-queers/bury-your-queers.php' );
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Init
70
+ */
71
+ public function init() {
72
+ add_shortcode( 'lwtv', array( $this, 'shortcode' ) );
73
+ add_filter( 'plugin_row_meta', array( $this, 'donate_link' ), 10, 2 );
74
+ }
75
+
76
+ /**
77
+ * Admin Scripts
78
+ */
79
+ public function admin_enqueue_scripts( $hook ) {
80
+ if ( 'widgets.php' !== $hook ) {
81
+ return;
82
+ }
83
+
84
+ wp_enqueue_script( 'lwtv-onthisday', plugins_url( 'assets/js/otd-datepicker.js', __FILE__ ), array( 'jquery-ui-datepicker' ), self::$version, true );
85
+ wp_enqueue_style( 'jquery-ui', plugins_url( 'assets/css/jquery-ui.css', __FILE__ ), array(), self::$version );
86
+ }
87
+
88
+ /**
89
+ * Shortcode
90
+ */
91
+ public static function shortcode( $atts ) {
92
+ $attributes = shortcode_atts(
93
+ [
94
+ 'data' => 'of-the-day',
95
+ 'date' => 'today',
96
+ 'stat' => 'all',
97
+ 'otd' => 'character',
98
+ ],
99
+ $atts
100
+ );
101
+
102
+ $this_day = sanitize_text_field( $attributes['date'] );
103
+ $stat_fmt = sanitize_text_field( $attributes['stat'] );
104
+ $otd_type = sanitize_text_field( $attributes['otd'] );
105
+
106
+ switch ( $attributes['data'] ) {
107
+ case 'last-death':
108
+ $return = self::last_death();
109
+ break;
110
+ case 'of-the-day':
111
+ $return = self::of_the_day( $otd_type );
112
+ break;
113
+ case 'on-this-day':
114
+ case 'died-on-this-day':
115
+ $return = self::died_on_this_day( $this_day );
116
+ break;
117
+ case 'stats':
118
+ $return = self::statistics( $stat_fmt );
119
+ break;
120
+ case 'this-year':
121
+ $return = self::this_year( $this_day );
122
+ break;
123
+ default:
124
+ $return = '';
125
+ }
126
+
127
+ return $return;
128
+ }
129
+
130
+ /**
131
+ * Register Widgets
132
+ */
133
+ public function register_widgets() {
134
+
135
+ $widgets = array( 'LezWatchTV_Last_Death_Widget', 'LezWatchTV_Of_The_Day_Widget', 'LezWatchTV_On_This_Day_Widget', 'LezWatchTV_Statistics_Widget', 'LezWatchTV_This_Year_Widget' );
136
+
137
+ foreach ( $widgets as $widget ) {
138
+ $this->widget = new $widget();
139
+ register_widget( $this->widget );
140
+ }
141
+ }
142
+
143
+ /**
144
+ * The Last Death
145
+ * Code that generates the last death
146
+ */
147
+ public static function last_death() {
148
+
149
+ $request = wp_remote_get( self::$apiurl . '/last-death/' );
150
+
151
+ // Make sure it's running before we do anything...
152
+ if ( wp_remote_retrieve_response_code( $request ) !== 200 ) {
153
+ $response = __( '<p>LezWatch.TV is temporarily offline, but will return soon.</p>', 'lezwatchtv' );
154
+ } else {
155
+ $response = wp_remote_retrieve_body( $request );
156
+ $response = json_decode( $response, true );
157
+ // translators: %s is the amount of time since a queer death (1 day, 2 days, 1 month, etc)
158
+ $return = '<p>' . sprintf( __( 'It has been %s since the last queer female death on television', 'lezwatchtv' ), '<strong>' . human_time_diff( $response['died'], current_time( 'timestamp' ) ) . '</strong> ' );
159
+ $return .= ': <a href="' . $response['url'] . '">' . $response['name'] . '</a> - ' . date( 'F j, Y', $response['died'] ) . '</p>';
160
+ }
161
+
162
+ $return = '<div class="lezwatchtv last-death">' . $return . '</div>';
163
+
164
+ return $return;
165
+ }
166
+
167
+ /**
168
+ * Of The Day
169
+ * Code that generates the Of The Day code
170
+ */
171
+ public static function of_the_day( $type = 'character' ) {
172
+
173
+ // Quick Failsafe
174
+ $valid_types = array( 'character', 'show', 'death', 'birthday' );
175
+ if ( ! in_array( $type, $valid_types, true ) ) {
176
+ $type = 'character';
177
+ }
178
+
179
+ $request = wp_remote_get( self::$apiurl . '/of-the-day/' . $type );
180
+
181
+ // Make sure it's running before we do anything...
182
+ if ( wp_remote_retrieve_response_code( $request ) !== 200 ) {
183
+ return __( '<p>LezWatch.TV is temporarily offline, but will return soon.</p>', 'lezwatchtv' );
184
+ }
185
+
186
+ $response = wp_remote_retrieve_body( $request );
187
+ $response = json_decode( $response, true );
188
+
189
+ switch ( $type ) {
190
+ case 'death':
191
+ $image = '';
192
+ $title = '';
193
+ $content = self::died_on_this_day( 'today' );
194
+ break;
195
+ case 'birthday':
196
+ if ( ! empty( $response ) && isset( $response['birthdays'] ) ) {
197
+ $image = '<img src="' . plugins_url( 'assets/birthday.jpg', __FILE__ ) . '" width="' . get_option( 'medium_size_w' ) . '">';
198
+ $content = $response['birthdays'];
199
+ } else {
200
+ $image = '';
201
+ $title = '';
202
+ $content = __( 'No one is celebrating a birthday today.', 'lezwatchtv' );
203
+ }
204
+ break;
205
+ default:
206
+ $image = '<a href="' . $response['url'] . '"><img src="' . $response['image'] . '" width="' . get_option( 'medium_size_w' ) . '"></a><br />';
207
+ $content = '<a href="' . $response['url'] . '">' . $response['name'] . '</a>';
208
+ }
209
+
210
+ $return = '<div class="lezwatchtv of-the-day ' . $type . '-of-the-day">' . $image . $content . '</div>';
211
+
212
+ return $return;
213
+ }
214
+
215
+ /**
216
+ * On This Day
217
+ * Code that generates the On This Day death code
218
+ */
219
+ public static function died_on_this_day( $this_day = 'today' ) {
220
+
221
+ $this_day = sanitize_text_field( $this_day );
222
+ if ( 'today' !== $this_day ) {
223
+ $month = substr( $this_day, 0, 2 );
224
+ $day = substr( $this_day, 3, 2 );
225
+ $this_day = ( true === checkdate( $month, $day, date( 'Y' ) ) ) ? $this_day : 'today';
226
+ }
227
+
228
+ $echo_day = ( 'today' === $this_day ) ? time() : strtotime( date( 'Y' ) . '-' . $this_day );
229
+ $json_day = ( 'today' === $this_day ) ? '' : $this_day . '/';
230
+ $request = wp_remote_get( self::$apiurl . '/on-this-day/' . $json_day );
231
+
232
+ // Make sure it's running before we do anything...
233
+ if ( wp_remote_retrieve_response_code( $request ) !== 200 ) {
234
+ return __( '<p>LezWatch.TV is temporarily offline, but will return soon.</p>', 'lezwatchtv' );
235
+ }
236
+
237
+ $response = wp_remote_retrieve_body( $request );
238
+ $response = json_decode( $response, true );
239
+
240
+ $count = ( 'none' === key( $response ) ) ? 0 : count( $response );
241
+ $how_many = __( 'no characters died!', 'lezwatchtv' );
242
+ $the_dead = '';
243
+
244
+ if ( $count > 0 ) {
245
+ // translators: %s is the number of dead characters.
246
+ $how_many = sprintf( _n( '%s character died:', '%s characters died:', $count, 'lezwatchtv' ), $count );
247
+
248
+ $the_dead = '<ul class="byq-otd">';
249
+
250
+ foreach ( $response as $dead_character ) {
251
+ $the_dead .= '<li><a href="' . $dead_character['url'] . '">' . $dead_character['name'] . '</a> - ' . $dead_character['died'] . '</li>';
252
+ }
253
+ $the_dead .= '</ul>';
254
+ }
255
+
256
+ // translators: %1$s is the date; %2$s is the number of dead
257
+ $onthisday = '<p>' . sprintf( __( 'On %1$s, %2$s', 'lezwatchtv' ), date( 'F jS', $echo_day ), $how_many ) . '</p>';
258
+ $return = $onthisday . $the_dead;
259
+
260
+ return $return;
261
+ }
262
+
263
+ /**
264
+ * Statistics
265
+ * Code that generates the stats of death code
266
+ */
267
+ public static function statistics( $format = 'all' ) {
268
+ $format = sanitize_text_field( $format );
269
+
270
+ // Request Data
271
+ $request = wp_remote_get( self::$apiurl . '/stats/death/' );
272
+
273
+ // Make sure it's running before we do anything...
274
+ if ( wp_remote_retrieve_response_code( $request ) !== 200 ) {
275
+ return __( '<p>LezWatch.TV is temporarily offline, but will return soon.</p>', 'lezwatchtv' );
276
+ }
277
+
278
+ $response = wp_remote_retrieve_body( $request );
279
+ $response = json_decode( $response, true );
280
+
281
+ // The Math part
282
+ $live_chars = $response['characters']['alive'];
283
+ $dead_chars = $response['characters']['dead'];
284
+ $total_chars = $live_chars + $dead_chars;
285
+ $percent_chars = number_format( ( $dead_chars / $total_chars ) * 100, 2 );
286
+
287
+ $live_shows = $response['shows']['no-death'];
288
+ $dead_shows = $response['shows']['death'];
289
+ $total_shows = $live_shows + $dead_shows;
290
+ $percent_shows = number_format( ( $dead_shows / $total_shows ) * 100, 2 );
291
+
292
+ // translators: %1$s is the number of dead characters out of %2$s total characters.
293
+ $character_return = sprintf( __( 'There are %1$s dead characters out of %2$s.', 'lezwatchtv' ), $live_chars, $total_chars );
294
+ // translators: %s is the percentage of dead.
295
+ $character_percent_return = sprintf( __( '%s%% of all queer females on TV are dead.', 'lezwatchtv' ), $percent_chars );
296
+
297
+ // translators: %1$s is the number of shows with dead characters out of %2$s total shows.
298
+ $show_return = sprintf( __( 'There are %1$s shows with dead characters out of %2$s.', 'lezwatchtv' ), $dead_shows, $total_shows );
299
+ // translators: %s is the percentage of shows with dead.
300
+ $show_percent_return = sprintf( __( '%s%% of TV shows with any queer female have at least one dead.', 'lezwatchtv' ), $percent_shows );
301
+
302
+ switch ( $format ) {
303
+ case 'characters':
304
+ $return = $character_percent_return;
305
+ break;
306
+
307
+ case 'shows':
308
+ $return = $show_percent_return;
309
+ break;
310
+
311
+ default:
312
+ $return = $character_percent_return . ' ' . $show_percent_return;
313
+ }
314
+ return '<p>' . $return . '</p>';
315
+ }
316
+
317
+
318
+ /**
319
+ * this_year function.
320
+ *
321
+ * @access public
322
+ * @param bool $year (default: false)
323
+ * @return void
324
+ */
325
+ public function this_year( $year = false ) {
326
+
327
+ // If the year isn't valid, we default to this year
328
+ $year = ( ! $year || ! preg_match( '/^[0-9]{4}$/', $year ) ) ? date( 'Y' ) : $year;
329
+
330
+ // Get the data
331
+ $request = wp_remote_get( self::$apiurl . '/what-happened/' . $year );
332
+
333
+ // Make sure it's running before we do anything...
334
+ if ( wp_remote_retrieve_response_code( $request ) !== 200 ) {
335
+ return __( '<p>LezWatch.TV is temporarily offline, but will return soon.</p>', 'lezwatchtv' );
336
+ }
337
+
338
+ $response = wp_remote_retrieve_body( $request );
339
+ $response = json_decode( $response, true );
340
+
341
+ // If we got an error, bail
342
+ if ( array_key_exists( 'success', $response ) && ! $response['success'] ) {
343
+ // translators: %s is a year. Probably 1961.
344
+ $fail = sprintf( __( 'There were no queer female or trans characters on TV prior to %s.', 'lezwatchtv' ), $response['data'] );
345
+ return $fail;
346
+ }
347
+
348
+ // Posts etc made.
349
+ // translators: %s is the number of characters
350
+ $characters = ( 0 === $response['characters'] ) ? __( 'no characters', 'lezwatchtv' ) : sprintf( _n( '%s character', '%s characters', $response['characters'], 'bury-your-queers' ), $response['characters'] );
351
+ // translators: %s is the number of shows
352
+ $shows = ( 0 === $response['shows'] ) ? 'no shows' : sprintf( _n( '%s show', '%s shows', $response['shows'], 'bury-your-queers' ), $response['shows'] );
353
+ // translators: %s is the number of posts
354
+ $posts = ( 0 === $response['posts'] ) ? 'no posts' : sprintf( _n( '%s post', '%s posts', $response['posts'], 'bury-your-queers' ), $response['posts'] );
355
+
356
+ // This Year On Air information:
357
+ // translators: %s is the number of shows on air in that year
358
+ $on_air = ( 0 === $response['on_air']['current'] ) ? __( 'no shows', 'lezwatchtv' ) : sprintf( _n( '%s show', '%s shows', $response['on_air']['current'], 'bury-your-queers' ), $response['on_air']['current'] );
359
+ // translators: %s is the number of shows that started in that year
360
+ $started = ( 0 === $response['on_air']['started'] ) ? __( 'no shows', 'lezwatchtv' ) : sprintf( _n( 'Only %s show', 'A total of %s shows', $response['on_air']['started'], 'bury-your-queers' ), $response['on_air']['started'] );
361
+ // translators: %s is the number of shows that ended in that year
362
+ $ended = ( 0 === $response['on_air']['ended'] ) ? __( 'no shows', 'lezwatchtv' ) : sprintf( _n( 'only %s show', '%s shows', $response['on_air']['ended'], 'bury-your-queers' ), $response['on_air']['ended'] );
363
+
364
+ // Death
365
+ // translators: %s is the number of characters that died in that year
366
+ $death_this_year = ( 0 === $response['dead_year'] ) ? __( 'Amazingly no characters died', 'lezwatchtv' ) : sprintf( _n( 'Only %s character died', 'Sadly, %s characters died', $response['dead_year'], 'bury-your-queers' ), $response['dead_year'] );
367
+
368
+ // The Output
369
+ // translators: %1$s is the year; %2$s is the number of characters on TV that Year; %3$s is the number of shows that begun that year; %4$s is the number of shows that ended that year; %5$s is the all the stuff about dead that year
370
+ $return = sprintf( __( 'In %1$s, there were %2$s with queer female or trans characters on the air. %3$s started and %4$s ended that year. %5$s.', 'lezwatchtv' ), $year, $on_air, $started, $ended, $death_this_year );
371
+
372
+ return $return;
373
+ }
374
+
375
+ // donate link on manage plugin page
376
+ public function donate_link( $links, $file ) {
377
+ if ( plugin_basename( __FILE__ ) === $file ) {
378
+ $donate_link = '<a href="https://ko-fi.com/A236CEN/">' . __( 'Donate', 'lezwatchtv' ) . '</a>';
379
+ $links[] = $donate_link;
380
+ }
381
+ return $links;
382
+ }
383
+
384
+ }
385
+ new LezWatchTV();
386
+
387
+ // Include Widgets
388
+ require_once 'widgets/_main.php';
389
+
390
+ // Include Gutenberg
391
+ require_once 'gutenberg/_main.php';
phpcs.xml.dist ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <ruleset name="LezWatch.TV Coding Standards">
3
+ <description>A custom ruleset to take in account both WordPress and Lesbian standards.</description>
4
+ <rule ref="WordPress-Extra">
5
+ <exclude name="WordPress.Files.FileName.InvalidClassFileName" />
6
+ <exclude name="WordPress.Files.FileName.NotHyphenatedLowercase" />
7
+ </rule>
8
+ </ruleset>
readme.txt ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === LezWatch.TV News and Information ===
2
+ Contributors: Ipstenu, liljimmi
3
+ Tags: television, queer, lesbian, tv, lezwatchtv
4
+ Requires at least: 4.8
5
+ Tested up to: 5.0
6
+ Stable tag: 1.0
7
+ License: GPLv2 (or Later)
8
+
9
+ Display information on queer female, transgender, and non-binary representation on TV. Brought to you by LezWatch.TV.
10
+
11
+ == Description ==
12
+
13
+ [LezWatch.TV](https://lezwatchtv.com/) catalogs and documents queer female, transgender, and non-binary characters, as well as their actors and shows from TV, web and streaming media. With that data, statistics are calculated on the state of international queer story representation. We provide easy and free access to finding the best shows with queer characters and stories in the genres fans want to see. We can help you keep up to date with the global happenings of queer representation on television.
14
+
15
+ Currently we provide the following information about those characters:
16
+
17
+ * **... of the Day:** A character or show (or death of a character) of the current day
18
+ * **Last Death:** The latest character death
19
+ * **On This Day:** The names of characters who died on that day
20
+ * **Statistics:** The percentage of characters who died and/or shows with death
21
+ * **This Year:** An overview of data from a specific year
22
+
23
+ = Privacy Policy =
24
+
25
+ In using this plugin, your website will contact the LezWatch.TV API to request up-to-date information. The IP address of your domain will be tracked, in order to generate usage statistics of the service. There is no information collected from the visitors to your site.
26
+
27
+ By using this plugin, you agree to the [terms of Use of LezWatch.TV](https://lezwatchtv.com/tos/) as a service provider. All data collected falls under the [LezWatch.TV Privacy Policy](https://lezwatchtv.com/tos/privacy/).
28
+
29
+ = Usage =
30
+
31
+ The data can be displayed via a widget, a shortcode, or a Gutenberg Block.
32
+
33
+ **Widgets**
34
+
35
+ * **LWTV - ... Of The Day**
36
+ * **LWTV - On This Day**
37
+ * **LWTV - Last Death**
38
+ * **LWTV - Statistics**
39
+
40
+ **Shortcodes**
41
+
42
+ * `[lwtv data="of-the-day" otd={character|show|death|birthday}]`
43
+ * `[lwtv data="died-on-this-day"]`
44
+ * `[lwtv data="died-on-this-day" format="MM-DD"]`
45
+ * `[lwtv data="this-year" format="YYYY"]`
46
+ * `[lwtv data="last-death"]`
47
+
48
+ **Blocks**
49
+
50
+ * ... Of The Day
51
+ * Last Death
52
+
53
+ Notes:
54
+ * If no type is passed to '... Of The Day' it will default to the character of the day.
55
+ * If no date is passed to 'On This Day' it will default to today.
56
+ * If no format type is passed to 'Stats' it will default to display both character and show stats.
57
+ * If no year is passed to 'This Year' it will default to this current year.
58
+
59
+ == Frequently Asked Questions ==
60
+
61
+ = Where do you get your data? =
62
+
63
+ Data is pulled from [LezWatch.TV](https://lezwatchtv.com).
64
+
65
+ = How accurate is the data? =
66
+
67
+ As accurate as humanly possible. LezWatch.TV content is curated by hand.
68
+
69
+ = Is this US shows only? =
70
+
71
+ No! LezWatch.TV records shows from the entire planet.
72
+
73
+ = Who owns LezWatch.TV =
74
+
75
+ [We do](https://lezwatchtv.com/about/).
76
+
77
+ = You're missing some shows/characters =
78
+
79
+ We know. The world is a big place. [Please drop us a line and let us know](https://lezwatchtv.com/about/contact/). We're always trying to make it better.
80
+
81
+ = Why only female queers? =
82
+
83
+ Because the site data is from LezWatch.TV and that's what we specialize in. If someone wants to make a similar site for male queers, we're happy to help them output their data so it can be used.
84
+
85
+ = What information from my site is tracked? =
86
+
87
+ The IP address and domain of sites that use this plugin are tracked _only_ when the plugin is activated and used on the front-end of your website. No data is tracked until a widget or shortcode is in place. For more information, please review the following:
88
+
89
+ * [Terms of Use](https://lezwatchtv.com/tos/)
90
+ * [Privacy Policy](https://lezwatchtv.com/tos/privacy/).
91
+
92
+ == Screenshots ==
93
+
94
+ == Installation ==
95
+
96
+ 1. Download the plugin .zip file and make note of where on your computer you downloaded it to.
97
+ 2. In the WordPress admin (yourdomain.com/wp-admin) go to Plugins > Add New or click the "Add New" button on the main plugins screen.
98
+ 3. On the following screen, click the "Upload Plugin" button.
99
+ 4. Browse your computer to where you downloaded the plugin .zip file, select it and click the "Install Now" button.
100
+ 5. After the plugin has successfully installed, click "Activate Plugin" and enjoy!
101
+
102
+ ==Changelog==
103
+
104
+ === 1.0.0 ===
105
+
106
+ * September 2018 by Ipstenu
107
+ * Reboot and rebranding - all the good, none of the bad.
uninstall.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file is part of LezWatch.TV News & Information, a plugin for WordPress.
4
+ */
5
+
6
+ if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
7
+ die;
8
+ }
widgets/_main.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Plugin File: Widgets to include.
4
+ */
5
+
6
+ require_once 'last-death.php';
7
+ require_once 'of-the-day.php';
8
+ require_once 'on-this-day.php';
9
+ require_once 'statistics.php';
10
+ require_once 'this-year.php';
widgets/last-death.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Plugin File: Widget -- Last Death
4
+ * Widget to display last queer death
5
+ * @since 1.0.0
6
+ */
7
+
8
+ class LezWatchTV_Last_Death_Widget extends WP_Widget {
9
+
10
+ /**
11
+ * Holds widget settings defaults, populated in constructor.
12
+ */
13
+ protected $defaults;
14
+
15
+ /**
16
+ * Constructor.
17
+ *
18
+ * Set the default widget options and create widget.
19
+ */
20
+ public function __construct() {
21
+
22
+ $this->defaults = array(
23
+ 'title' => __( 'Last Queer Death', 'lezwatchtv' ),
24
+ );
25
+
26
+ $widget_ops = array(
27
+ 'classname' => 'dead-character deadwidget',
28
+ 'description' => __( 'Displays time since the last queer female or trans character death on television.', 'lezwatchtv' ),
29
+ );
30
+
31
+ $control_ops = array(
32
+ 'id_base' => 'byq-dead-char',
33
+ );
34
+
35
+ parent::__construct( 'byq-dead-char', __( 'LWTV - Last Death', 'lezwatchtv' ), $widget_ops, $control_ops );
36
+ }
37
+
38
+ /**
39
+ * Echo the widget content.
40
+ *
41
+ * @param array $args Display arguments
42
+ * @param array $instance The settings for the particular instance of the widget
43
+ */
44
+ public function widget( $args, $instance ) {
45
+
46
+ $instance = wp_parse_args( (array) $instance, $this->defaults );
47
+
48
+ echo $args['before_widget'];
49
+
50
+ if ( ! empty( $instance['title'] ) ) {
51
+ echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
52
+ }
53
+
54
+ echo wp_kses_post( LezWatchTV::last_death() );
55
+
56
+ echo $args['after_widget'];
57
+ }
58
+
59
+ /**
60
+ * Update a particular instance.
61
+ *
62
+ * @param array $new_instance New settings for this instance as input by the user via form()
63
+ * @param array $old_instance Old settings for this instance
64
+ * @return array Settings to save or bool false to cancel saving
65
+ */
66
+ public function update( $new_instance, $old_instance ) {
67
+ $new_instance['title'] = wp_strip_all_tags( $new_instance['title'] );
68
+ return $new_instance;
69
+ }
70
+
71
+ /**
72
+ * Echo the settings update form.
73
+ *
74
+ * @param array $instance Current settings
75
+ */
76
+ public function form( $instance ) {
77
+ $instance = wp_parse_args( (array) $instance, $this->defaults );
78
+ ?>
79
+ <p>
80
+ <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title', 'lezwatchtv' ); ?>: </label>
81
+ <input type="text" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" class="widefat" />
82
+ </p>
83
+ <?php
84
+ }
85
+ }
widgets/of-the-day.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Plugin File: Widget -- Of The Day
4
+ * Widget to display ... Of The Day
5
+ * @since 1.0
6
+ */
7
+
8
+ class LezWatchTV_Of_The_Day_Widget extends WP_Widget {
9
+
10
+ /**
11
+ * Holds widget settings defaults, populated in constructor.
12
+ */
13
+ protected $defaults;
14
+ protected $valid_types;
15
+
16
+ /**
17
+ * Constructor.
18
+ *
19
+ * Set the default widget options and create widget.
20
+ */
21
+ public function __construct() {
22
+
23
+ $this->defaults = array(
24
+ 'title' => __( 'Of The Day', 'lezwatchtv' ),
25
+ 'type' => 'character',
26
+ );
27
+ $this->valid_types = array( 'character', 'show', 'death' );
28
+
29
+ $widget_ops = array(
30
+ 'classname' => 'widget-lwtv-of-the-day',
31
+ 'description' => __( 'Displays the character, show, or death of the day.', 'lezwatchtv' ),
32
+ );
33
+
34
+ $control_ops = array(
35
+ 'id_base' => 'lwtv-of-the-day',
36
+ );
37
+
38
+ parent::__construct( 'lwtv-of-the-day', __( 'LWTV - Of The Day', 'lezwatchtv' ), $widget_ops, $control_ops );
39
+ }
40
+
41
+ /**
42
+ * Echo the widget content.
43
+ *
44
+ * @param array $args Display arguments
45
+ * @param array $instance The settings for the particular instance of the widget
46
+ */
47
+ public function widget( $args, $instance ) {
48
+
49
+ $instance = wp_parse_args( (array) $instance, $this->defaults );
50
+
51
+ echo $args['before_widget'];
52
+
53
+ if ( ! empty( $instance['title'] ) ) {
54
+ echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
55
+ }
56
+
57
+ $type = ( ! empty( $instance['type'] ) ) ? $instance['type'] : 'character';
58
+
59
+ echo '<center>' . LezWatchTV::of_the_day( $type ) . '</center>';
60
+
61
+ echo $args['after_widget'];
62
+ }
63
+
64
+ /**
65
+ * Update a particular instance.
66
+ *
67
+ * @param array $new_instance New settings for this instance as input by the user via form()
68
+ * @param array $old_instance Old settings for this instance
69
+ * @return array Settings to save or bool false to cancel saving
70
+ */
71
+ public function update( $new_instance, $old_instance ) {
72
+ $new_instance['title'] = wp_strip_all_tags( $new_instance['title'] );
73
+
74
+ if ( ! in_array( $new_instance['type'], $this->valid_types ) ) {
75
+ $new_instance['type'] = 'character';
76
+ }
77
+ $new_instance['type'] = sanitize_html_class( $new_instance['type'], 'character' );
78
+
79
+ return $new_instance;
80
+ }
81
+
82
+ /**
83
+ * Echo the settings update form.
84
+ *
85
+ * @param array $instance Current settings
86
+ */
87
+ public function form( $instance ) {
88
+ $instance = wp_parse_args( (array) $instance, $this->defaults );
89
+ ?>
90
+ <p>
91
+ <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title', 'lezwatchtv' ); ?>: </label>
92
+ <input type="text" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" class="widefat" />
93
+ </p>
94
+
95
+ <p>
96
+ <label for="<?php echo esc_attr( $this->get_field_id( 'type' ) ); ?>"><?php esc_html_e( 'Type', 'lezwatchtv' ); ?>: </label>
97
+ <select id="<?php echo esc_attr( $this->get_field_id( 'type' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'type' ) ); ?>" class="widefat">
98
+ <?php
99
+ foreach ( $this->valid_types as $type ) {
100
+ echo '<option ' . selected( $instance['type'], $type ) . 'value="' . esc_attr( $type ) . '">' . esc_html( ucfirst( $type ) ) . '</option>';
101
+ }
102
+ ?>
103
+ </select>
104
+ </p>
105
+ <?php
106
+ }
107
+ }
widgets/on-this-day.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Plugin File: Widget -- On This Day
4
+ * Widget to display On This Day
5
+ * @since 1.0
6
+ */
7
+
8
+ class LezWatchTV_On_This_Day_Widget extends WP_Widget {
9
+
10
+ /**
11
+ * Holds widget settings defaults, populated in constructor.
12
+ */
13
+ protected $defaults;
14
+
15
+ /**
16
+ * Constructor.
17
+ *
18
+ * Set the default widget options and create widget.
19
+ */
20
+ public function __construct() {
21
+
22
+ $this->defaults = array(
23
+ 'title' => __( 'On This Day', 'lezwatchtv' ),
24
+ 'date' => '',
25
+ );
26
+
27
+ $widget_ops = array(
28
+ 'classname' => 'dead-on-this-day deadwidget',
29
+ 'description' => __( 'Displays any queer female or trans TV character who died on this day in years past.', 'lezwatchtv' ),
30
+ );
31
+
32
+ $control_ops = array(
33
+ 'id_base' => 'byq-on-this-day',
34
+ );
35
+
36
+ parent::__construct( 'byq-on-this-day', __( 'LWTV - On This Day', 'lezwatchtv' ), $widget_ops, $control_ops );
37
+ }
38
+
39
+ /**
40
+ * Echo the widget content.
41
+ *
42
+ * @param array $args Display arguments
43
+ * @param array $instance The settings for the particular instance of the widget
44
+ */
45
+ public function widget( $args, $instance ) {
46
+
47
+ $instance = wp_parse_args( (array) $instance, $this->defaults );
48
+
49
+ echo $args['before_widget'];
50
+
51
+ if ( ! empty( $instance['title'] ) ) {
52
+ echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
53
+ }
54
+
55
+ $date = ( ! empty( $instance['date'] ) ) ? $instance['date'] : 'today' ;
56
+
57
+ echo LezWatchTV::died_on_this_day( $date );
58
+
59
+ echo $args['after_widget'];
60
+ }
61
+
62
+ /**
63
+ * Update a particular instance.
64
+ *
65
+ * @param array $new_instance New settings for this instance as input by the user via form()
66
+ * @param array $old_instance Old settings for this instance
67
+ * @return array Settings to save or bool false to cancel saving
68
+ */
69
+ public function update( $new_instance, $old_instance ) {
70
+ $new_instance['title'] = wp_strip_all_tags( $new_instance['title'] );
71
+
72
+ $new_instance['date'] = substr( $new_instance['date'], 0, 5 );
73
+ $month = substr( $new_instance['date'], 0, 2 );
74
+ $day = substr( $new_instance['date'], 3, 2 );
75
+ if ( checkdate( $month, $day, date( 'Y' ) ) === false ) {
76
+ $new_instance['date'] = '';
77
+ }
78
+ $new_instance['date'] = wp_strip_all_tags( $new_instance['date'] );
79
+
80
+ return $new_instance;
81
+ }
82
+
83
+ /**
84
+ * Echo the settings update form.
85
+ *
86
+ * @param array $instance Current settings
87
+ */
88
+ public function form( $instance ) {
89
+ $instance = wp_parse_args( (array) $instance, $this->defaults );
90
+ ?>
91
+ <p>
92
+ <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title', 'lezwatchtv' ); ?>: </label>
93
+ <input type="text" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" class="widefat" />
94
+ </p>
95
+
96
+ <p>
97
+ <label for="<?php echo esc_attr( $this->get_field_id( 'date' ) ); ?>"><?php esc_html_e( 'Date (Optional)', 'lezwatchtv' ); ?>: </label>
98
+ <input type="text" id="<?php echo esc_attr( $this->get_field_id( 'date' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'date' ) ); ?>" class="datepicker" value="<?php echo esc_attr( $instance['date'] ); ?>" class="widefat" />
99
+ <br><em><?php esc_html_e( 'If left blank, the date used will be the current day.', 'lezwatchtv' ); ?></em>
100
+ </p>
101
+ <?php
102
+ }
103
+ }
widgets/statistics.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Plugin File: Widgets -- Statistics
4
+ * Widget to display death statistics
5
+ * @since 1.0
6
+ */
7
+
8
+ class LezWatchTV_Statistics_Widget extends WP_Widget {
9
+
10
+ /**
11
+ * Holds widget settings defaults, populated in constructor.
12
+ */
13
+ protected $defaults;
14
+
15
+ /**
16
+ * Constructor.
17
+ *
18
+ * Set the default widget options and create widget.
19
+ */
20
+ public function __construct() {
21
+
22
+ $this->defaults = array(
23
+ 'title' => __( 'Queer Fatality Statistics', 'lezwatchtv' ),
24
+ 'type' => '',
25
+ );
26
+
27
+ $widget_ops = array(
28
+ 'classname' => 'dead-stats deadwidget',
29
+ 'description' => __( 'Displays the percentage of how many queer female or trans TV characters who have died, and/or how many shows have death.', 'lezwatchtv' ),
30
+ );
31
+
32
+ $control_ops = array(
33
+ 'id_base' => 'byq-statistics',
34
+ );
35
+
36
+ parent::__construct( 'byq-statistics', __( 'LWTV - Statistics', 'lezwatchtv' ), $widget_ops, $control_ops );
37
+ }
38
+
39
+ /**
40
+ * Echo the widget content.
41
+ *
42
+ * @param array $args Display arguments
43
+ * @param array $instance The settings for the particular instance of the widget
44
+ */
45
+ public function widget( $args, $instance ) {
46
+
47
+ $instance = wp_parse_args( (array) $instance, $this->defaults );
48
+
49
+ echo $args['before_widget'];
50
+
51
+ if ( ! empty( $instance['title'] ) ) {
52
+ echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
53
+ }
54
+
55
+ $type = ( ! empty( $instance['type'] ) )? $instance['type'] : 'all' ;
56
+
57
+ echo LezWatchTV::statistics( $type );
58
+
59
+ echo $args['after_widget'];
60
+ }
61
+
62
+ /**
63
+ * Update a particular instance.
64
+ *
65
+ * @param array $new_instance New settings for this instance as input by the user via form()
66
+ * @param array $old_instance Old settings for this instance
67
+ * @return array Settings to save or bool false to cancel saving
68
+ */
69
+ public function update( $new_instance, $old_instance ) {
70
+ $new_instance['title'] = wp_strip_all_tags( $new_instance['title'] );
71
+ $new_instance['type'] = wp_strip_all_tags( $new_instance['type'] );
72
+ return $new_instance;
73
+ }
74
+
75
+ /**
76
+ * Echo the settings update form.
77
+ *
78
+ * @param array $instance Current settings
79
+ */
80
+ public function form( $instance ) {
81
+ $instance = wp_parse_args( (array) $instance, $this->defaults );
82
+
83
+ $stat_types = array( 'characters', 'shows' );
84
+
85
+ ?>
86
+ <p>
87
+ <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title', 'lezwatchtv' ); ?>: </label>
88
+ <input type="text" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" class="widefat" />
89
+ </p>
90
+
91
+ <p>
92
+ <label for="<?php echo esc_attr( $this->get_field_id( 'type' ) ); ?>"><?php esc_html_e( 'Type', 'lezwatchtv' ); ?>: </label>
93
+
94
+ <select id="<?php echo $this->get_field_id( 'type' ); ?>" name="<?php echo $this->get_field_name( 'type' ); ?>" class="widefat" style="width:100%;">
95
+ <option value="" selected>All</option>
96
+ <?php
97
+ foreach ( $stat_types as $type ) {
98
+ echo '<option ' . selected( $instance['type'], $type ) . 'value="' . esc_attr( $type ) . '">' . esc_html( ucfirst( $type ) ) . '</option>';
99
+ }
100
+ ?>
101
+ </select>
102
+ </p>
103
+ <?php
104
+ }
105
+ }
widgets/this-year.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Plugin File: Widgets -- This Year
4
+ * Widget to display This Year data
5
+ * @since 1.0
6
+ */
7
+
8
+ class LezWatchTV_This_Year_Widget extends WP_Widget {
9
+
10
+ /**
11
+ * Holds widget settings defaults, populated in constructor.
12
+ */
13
+ protected $defaults;
14
+
15
+ /**
16
+ * Constructor.
17
+ *
18
+ * Set the default widget options and create widget.
19
+ */
20
+ public function __construct() {
21
+
22
+ $this->defaults = array(
23
+ 'title' => __( 'In This Year', 'lezwatchtv' ),
24
+ 'year' => date( 'Y' ),
25
+ );
26
+
27
+ $widget_ops = array(
28
+ 'classname' => 'in-this-year thisyearwidget',
29
+ 'description' => __( 'Displays a review of queer female and trans representation on TV for a given year.', 'lezwatchtv' ),
30
+ );
31
+
32
+ $control_ops = array(
33
+ 'id_base' => 'byq-in-this-year',
34
+ );
35
+
36
+ parent::__construct( 'byq-in-this-year', __( 'LWTV - In This Year', 'lezwatchtv' ), $widget_ops, $control_ops );
37
+ }
38
+
39
+ /**
40
+ * Echo the widget content.
41
+ *
42
+ * @param array $args Display arguments
43
+ * @param array $instance The settings for the particular instance of the widget
44
+ */
45
+ public function widget( $args, $instance ) {
46
+
47
+ extract( $args );
48
+ $instance = wp_parse_args( (array) $instance, $this->defaults );
49
+
50
+ echo $args['before_widget'];
51
+
52
+ if ( ! empty( $instance['title'] ) ) {
53
+ echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
54
+ }
55
+
56
+ $year = ( ! empty( $instance['year'] ) )? $instance['year'] : date( 'Y' ) ;
57
+
58
+ echo LezWatchTV::this_year( $year );
59
+
60
+ echo $args['after_widget'];
61
+ }
62
+
63
+ /**
64
+ * Update a particular instance.
65
+ *
66
+ * @param array $new_instance New settings for this instance as input by the user via form()
67
+ * @param array $old_instance Old settings for this instance
68
+ * @return array Settings to save or bool false to cancel saving
69
+ */
70
+ public function update( $new_instance, $old_instance ) {
71
+ $new_instance['title'] = wp_strip_all_tags( $new_instance['title'] );
72
+ $new_instance['year'] = ( preg_match( '/^[0-9]{4}$/', $new_instance['year'] ) ) ? $new_instance['year'] : date( 'Y' );
73
+ return $new_instance;
74
+ }
75
+
76
+ /**
77
+ * Echo the settings update form.
78
+ *
79
+ * @param array $instance Current settings
80
+ */
81
+ public function form( $instance ) {
82
+ $instance = wp_parse_args( (array) $instance, $this->defaults );
83
+
84
+ // Get the first year
85
+ $request = wp_remote_get( LezWatchTV::$apiurl . '/stats/first-year/' );
86
+ $response = wp_remote_retrieve_body( $request );
87
+ $response = json_decode( $response, true );
88
+ ?>
89
+ <p>
90
+ <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title', 'lezwatchtv' ); ?>: </label>
91
+ <input type="text" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" class="widefat" />
92
+ </p>
93
+ <p>
94
+ <label for="<?php echo esc_attr( $this->get_field_id( 'date' ) ); ?>"><?php esc_html_e( 'Year', 'lezwatchtv' ); ?>: </label>
95
+ <select id="<?php echo $this->get_field_id( 'year' ); ?>" name="<?php echo $this->get_field_name( 'year' ); ?>" class="widefat" style="width:100%;">
96
+ <?php
97
+ for ( $year = $response['first']; $year <= date( 'Y' ); ++$year ) {
98
+ echo '<option ' . selected( $instance['year'], $year ) . ' value="' . $year . '">' . $year . '</option>';
99
+ }
100
+ ?>
101
+ </select>
102
+ </p>
103
+ <?php
104
+ }
105
+ }